澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:执行分析,MySQL使用pr

 

在本章首节中大家还提到过通过 Query Profiler 来定位一条 Query 的天性瓶颈,这里大家再详尽介绍一下 Profiling 的用处及选择办法。

深入分析SQL实行带来的支出是优化SQL的严重性手腕。在MySQL数据库中,可以因此铺排profiling参数来启用SQL剖判。该参数可以在全局和session级别来安装。对于全局等第则效果于全部MySQL实例,而session品级紧影响当下session。该参数开启后,后续实行的SQL语句都将记录其财富开采,诸如IO,上下文切换,CPU,Memory等等。依据这一个付出越来越深入分析当前SQL瓶颈进而举办优化与调治。本文描述了什么样行使MySQL profile,不关乎具体的样例深入分析。

简介

文中内容均为阅读前辈的文章所整理而来,仿照效法文章已在终极全指明

本文分为上下两篇:

  • 上篇:MySQL 的 SQL 推行分析
  • 下篇:MySQL 质量优化

后端开拓必然会接触到数据库,数据层的优劣会潜移暗化整个服务的响合时间。所以,数据库的优化技能是必须调整的,上边正是自家在学习进程中收拾的,备忘。

上面为上篇内容,分为以下一些:

  • 一、SQL 推行时间深入分析
  • 二、SQL 执市价况剖析

本文出处: 

要想优化一条 Query,大家就要求明白的精晓那条 Query 的天性瓶颈到底在哪个地方,是消耗的 CPU计算太多,依然要求的的 IO 操作太多?要想可以知情的垂询那个新闻,在 MySQL 5.0 和 MySQL 5.1正规版中曾经能够非常轻巧做到了,那正是因此 Query Profiler 功效。

1、有关profile的描述

一、SQL 实施时间分析

经过找到实施时间长的 SQL 语句,能够直观的觉察数据层的作用难题。

 

MySQL 的 Query Profiler 是叁个使用特别有益的 Query 检查判断深入分析工具,通过该工具得以收获一条Query 在全路实践进程中三种能源的损耗情况,如 CPU,IO,IPC,SWAP 等,以至发生的 PAGE FAULTS,CONTEXT SWITCHE 等等,同一时间还是能获得该 Query 实行进度中 MySQL 所调用的顺序函数在源文件中的地点。

翻开profiling系统变量

1.通过 show processlist 来查看系统的执行情状

mysql> show processlist;
 ---- ------ ----------- ------ --------- ------ ------- ------------------ 
| Id | User | Host      | db   | Command | Time | State | Info             |
 ---- ------ ----------- ------ --------- ------ ------- ------------------ 
|  2 | root | localhost | NULL | Query   |    0 | init  | show processlist |
 ---- ------ ----------- ------ --------- ------ ------- ------------------ 
1 row in set (0.01 sec)

  show profile 命令用于追踪推行过的sql语句的财富消耗音信,能够支持查看sql语句的推市场价格况,能够在做质量深入分析也许难点检查判断的时候作为参照。
  在MySQL5.7中, show profile 命令已经上马不引进应用,MySQL使用performance_schema 中系统表的新闻来代替show profile命令
  本文简介一下MySQL的profile使用,乃至在MySQL5.7过后的精耕细作,相同的时候与SQL Server中的DMV以致profile和扩展事件做一个简短的相持统一,
  最终会发觉,在MySQL和SQL Server中那些音讯反映出来的目标都和乃至参照意义,都是类似的。

下边大家看看 Query Profiler 的切实可行用法。

mysql> show variables like '%profil%';  

2.通过 profiling 来拓宽查看

其一命令是翻开 SQL 的施行时间,能很直观的观察快慢。

 

1、 开启 profiling 参数

------------------------ -------

2.1 查看 profiling 是不是张开

0 代表依然关闭着解析成效

mysql> select @@profiling;
 ------------- 
| @@profiling |
 ------------- 
|           0 |
 ------------- 

MySQL5.7尚且帮助的show profile

root@localhost : (none) 10:53:11> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

