mysql 命令源码_mysql 服务器端命令源码(一)

sql/sql_show.cc文件中实现

void mysqld_list_processes(THD *thd,const char *user, bool verbose)

{

Item *field;

List field_list;

I_List thread_infos;

ulong max_query_length= (verbose ? thd->variables.max_allowed_packet :

PROCESS_LIST_WIDTH);

Protocol *protocol= thd->protocol;

DBUG_ENTER("mysqld_list_processes");

field_list.push_back(new Item_int("Id", 0, MY_INT32_NUM_DECIMAL_DIGITS));

field_list.push_back(new Item_empty_string("User",16));

field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN));

field_list.push_back(field=new Item_empty_string("db",NAME_CHAR_LEN));

field->maybe_null=1;

field_list.push_back(new Item_empty_string("Command",16));

field_list.push_back(field= new Item_return_int("Time",7, MYSQL_TYPE_LONG));

field->unsigned_flag= 0;

field_list.push_back(field=new Item_empty_string("State",30));

field->maybe_null=1;

field_list.push_back(field=new Item_empty_string("Info",max_query_length));

field->maybe_null=1;

=====?

三个步骤:

1.先定义id,user,Host,db,Command,Time,State,Info字段信息到field_list变量中,并通过protocol->send_fields发送到客户端

2. 锁定线程总数,遍历所有线程,将所有线程的信息填入thread_infos链表变量中

向客户端传送thread_infos链表中的数据,通过protocol->write()完成写操作

实际中遇到的问题:

如果一个mysql线程很多,那么大部份的sleep线程将干扰查看processlist列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值