在MySQL里,一条SQL运行时产生多少磁盘I/O,观测占用多少内存,行时性是观测否有创建临时表,这些指标如果都能观测到,行时性有助于更快发现SQL瓶颈,观测扑灭潜在隐患。行时性
从MySQL 5.7版本开始,观测performance_schema就默认启用了,行时性并且还增加了sys schema,观测到了8.0版本又进一步得到增强提升,行时性在SQL运行时就能观察到很多有用的观测信息,服务器托管实现一定程度的行时性可观测性。

下面举例说明如何进行观测,观测以及主要观测哪些指标。行时性
安装MySQL官方提供的employees测试数据库,戳此链接(https://dev.mysql.com/doc/index-other.html)下载,解压缩后开始安装:
复制$ mysql -f < employees.sql; INFO CREATING DATABASE STRUCTURE INFO storage engine: InnoDB INFO LOADING departments INFO LOADING employees INFO LOADING dept_emp INFO LOADING dept_manager INFO LOADING titles INFO LOADING salaries data_load_time_diff 00:00:371.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.MySQL还提供了相应的使用文档:https://dev.mysql.com/doc/employee/en/
本次测试采用GreatSQL 8.0.32-24版本,且运行在MGR环境中:
复制greatsql> \s ... Server version: 8.0.32-24 GreatSQL, Release 24, Revision 3714067bc8c ... greatsql> select MEMBER_ID, MEMBER_ROLE, MEMBER_VERSION from performance_schema.replication_group_members; +--------------------------------------+-------------+----------------+ | MEMBER_ID | MEMBER_ROLE | MEMBER_VERSION | +--------------------------------------+-------------+----------------+ | 2adec6d2-febb-11ed-baca-d08e7908bcb1 | SECONDARY | 8.0.32 | | 2f68fee2-febb-11ed-b51e-d08e7908bcb1 | ARBITRATOR | 8.0.32 | | 5e34a5e2-feb6-11ed-b288-d08e7908bcb1 | PRIMARY | 8.0.32 | +--------------------------------------+-------------+----------------+1.2.3.4.5.6.7.8.9.10.11.12.13.查看当前连接/会话的连接ID、内部线程ID:
复制greatsql> select processlist_id, thread_id from performance_schema.threads where processlist_id = connection_id(); +----------------+-----------+ | processlist_id | thread_id | +----------------+-----------+ | 110 | 207 | +----------------+-----------+1.2.3.4.5.6.查询得到当前的连接ID=110,内部线程ID=207。IT技术网
P.S,由于本文整理过程不是连续的,所以下面看到的 thread_id 值可能会有好几个,每次都不同。
执行下面的SQL,查询所有员工的薪资总额,按员工号分组,并按薪资总额倒序,b2b信息网取前10条记录:
复制greatsql> explain select emp_no, sum(salary) as total_salary from salaries group by emp_no order by total_salary desc limit 10\G(责任编辑:应用开发)