| Variable_name          | Value |

2.2 展开工具

mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> select @@profiling;
 ------------- 
| @@profiling |
 ------------- 
|           1 |
 ------------- 

  show profile在MySQ L5.7事后就起来是贰个老式的选项,可是MySQL 5.7尚且协助,不过不提出使用。show profile追踪记录SQL执市价况的内需展开配置工夫利用

通过实施 “set profiling”命令,能够敞按钮闭 Query Profiler 功用。

------------------------ -------

2.3 查看 SQL 的实行时间

mysql> show profiles;
 ---------- ------------ ---------------------------- 
| Query_ID | Duration   | Query                      |
 ---------- ------------ ---------------------------- 
|        1 | 0.00173700 | select * from ip           |
|        2 | 0.00057500 | select porxy, port from ip |
 ---------- ------------ ---------------------------- 

  澳门新浦京娱乐场网站 1

2、 执行 Query

| have_profiling         | YES   |  #只读变量,用于调节是还是不是由系统变量开启或剥夺profiling;

2.4 查看 SQL 实施耗费时间详细音讯

语法:show profile for query Query_ID

mysql> show profile for query 1;
 ---------------------- ---------- 
| Status               | Duration |
 ---------------------- ---------- 
| starting             | 0.000073 |
| checking permissions | 0.000031 |   ---检查是否在缓存中  
| Opening tables       | 0.000207 |   ---打开表
| init                 | 0.000067 |   ---初始化
| System lock          | 0.000040 |   ---锁系统
| optimizing           | 0.000005 |   ---优化查询
| statistics           | 0.000021 |
| preparing            | 0.000015 |   ---准备
| executing            | 0.000003 |   ---执行
| Sending data         | 0.000993 |
| end                  | 0.000006 |
| query end            | 0.000007 |
| closing tables       | 0.000011 |
| freeing items        | 0.000169 |
| cleaning up          | 0.000089 |
 ---------------------- ---------- 

上述实际的音信都以从 INFORMATION_SCHEMA.PROFILING 那张表中得到的。这张表记录了颇负的次第步骤的实践时间及有关音信。语法:
select * from INFORMATION_SCHEMA.PROFILING where query_id = Query_ID;

   测量检验试行数十二次“select count(1) from test_table1;”这么些SQL语句,查看推行过的sql的QUERAV4Y_ID

澳门新浦京娱乐场网站 2

| profiling              | OFF   |  #开启或关闭SQL语句深入分析功效;

3.慢查询日志

澳门新浦京娱乐场网站:执行分析,MySQL使用profile分析SQL语句执行过程。MySQL 的慢查询日志,以点带面正是把实行时间当先设定值(默以为10s)的 SQL 记录到日志中。那项效能须求手动开启,不过展开后会变成一定的属性损耗。

  澳门新浦京娱乐场网站 3

... ...
root@localhost : test 07:43:18> select status,count(*)
-> from test_profiling group by status;
 ---------------- ---------- 
| status | count(*) |
 ---------------- ---------- 
| st_xxx1 | 27 |
| st_xxx2 | 6666 |
| st_xxx3 | 292887 |
| st_xxx4 | 15 |
 ---------------- ---------- 
5 rows in set (1.11 sec)
... ...

| profiling_history_size | 15    |  #设置保留profiling的多少,缺省为15,范围为0至100,为0时将禁止使用profiling;

3.1 查看慢日志是不是开启

暗中认可情状下slow_query_log的值为OFF,表示慢查询日志是禁止使用的,能够经过安装slow_query_log的值来拉开。语法:set global slow_query_log=1

mysql> show variables  like '%slow_query_log%';
 --------------------- ------------------------------------------------------ 
| Variable_name       | Value                                                |
 --------------------- ------------------------------------------------------ 
| slow_query_log      | OFF                                                  |
| slow_query_log_file | /usr/local/var/mysql/xueweihandeMacBook-Air-slow.log |
 --------------------- ------------------------------------------------------ 
2 rows in set (0.11 sec)

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.03 sec)

