MySQL运行时的可观测性 观测MySQL运行时实时监控和统计(2)
导读:MySQL运行时的可观测性,看到需要全索引扫描(其实也等同于全表扫描,因为是基于PRIMARY索引),并且还需要生成临时表,以及额外的filesort。 在正式运行该SQL之前,在另外的窗
MySQL运行时的可观测性
看到需要全索引扫描(其实也等同于全表扫描,因为是基于PRIMARY索引),并且还需要生成临时表,以及额外的filesort。
在正式运行该SQL之前,在另外的窗口中新建一个连接会话,执行下面的SQL先观察该连接/会话当前的内存分配情况:
greatsql> select * from sys.x$memory_by_thread_by_current_bytes where thread_id = 207\G
*************************** 1. row ***************************
thread_id: 207
user: root@localhost
current_count_used: 9
current_allocated: 26266
current_avg_alloc: 2918.4444
current_max_alloc: 16464
total_allocated: 30311
等到该SQL执行完了,再一次查询内存分配情况:
greatsql> select * from sys.x$memory_by_thread_by_current_bytes where thread_id = 207\G
*************************** 1. row ***************************
thread_id: 207
user: root@localhost
current_count_used: 13
current_allocated: 24430
current_avg_alloc: 1879.2308
current_max_alloc: 16456
total_allocated: 95719
我们注意到几个数据的变化情况,用下面表格来展示:
| 指标 | 运行前 | 运行后 |
|---|---|---|
| total_allocated | 30311 | 95719 |
也就是说,SQL运行时,需要分配的内存是:95719 – 30311 =65408字节。
3.2 观测SQL运行时的其他开销
通过观察performance_schema.status_by_thread表,可以知道相应连接/会话中SQL运行的一些状态指标。在SQL运行结束后,执行下面的SQL命令即可查看:
greatsql> select * from performance_schema.status_by_thread where thread_id = 207;
...
| 207 | Created_tmp_disk_tables | 0 |
| 207 | Created_tmp_tables | 0 |
...
| 207 | Handler_read_first | 1 |
| 207 | Handler_read_key | 1 |
| 207 | Handler_read_last | 0 |
| 207 | Handler_read_next | 2844047 |
| 207 | Handler_read_prev | 0 |
| 207 | Handler_read_rnd | 0 |
| 207 | Handler_read_rnd_next | 0 |
| 207 | Handler_rollback | 0 |
| 207 | Handler_savepoint | 0 |
| 207 | Handler_savepoint_rollback | 0 |
| 207 | Handler_update | 0 |
| 207 | Handler_write | 0 |
| 207 | Last_query_cost | 286802.914893 |
| 207 | Last_query_partial_plans | 1 |
...
| 207 | Select_full_join | 0 |
| 207 | Select_full_range_join | 0 |
| 207 | Select_range | 0 |
| 207 | Select_range_check | 0 |
| 207 | Select_scan | 1 |
| 207 | Slow_launch_threads | 0 |
| 207 | Slow_queries | 1 |
| 207 | Sort_merge_passes | 0 |
| 207 | Sort_range | 0 |
| 207 | Sort_rows | 1 |
| 207 | Sort_scan | 1 |
...
相关阅读
-
InnoDB的一次更新事务是怎么实现的?
跟大家聊一聊InnoDB的一次更新事务是怎么实现的方面的介绍,相关内容具体如下: InnoDB的一次更新事务涉及到多个组件和步骤,包括Buffer Pool、BinLog、UndoLog、RedoLog以及物理磁盘。 下面是一次
-
如何保证缓存与数据库的双写一致性
小编为网友们解答如何保证缓存与数据库的双写一致性方面的内容,如有不对的地方欢迎指正! 思考:redis作为缓存,mysql的数据如何与redis进行同步?(双写一致性问题) 注意在回答这个问题的时
-
HTTP状态码深入解析:401 Unauthorized
为大家介绍HTTP状态码深入解析的教程内容,接下来一起来看看吧。 在互联网通信中,HTTP状态码是用来表示服务器响应的一种方式。 当我们在浏览器中访问网页时,服务器会返回一个状态码,
-
OSPF的基本概念 OSPF的基本原理
这些方法你知道吗?OSPF的基本概念方面的内容,接下来就是全面介绍。 1. 路由器ID 在OSPF中,每个路由器都有一个唯一的路由器ID(Router ID),用于标识自己。 路由器ID可以是一个IPv4地址,通


