如何使用Performance Schema查看Profiling

45次阅读
没有评论

共计 4274 个字符,预计需要花费 11 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下如何使用 Performance Schema 查看 Profiling,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

SHOW PROFILE 可以用来 MySQL 执行语句时候所使用的资源(诸如 IO,上下文切换,CPU,Memory 等等), 但是从 MySQL 5.6.7 开始此特性将被移除,而使用 Performance Schema 代替,如下:

setup_actors 配置

MySQL 5.7.8, 可以通过 setup_actors 表来配置 host, user, or account 的信息被收集,如下:
# 默认情况下 setup_actors 的配置是允许监控和收集所有前台线程的历史事件信息  

SELECT * FROM
performance_schema.setup_actors;
+——+——+——+———+———+
| HOST | USER | ROLE | ENABLED | HISTORY |
+——+——+——+———+———+
| %  | %  | % 
| YES  | YES  |
+——+——+——+———+———+
1 row in set (0.03 sec)

# 修改默认的配置,关闭对所有前台线程的监控和收集。并且插入新的行为指定的用户开启监控和收集信息

mysql
UPDATE performance_schema.setup_actors SET ENABLED = NO , HISTORY = NO
– WHERE HOST = % AND USER = %
mysql INSERT INTO performance_schema.setup_actors
(HOST,USER,ROLE,ENABLED,HISTORY)
– VALUES(localhost , test_user , % , YES , YES

# 修改后的配置如下:
mysql SELECT * FROM performance_schema.setup_actors;
+———–+———–+——+———+———+
| HOST | USER | ROLE | ENABLED | HISTORY |
+———–+———–+——+———+———+
| % | % | % | NO | NO |
| localhost | test_user | % | YES | YES |
+———–+———–+——+———+———+
# 只监控和收集 test_user@localhost 用户相关的事件信息

Query Profiling Using Performance Schema 下文简单尝试下使用 Performance Schema 来查询 profile 相关信息,使用方法如下 1. 开启 setup_instruments 表中 statement 和 stage instrumentation 相关配置, 其中有些可能默认已经开启

mysql UPDATE performance_schema.setup_instruments SET ENABLED = YES , TIMED = YES
– WHERE NAME LIKE %statement/%
mysql UPDATE performance_schema.setup_instruments SET ENABLED = YES , TIMED = YES
– WHERE NAME LIKE %stage/%

2. 开启 events_statements_* and events_stages_* 相关消费(consumers),有些项目已经默认开启

mysql UPDATE performance_schema.setup_consumers SET ENABLED = YES
– WHERE NAME LIKE %events_statements_%
mysql UPDATE performance_schema.setup_consumers SET ENABLED = YES
– WHERE NAME LIKE %events_stages_%

3. 为了与 show profile 的结果做对比,开启 profiling 功能

mysql set profiling=1;

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

mysql show warnings; #此处,也可以看到此特性将被移除的警告

+———+——+———————————————————————-+

| Level | Code | Message |

+———+——+———————————————————————-+

| Warning | 1287 | @@profiling is deprecated and will be removed in a future release. |

+———+——+———————————————————————-+

1 row in set (0.00 sec)

4. 执行 SQL 语句

mysql select * from t;

+—-+——+

| 9 | 15 |

| 10 | 15 |

| 2 | 20 |

| 3 | 20 |

| 8 | 25 |

+—-+——+

5 rows in set (0.00 sec)5 rows in set (0.00 sec)

5. 查看 profiling 结果

mysql show profiles;
+———-+————+—————–+
| Query_ID | Duration | Query |
+———-+————+—————–+
| 1 | 0.00010150 | show warnings |
| 2 | 0.00032075 | select * from t |
+———-+————+—————–+
2 rows in set, 1 warning (0.00 sec)

mysql show profile for query 2;
+———————-+———-+
| Status | Duration |
+———————-+———-+
| starting | 0.000038 |
| checking permissions | 0.000009 |
| Opening tables | 0.000048|
| init | 0.000022 |
| System lock | 0.000012 |
| optimizing | 0.000007 |
| statistics | 0.000016 |
| preparing | 0.000015 |
| executing | 0.000005 |
| Sending data | 0.000063 |
| end | 0.000008 |
| query end | 0.000009 |
| closing tables | 0.000013 |
| freeing items | 0.000012 |
| cleaning up | 0.000050 |
+———————-+———-+
15 rows in set, 1 warning (0.00 sec)

6. 查找刚才执行 SQL 的 EVENT_ID, 这步骤类似于 show profiles 查看 query id. 通过查询表 events_statements_history_long 获得对应的 EVENT_ID

注:此处只为了说明问题,可能还查询到很多其他的 SQL,但是我们自己知道我们执行的 SQL 是哪条,其他的 SQL 此处都被省略了

7. 通过查询 events_stages_history_long 表(NESTING_EVENT_ID=EVENT_ID)获得最终结果

mysql SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration

FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=79;
+——————————–+———-+
| Stage | Duration |
+——————————–+———-+
| stage/sql/init | 0.000048 |
| stage/sql/checking permissions | 0.000008 |
| stage/sql/Opening tables | 0.000051 |
| stage/sql/init | 0.000019 |
| stage/sql/System lock | 0.000012 |
| stage/sql/optimizing | 0.000006 |
| stage/sql/statistics | 0.000016 |
| stage/sql/preparing | 0.000015 |
| stage/sql/executing | 0.000004 |
| stage/sql/Sending data | 0.000066 |
| stage/sql/end | 0.000005 |
| stage/sql/query end | 0.000008 |
| stage/sql/closing tables | 0.000013 |
| stage/sql/freeing items | 0.000011 |
| stage/sql/cleaning up | 0.000001 |
+——————————–+———-+
15 rows in set (0.01 sec)

如上,实现了通过 Performance Schema 来查询 profileing 相关信息,最终能看到的选项跟 show profile 显示的选项几乎一样,只是各项的值好像不太一致。

看完了这篇文章,相信你对“如何使用 Performance Schema 查看 Profiling”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计4274字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)