mysql> show variables  like '%slow_query_log%';
 --------------------- ------------------------------------------------------ 
| Variable_name       | Value                                                |
 --------------------- ------------------------------------------------------ 
| slow_query_log      | ON                                                   |
| slow_query_log_file | /usr/local/var/mysql/xueweihandeMacBook-Air-slow.log |
 --------------------- ------------------------------------------------------ 

  然后翻看具体的某一个query_id的实行进度

澳门新浦京娱乐场网站 4

------------------------ -------

3.2 设置超时时间

  • 设置语法:set global long_query_time=4
  • 翻开语法:show variables like 'long_query_time'

在意:修改后,需求重新连接或新开一个对话技巧观察修改值。

千古生效,修改 my.cnf

slow_query_log=1
long_query_time=10
slow_query_log_file=/path/mysql_slow.log

  澳门新浦京娱乐场网站 5

在拉开 Query Profiler 作用之后,MySQL 就能够自动记录全体实践的 Query 的 profile 音讯了。

3 rows in set (0.00 sec)

3.3 其余参数

  然后方可查看某一个query(实行过的SQL语句)的某一方面包车型大巴能源消耗新闻。
  比如show profile cpufor query 82或者是show profile all for query 82;

3、获取系统中保留的具备 Query 的 profile 概要消息

获取profile的帮助

3.3.1 log_output

参数是点名日志的积攒格局。log_output='FILE'表示将日志存入文件,暗中同意值是'FILE'。log_output='TABLE'表示将日志存入数据库,那样日志音讯就能够被写入到mysql.slow_log表中。MySQL数据库帮忙同临时候二种日志存款和储蓄格局,配置的时候以逗号隔断就能够,如:log_output='FILE,TABLE'。日志记录到系统的专项使用日志表中,要比记录到文件成本更加多的系统财富,因而对于急需启用慢查询日志,又供给能够获取更加高的种类质量,那么建议事先记录到文件。

  澳门新浦京娱乐场网站 6

澳门新浦京娱乐场网站 7

mysql> help profile;  

3.3.2 log-queries-not-using-indexes

未利用索引的查询也被记录到慢查询日志中(可选拔)。假设调优的话,建议拉开这几个选项。别的,开启了那些参数,其实使用full index scan的sql也会被记录到慢查询日志。

  只怕是show profile all for query 82。更加多show profile的参数请参见种种参照他事他说加以考察资料以至合德语档。

root@localhost : test 07:47:35> show profiles;
 ---------- ------------ ------------------------------------------------------------ 
| Query_ID | Duration | Query
|
 ---------- ------------ ------------------------------------------------------------ 
| 1 | 0.00183100 | show databases
|
| 2 | 0.00007000 | SELECT DATABASE()
|
| 3 | 0.00099300 | desc test
|
| 4 | 0.00048800 | show tables
|
| 5 | 0.00430400 | desc test_profiling
|
| 6 | 1.90115800 | select status,count(*) from test_profiling group by status |
 ---------- ------------ ------------------------------------------------------------ 
3 rows in set (0.00 sec)

Name: 'SHOW PROFILE'  

3.3.3 log_slow_admin_statements

代表是或不是将慢处理语句举例ANALYZE TABLE和ALTE路虎极光 TABLE等记入慢查询日志

  澳门新浦京娱乐场网站 8

澳门新浦京娱乐场网站 9

Description:  

3.4 剖析工具 mysqldumpslow

MySQL 提供了慢日志剖判工具 mysqldumpslow。

  • -s 表示依据何种格局排序;
    • c: 访谈计数
    • l: 锁按期间
    • r: 重回记录
    • t: 查询时间
    • al:平均锁按期期
    • ar:平均重返记录数
    • at:平均查询时间
  • -t 是top n的乐趣,即为重回前边多少条的数据;
  • -g 后面能够写一个正则相称情势,大小写不敏感的;

  show profile中著录的音讯实际是积存在INFORMATION_SCHEMA.PROFILING 那些系列表中的,
  各样show profile只可是是一对一于三个马甲,换一种格局来呈现INFORMATION_SCHEMA.PROFILING 中的消息。
  实话讲,个人是不太喜欢系统类似的包装命令的,倒不及自个儿一贯去定义查询条件去查询系统表自个儿来的越发实在。

