表2000行, id主键,98%update正常,突然有一条很慢, 使用show profile查询的结果是下面这个状态占用时间比较长,
{
"Status": "query end",
"Duration": "1.751142",
"CPU_user": "0.008999",
"CPU_system": "0.003999",
"Context_voluntary": "98",
"Context_involuntary": "0",
"Block_ops_in": "8",
"Block_ops_out": "32",
"Messages_sent": "0",
"Messages_received": "0",
"Page_faults_major": "0",
"Page_faults_minor": "0",
"Swaps": "0",
"Source_function": "mysql_execute_command",
"Source_file": "sql_parse.cc",
"Source_line": "4465"
},
请问这个 "Status": "query end", 状态是什么状态, 这个状态下在执行什么事情?
"Context_voluntary": "98", "Block_ops_in": "8", "Block_ops_out": "32" 这些字段的含义是什么?大多数时候这些字段都是0, 为什么突然一条这几个字段很高?
{
"Status": "query end",
"Duration": "1.751142",
"CPU_user": "0.008999",
"CPU_system": "0.003999",
"Context_voluntary": "98",
"Context_involuntary": "0",
"Block_ops_in": "8",
"Block_ops_out": "32",
"Messages_sent": "0",
"Messages_received": "0",
"Page_faults_major": "0",
"Page_faults_minor": "0",
"Swaps": "0",
"Source_function": "mysql_execute_command",
"Source_file": "sql_parse.cc",
"Source_line": "4465"
},
请问这个 "Status": "query end", 状态是什么状态, 这个状态下在执行什么事情?
"Context_voluntary": "98", "Block_ops_in": "8", "Block_ops_out": "32" 这些字段的含义是什么?大多数时候这些字段都是0, 为什么突然一条这几个字段很高?
status表示状态,query end表示查询已经结束了。Context_voluntary是上下文的切换次数Block_ops_in、Block_ops_out处理数据块的个数。
1、MySQL是用c写的,那个profiling参数的实现应该类似:
if (profiling)
RecordSomething(Struct Status xxStatus);
2、Status定义需要参考代码,具体处理也可以在代码里找到
3、每条SQL语句的执行都是一个函数,可以快速浏览这个文件对应行,找到上下文看看都处理了什么
"Source_function": "mysql_execute_command",
"Source_file": "sql_parse.cc",
"Source_line": "4465"
4、找找MySQL帮助,应该也有说明
5、可以看看MySQL内核分析的材料,可能会更快
啃代码还是一个要善于坚持的困难任务,何况MySQL好像有百万行?
看看这个大牛怎么啃的
http://blog.csdn.net/edwzhang/article/details/7783884