IT袋

当前位置:主页 > 经验教程 > 建站编程 >

MySQL运行时的可观测性

MySQL运行时的可观测性 观测MySQL运行时实时监控和统计(2)

时间:2024-01-23 21:01:14 来源:IT袋 作者:马勇
导读: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_allocated3031195719

也就是说,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的一次更新事务是怎么实现的方面的介绍,相关内容具体如下: InnoDB的一次更新事务涉及到多个组件和步骤,包括Buffer Pool、BinLog、UndoLog、RedoLog以及物理磁盘。 下面是一次

  • 如何保证缓存与数据库的双写一致性

    如何保证缓存与数据库的双写一致性

    小编为网友们解答如何保证缓存与数据库的双写一致性方面的内容,如有不对的地方欢迎指正! 思考:redis作为缓存,mysql的数据如何与redis进行同步?(双写一致性问题) 注意在回答这个问题的时

  • HTTP状态码深入解析:401 Unauthorized

    HTTP状态码深入解析:401 Unauthorized

    为大家介绍HTTP状态码深入解析的教程内容,接下来一起来看看吧。 在互联网通信中,HTTP状态码是用来表示服务器响应的一种方式。 当我们在浏览器中访问网页时,服务器会返回一个状态码,

  • OSPF的基本概念 OSPF的基本原理

    OSPF的基本概念 OSPF的基本原理

    这些方法你知道吗?OSPF的基本概念方面的内容,接下来就是全面介绍。 1. 路由器ID 在OSPF中,每个路由器都有一个唯一的路由器ID(Router ID),用于标识自己。 路由器ID可以是一个IPv4地址,通