由此实行 “SHOW PROFILE” 命令获取当前系统中保留的八个 Query 的 profile 的大致新闻。

Syntax:  

3.4.1 命令示例

  • 获取再次回到记录集最多的 10 个 SQL:mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

  • 取得访谈次数最多的 10 个 SQL:mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

  • 赢得依据时间排序的前10条里面含有左连接的查询语句:mysqldumpslow -s t -t 10 -g “left join” /database/mysql/mysql06_slow.log

  • 其它建议在使用这个命令时组合 | 和 more 使用 ,不然有一点都不小概率出现刷屏的图景:mysqldumpslow -s r -t 20 /mysqldata/mysql/mysql06-slow.log | more

澳门新浦京娱乐场网站 10

4、针对单个 Query 获取详细的 profile 音信。

SHOW PROFILE [type [, type] ... ]  

二、SQL 推行情状分析

使用 explain 解析 SQL 执市价况。

explain select * from ip;

 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
|  1 | SIMPLE      | ip    | ALL  | NULL          | NULL | NULL    | NULL |  400 | NULL  |
 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
select_type table type possible_keys key key_len rows Extra
表示查询的类型 输出结果集的表 表示表的连接类型 表示查询时,可能使用的索引 表示实际使用的索引 索引字段的长度 扫描出的行数(估算的行数) 执行情况的描述和说明

  MySQL的show profile差不离便是其一职能。
  细节功用还是用的不得了可怜频仍,然后自然会熟谙,要么就用的时候查一下。

在赢获得概要音信之后,大家就能够依据概要消息中的 Query_ID 来获得某些Query 在施行进度中

    [FOR QUERY n]  

参考

  • MYSQL中SQL推行深入分析
  • MySQL慢查询日志总计
  • MySQL品质优化二
-- 打开当前Session的profiling
set profiling = 1;

-- 查询最近一个查询的profiling信息
show profile;

-- 查询所有的profile信息
show profiles;

-- 查询某个Id的profile信息
show profile for query 5;

-- 查询某个Id的profile指定信息
show profile cpu for query 5;

详细的 profile 新闻了,具体操作如下:

    [LIMIT row_count [OFFSET offset]]  

 

澳门新浦京娱乐场网站 11

type:  

 

地点的例子中是获得 CPU 和 Block IO 的损耗,极其清晰,对于一向质量瓶颈特别适用。希望得到取其余的音信,都得以由此推行“SHOW PROFILE *** FOTucson QUE卡宴Y n” 来博取,各位读者朋友能够自动测量检验熟谙。

    ALL                #呈现全数的支付音讯;

**MySQL5.7之后的performance_schema 替代 show profile**

 

  | BLOCK IO           #展示块IO相关支付;

  第一参照他事他说加以考察官方文书档案

对一样条语句的四遍询问做质量剖析

  | CONTEXT SWITCHES   #上下文切换相关支出;

 

  • 透过 sql 品质剖析器,大家来看待一下 下列语句前后 2 次实施进程的出入,对大家询问 sql 的详尽实践进度是可怜有救助的。

  | CPU                #突显CPU相关支付音讯;

  个人驾驭起来正是将原先存款和储蓄在INFORMATION_SCHEMA.PROFILING系统表中的音信换了多个仓库储存的法子个职责。
  这么些过程也是支撑可配置化的,首先看 performance_schema.setup_actors那些系统表,暗许情况下是敞开了profile追踪记录的。

mysql> create table t_engines select * from t_engines1; 
Query OK, 57344 rows affected (0.10 sec) 
Records: 57344 Duplicates: 0 Warnings: 0 
mysql> select count(*) from t_engines; 
----------  
| count(*) | 
----------  
| 57344 | 
----------  
1 row in set (0.00 sec) 
mysql> select count(*) from t_engines; 
----------  
| count(*) | 
----------  
| 57344 | 
----------  
1 row in set (0.00 sec) 
mysql> SHOW PROFILES; 
---------- ------------ -------------------------------------------------  
| Query_ID | Duration | Query | 
---------- ------------ -------------------------------------------------  
| 26 | 0.10213775 | create table t_engines select * from t_engines1 | 
| 27 | 0.00032775 | select count(*) from t_engines | 
| 28 | 0.00003850 | select count(*) from t_engines | 
---------- ------------ -------------------------------------------------  
15 rows in set (0.01 sec)
mysql> SHOW PROFILE FOR QUERY 27; 
-------------------------------- ------------  
| Status | Duration | 
-------------------------------- ------------  
| (initialization) | 0.00000425 | 
| checking query cache for query | 0.00004050 | 
| checking permissions | 0.00001050 | 
| Opening tables | 0.00018250 | 
| System lock | 0.00000450 | 
| Table lock | 0.00001775 | 
| init | 0.00001075 | 
| optimizing | 0.00000550 | 
| executing | 0.00002775 | 
| end | 0.00000450 | 
| query end | 0.00000325 | 
| storing result in query cache | 0.00000400 | 
| freeing items | 0.00000400 | 
| closing tables | 0.00000500 | 
| logging slow query | 0.00000300 | 
-------------------------------- ------------  
15 rows in set (0.00 sec) 
mysql> SHOW PROFILE FOR QUERY 28; 
------------------------------------- ------------  
| Status | Duration | 
------------------------------------- ------------  
| (initialization) | 0.00000350 | 
| checking query cache for query | 0.00000750 | 
| checking privileges on cached query | 0.00000500 | 
| checking permissions | 0.00000525 | 
| sending cached result to client | 0.00001275 | 
| logging slow query | 0.00000450 | 
------------------------------------- ------------  
6 rows in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ; 
----------  
| DURATION | 
----------  
| 0.000326 | 
----------  
1 row in set (0.00 sec) 
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ; 
----------  
| DURATION | 
----------  
| 0.000039 | 
----------  
1 row in set (0.00 sec) 
mysql> 
从地方的事例中大家得以清楚的观察 2 次推行 count 语句的不一样, SHOW PROFILE FO大切诺基 QUESportageY 27 表现的是第一次 count 总计的实践进度,包罗了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FO宝马X3 QUE奔驰G级Y 28 体现了第三遍count 总括的实施进程 , 第一遍 count 直接从询问缓存中回到 count 总结结果,通过对照 2 次总结的总推行时间发觉,缓存读的快慢邻近物理读的 10 倍。通过行使 SQL 品质剖判器能够扶植大家对有的比较难以鲜明品质难题的 SQL 举办确诊,找寻难点来自。 

  | IPC                #突显发送和采取相关支出消息;

  澳门新浦京娱乐场网站 12

  | MEMORY             #展现内部存款和储蓄器相关支出音信;

  能够在全局级关闭profile记录追踪的效应,而只限定某一个账号的施行记录被追踪

  | PAGE FAULTS        #展示页面错误相关支付音信;

  澳门新浦京娱乐场网站 13

  | SOURCE             #显示和Source_function,Source_file,Source_line相关的开垦消息;

  这里就再也建账号了,重现张开默许情状下记录全体账号的追踪。
  然后依照官方网站的提醒,须求开荒三个配置选项才具平常记录profile消息。
  推行如下sql。

  | SWAPS              #展现沟通次数相关支付的新闻;

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%statement/%';

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%stage/%';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
WHERE NAME LIKE '%events_statements_%';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
WHERE NAME LIKE '%events_stages_%';

2、开启porfiling

      继续行使上述的sql查询语句(select count(1) from test_table1)做测试,
   然后系统表performance_schema.events_statements_history_long 中得以依赖文件消息模糊相称出在此以前推行过的SQL语句的音讯了

启用session级别的profiling

澳门新浦京娱乐场网站 14

mysql> set profiling=1;

  依照上述相配到的sql语句的Event_id就足以查询到这几个SQL语句在实行进程中的财富消耗新闻了。

Query OK, 0 rows affected, 1 warning (0.00 sec)

  澳门新浦京娱乐场网站 15

表明修改后的结果

上边的七个sql,官当抄来的。

mysql> show variables like '%profil%';

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
FROM performance_schema.events_statements_history_long 
WHERE SQL_TEXT like '%select count(1) from test_table1%';


SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
FROM performance_schema.events_stages_history_long 
WHERE NESTING_EVENT_ID=544102;

------------------------ -------

 

| Variable_name          | Value |

  但是performance_schema 系统表中著录到的信息,并不可能像show profile cpu for query *** 同样,查询出来某一类财富的费用景况。
  本人还未曾检索到相关的等价于show profile cpu for query *** 的系统表,有知道的还望告知,感激。
  到时某个材质上有这么一说,在performance_schema 系统纪念录到的消息中:“Does not cover all metrics compared to the native profiling i.e. CONTEXT SWITCHES, BLOCK IO, SWAPS”
  也就说相比较在此之前版本的show profile,新的记录profile的办法照旧有待完善的,不了解到近年来截止有未有完善那些功能。
  参考:

------------------------ -------

 

| have_profiling         | YES   |

 

| profiling              | ON    |

    MySQL中的show profile中的音讯差不离正是那样子,
  参谋了弹指间《深入浅出MySQL》发掘涉及的show profile在实行的执行给出了警戒,注解持续版本中也许会移除这些意义,因而又寻找show profile的代替者。

| profiling_history_size | 15    |

 

------------------------ -------

 

3 rows in set (0.00 sec)

MySQL的profile音信与SQL Server中的profile简单的相比较

发布SQL查询

末段简短地与sqlserver系统表DMV中的类似作用做一下相比较,照旧有部分相比较日常的地方的。
SQL Server可以经过DMV来询问施行过的SQL的有的音讯,比方施行的年华,消耗的CPU时间,试行的逻辑读写,物理读写等等
可是那些结果要么有局地不均等的,下边再说。

mysql> select * from zabbix.history_uint where clock<1488466329 limit 1;

澳门新浦京娱乐场网站 16

查看当前session全数已产生的profile

  上述MySQL总计出来的是三个结实强调的是手续与时间的维度,也即每一步费用了不怎么日子,
  这里的sqlserver总计出来的是一个完好消耗消息
  倘使sqlserver想到达到近似也是能够的,最简单易行的正是SQL Server中的profile跟踪结果,也叫profile,看来套路都以一模二样的,
  别的正是sqlserver中改革过来的扩充事件,参照他事他说加以考察在此以前的博文:
  完全能够获得Session级其余等候财富和等待时间,那样子基本上就同一MySQL中的performance_schema记录到的消息了。
  可是SQL Server 扩充事件捕获到的那个音讯要比MySQL的原来的Profile中INFORMATION_SCHEMA.PROFILING 的愈加具体和详尽了。
  在财富消耗和时间维度上有一个更为明显和直观的结果。
  比方如下的那一个截图,仍然那句话,套路都是均等的,换了个马甲而已。

mysql> show profiles;

  澳门新浦京娱乐场网站 17

---------- ------------ ------------------------------------------------------------------

  尽管把扩展事件捕获到的上述结果,计算起来看,就更像MySQL中的profile音信了。

| Query_ID | Duration   | Query                                                            |

  澳门新浦京娱乐场网站 18

---------- ------------ ------------------------------------------------------------------

 

|        1 | 0.00044625 | show variables like '%profil%'                                   |

 

|        2 | 6.43230200 | select * from zabbix.history_uint where clock<1488466329 limit 1 |

总结:

---------- ------------ ------------------------------------------------------------------

  profile追踪结果能够申报出来sql试行进度中的财富消耗新闻,以提供在做质量优化依然是难题检查判断进程中的参照他事他说加以考察依附,作为DBA在保管和优化数据中的工具
  不管是在MySQL中,照旧在SQL Server中,功用都是临近的。
  当然在难题检查判断的时候,仅唯有那几个新闻,如故不完全够的,须求别的方面包车型地铁有的新闻做综合考量。

2 rows in set, 1 warning (0.00 sec)

 

作者们看出有2个warning,在此以前八个,现在一个

 

mysql> show warnings;

更加多详细音信,参谋:

--------- ------ --------------------------------------------------------------------------------------------------------------

| Level   | Code | Message                                                                                                      |

--------- ------ --------------------------------------------------------------------------------------------------------------

| Warning | 1287 | 'SHOW PROFILES' is deprecated and will be removed in a future release. Please use Performance Schema instead |

--------- ------ --------------------------------------------------------------------------------------------------------------

1 row in set (0.00 sec)

报告急察方是说SHOW PROFILES命令以后会被Performance Schema替换掉。

3、获取SQL语句的费用音讯

翻开profiling后,大家得以透过show profile等情势查看,其实那么些费用消息被记录到information_schema.profiling表中。注show profile之类的语句不会被profiling,即小编不会时有发生Profiling。

我们下边包车型大巴这些show profile查看的是show warnings产生的呼应开支。

mysq> show profile;    

---------------- ----------   

| Status         | Duration |  

---------------- ----------   

| starting       | 0.000141 |  

| query end      | 0.000058 |  

| closing tables | 0.000014 |  

| freeing items  | 0.001802 |  

| cleaning up    | 0.000272 |  

---------------- ----------

如上面包车型大巴询问show warnings被加多到profiles

mysql> show profiles;

---------- ------------ ------------------------------------------------------------------

| Query_ID | Duration   | Query                                                            |

---------- ------------ ------------------------------------------------------------------

|        1 | 0.00041150 | show variables like '%profil%'                                   |

|        2 | 6.41118075 | select * from zabbix.history_uint where clock<1488466329 limit 1 |

|        3 | 0.00003900 | show warnings                                                    |

---------- ------------ ------------------------------------------------------------------

3 rows in set, 1 warning (0.00 sec)

收获钦点询问的支付(Druation表示持续时间)

mysql> show profile for query 2;

---------------------- ----------

| Status               | Duration |

---------------------- ----------

| starting             | 0.000043 |

| checking permissions | 0.000004 |

| Opening tables       | 0.000014 |

| init                 | 0.000019 |

| System lock          | 0.000004 |

| optimizing           | 0.000009 |

| statistics           | 0.000062 |

| preparing            | 0.000012 |

| executing            | 0.000002 |

| Sending data         | 6.410967 |

| end                  | 0.000009 |

| query end            | 0.000005 |

| closing tables       | 0.000010 |

| freeing items        | 0.000011 |

| cleaning up          | 0.000011 |

---------------------- ----------

15 rows in set, 1 warning (0.00 sec)

Sending data:这一个地方包车型客车称谓很富有误导性,所谓的“Sending data”并不是仅仅的发送数据,而是富含“收罗 发送 数据”。

query end:表示语句推行完成了,不过还只怕有局地承袭专门的学问没做完时的动静。

freeing items:释放查询缓存里面包车型客车空间,假使是DML操作,所以相应的缓存里的笔录就不算了,所以需求有这一步做拍卖。

翻看全部支付

mysql> show profile all for query 2 ;

查看特定部分的花费,如下为CPU部分的支付

mysql> show profile cpu for query 2 ;

正如为MEMO劲客Y部分的付出

mysql> show profile memory for query 2 ;

再者查看分裂能源开采

mysql> show profile block io,cpu for query 2;

4、INFORMATION_SCHEMA.PROFILING

地方已经见到了,show profile命令将要移除,所以能够直接去information_schema.profiling表查看,灵活度更加大,其表结构新闻如下:

mysql> desc information_schema.profiling;

--------------------- -------------- ------ ----- ---------- -------

| Field               | Type         | Null | Key | Default  | Extra |

--------------------- -------------- ------ ----- ---------- -------

| QUERY_ID            | int(20)      | NO   |     | 0        |       |

| SEQ                 | int(20)      | NO   |     | 0        |       |

| STATE               | varchar(30)  | NO   |     |          |       |

| DURATION            | decimal(9,6) | NO   |     | 0.000000 |       |

| CPU_USER            | decimal(9,6) | YES  |     | NULL     |       |

| CPU_SYSTEM          | decimal(9,6) | YES  |     | NULL     |       |

| CONTEXT_VOLUNTARY   | int(20)      | YES  |     | NULL     |       |

| CONTEXT_INVOLUNTARY | int(20)      | YES  |     | NULL     |       |

| BLOCK_OPS_IN        | int(20)      | YES  |     | NULL     |       |

| BLOCK_OPS_OUT       | int(20)      | YES  |     | NULL     |       |

| MESSAGES_SENT       | int(20)      | YES  |     | NULL     |       |

| MESSAGES_RECEIVED   | int(20)      | YES  |     | NULL     |       |

| PAGE_FAULTS_MAJOR   | int(20)      | YES  |     | NULL     |       |

| PAGE_FAULTS_MINOR   | int(20)      | YES  |     | NULL     |       |

| SWAPS               | int(20)      | YES  |     | NULL     |       |

| SOURCE_FUNCTION     | varchar(30)  | YES  |     | NULL     |       |

| SOURCE_FILE         | varchar(20)  | YES  |     | NULL     |       |

| SOURCE_LINE         | int(20)      | YES  |     | NULL     |       |

--------------------- -------------- ------ ----- ---------- -------

18 rows in set (0.00 sec)

上边的SQL语句用于查询query_id为2的SQL开支,且按最大耗用时间倒序排列

mysql> set @query_id=2;

SELECT STATE, SUM(DURATION) AS Total_R,  

ROUND(  

   100 * SUM(DURATION) /  

     (SELECT SUM(DURATION)  

          FROM INFORMATION_SCHEMA.PROFILING  

          WHERE QUERY_ID = @query_id  

      ), 2) AS Pct_R,  

   COUNT(*) AS Calls,  

   SUM(DURATION) / COUNT(*) AS "R/Call"  

FROM INFORMATION_SCHEMA.PROFILING  

WHERE QUERY_ID = @query_id  

GROUP BY STATE  

ORDER BY Total_R DESC;

---------------------- ---------- -------- ------- --------------

| STATE                | Total_R  | Pct_R  | Calls | R/Call       |

---------------------- ---------- -------- ------- --------------

| Sending data         | 6.410967 | 100.00 |     1 | 6.4109670000 |

| statistics           | 0.000062 |   0.00 |     1 | 0.0000620000 |

| starting             | 0.000043 |   0.00 |     1 | 0.0000430000 |

| init                 | 0.000019 |   0.00 |     1 | 0.0000190000 |

| Opening tables       | 0.000014 |   0.00 |     1 | 0.0000140000 |

| preparing            | 0.000012 |   0.00 |     1 | 0.0000120000 |

| cleaning up          | 0.000011 |   0.00 |     1 | 0.0000110000 |

| freeing items        | 0.000011 |   0.00 |     1 | 0.0000110000 |

| closing tables       | 0.000010 |   0.00 |     1 | 0.0000100000 |

| optimizing           | 0.000009 |   0.00 |     1 | 0.0000090000 |

| end                  | 0.000009 |   0.00 |     1 | 0.0000090000 |

| query end            | 0.000005 |   0.00 |     1 | 0.0000050000 |

| System lock          | 0.000004 |   0.00 |     1 | 0.0000040000 |

| checking permissions | 0.000004 |   0.00 |     1 | 0.0000040000 |

| executing            | 0.000002 |   0.00 |     1 | 0.0000020000 |

---------------------- ---------- -------- ------- --------------

15 rows in set (0.01 sec)

停下profile,能够安装profiling参数,或然在session退出之后,profiling会被活动关闭。

转自:

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:澳门新浦京娱乐场网站:执行分析,MySQL使用pr