1.setup tables
setup_actors
配置用户纬度的监控,默认监控所有用户
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | NO | % | 主机名 |
USER | char(32) | NO | % | 用户名 |
ROLE | char(16) | NO | % | 规则 |
ENABLED | enum(‘YES’,’NO’) | NO | YES | 是否开启 |
HISTORY | enum(‘YES’,’NO’) | NO | YES | 是否写入历史表 |
setup_consumers
配置events的消费者类型,即收集的events写入到哪些统计表中
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(64) | NO | NULL | 消费者类型名 |
ENABLED | enum(‘YES’,’NO’) | NO | NULL | 是否开 |
mysql> select * from setup_consumers;
+----------------------------------+---------+
| NAME | ENABLED |
+----------------------------------+---------+
| events_stages_current | YES |
| events_stages_history | YES |
| events_stages_history_long | YES |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | YES |
| events_transactions_current | YES |
| events_transactions_history | YES |
| events_transactions_history_long | YES |
| events_waits_current | YES |
| events_waits_history | YES |
| events_waits_history_long | YES |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+----------------------------------+---------+
15 rows in set (0.00 sec)
setup_instruments
配置具体的instrument,主要包含6大类:idle、stage/xxx、statement/xxx、wait/xxx、memory/xxx、transaction.
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(128) | NO | NULL | Instrument name |
ENABLED | enum(‘YES’,’NO’) | NO | NULL | Instrument是否启用 |
TIMED | enum(‘YES’,’NO’) | NO | NULL | 否收集启用的instrument的定时信息 |
mysql> select name,count(*) from setup_instruments group by LEFT(name,5);
+-------------------------------------------+----------+
| name | count(*) |
+-------------------------------------------+----------+
| idle | 1 |
| memory/performance_schema/mutex_instances | 380 |
| stage/sql/After create | 132 |
| statement/sql/select | 194 |
| transaction | 1 |
| wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc | 320 |
+-------------------------------------------+----------+
6 rows in set (0.00 sec)
setup_objects
配置监控对象,默认对mysql,performance_schema和information_schema中的表都不监控,而其它DB的所有表都监控
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | enum(‘EVENT’,’FUNCTION’, ‘PROCEDURE’,’TABLE’,’TRIGGER’) |
NO | TABLE | 监控类型 |
OBJECT_SCHEMA | varchar(64) | YES | % | 库名 |
OBJECT_NAME | varchar(64) | NO | % | Object name |
ENABLED | enum(‘YES’,’NO’) | NO | YES | 是否开启 |
TIMED | enum(‘YES’,’NO’) | NO | YES | 是否计时 |
示例
-- 假设setup_objects包含以下行:
+-------------+---------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED |
+-------------+---------------+-------------+---------+-------+
| TABLE | db1 | t1 | YES | YES |
| TABLE | db1 | t2 | YES | NO |
| TABLE | db2 | % | YES | YES |
| TABLE | db3 | % | YES | NO |
| TABLE | % | % | YES | YES |
+-------------+---------------+-------------+---------+-------+
-- 如果一个与表相关的仪表在setup_instruments的TIMED值为NO,该仪表产生事件没有时间信息。如果TIMED值为yes,事件计时情况如下:
-- db1.t1 事件被计时
-- db1.t2 事件不被计时
-- db2.t3事件被计时
-- db3.t4事件不被计时
-- db4.t5事件被计时
setup_timers
配置每种类型指令的统计时间单位.MICROSECOND表示统计单位是微妙,CYCLE表示统计单位是时钟周期,时间度量与CPU的主频有关,NANOSECOND表示统计单位是纳秒,关于每种类型的具体含义,可以参考performance_timer这个表。由于wait类包含的都是等待事件,单个SQL调用次数比较多,因此选择代价最小的度量单位cycle。但无论采用哪种度量单位,最终统计表中统计的时间都会装换到皮秒。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(64) | NO | NULL | 监控类型 |
TIMER_NAME | enum(‘CYCLE’,’NANOSECOND’, ‘MICROSECOND’,’MILLISECOND’,’TICK’) |
NO | NULL | 计时器的名称 |
示例
mysql> select * from setup_timers;
+-------------+-------------+
| NAME | TIMER_NAME |
+-------------+-------------+
| idle | MICROSECOND |
| wait | CYCLE |
| stage | NANOSECOND |
| statement | NANOSECOND |
| transaction | NANOSECOND |
+-------------+-------------+
5 rows in set (0.00 sec)
对于wait类型,最重要的是减少开销,所以选择CYCLE类型,相应的代价是损失计时精度。Statement,stage,transaction的执行时间总的来说,相比wait要高一个数量级。为了给statement计时,最重要的是原则是要有一个精确的衡量,并且不受处理器频率影响,因此默认的为NANOSECOND,其额外的‘OVERHEAD’相比CYCLE TIMER并不明显,因为调用一个timer两次的开销(一次是statement开始,一次是statement结束)相比statement执行本身的CPU时间要小很多个数量级。如果使用CYCLE,只有坏处,没有好处。
cycle计数器的精度依赖于CPU的速度,使用CYCLE 计数器实际上比使用标准gettimeofday的开销要小,后者的一次调用可能产生上百次cycle。
2.instance tables
cond_instances
条件同步对象实例
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(128) | NO | NULL | 与条件关联仪表 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 条件在内存被检测的地址 |
file_instances
文件实例
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
FILE_NAME | varchar(512) | NO | NULL | 文件地址 |
EVENT_NAME | varchar(128) | NO | NULL | 事件名 |
OPEN_COUNT | int(10) unsigned | NO | NULL | 文件打开次数 |
mutex_instances
互斥锁同步对象实例
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(128) | NO | NULL | 与互斥相关的仪表 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 互斥锁在内存中被检测的地址 |
LOCKED_BY_THREAD_ID | bigint(20) unsigned | YES | NULL | 当一个线程目前有互斥锁,该字段为正获得锁的线程id,否则是null |
rwlock_instances
锁同步对象实例
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
NAME | varchar(128) | NO | NULL | 与锁相关的仪表名 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 锁在内存中被检测的地址 |
WRITE_LOCKED_BY_THREAD_ID | bigint(20) unsigned | YES | NULL | 当一个线程目前有一个互斥模式(写)rwlock锁, 值是正锁着的线程ID,否则它是空的 |
READ_LOCKED_BY_COUNT | int(10) unsigned | NO | NULL | 当一个线程目前有一个共享(读)模式rwlock锁, 改值增加1。这是一个计数器,所以它不能直接用来找到哪个线程拥有读锁,但它可以用来查看在rwlock锁是否有读争用,看看目前有多少读锁是活跃的。 |
socket_instances
活跃连接实例实例
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | wait/io/socket/*仪表产生的事件 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 这列唯一地标识该套接字。这个值是一个对象在内存的地址 |
THREAD_ID | bigint(20) unsigned | YES | NULL | 服务器指定的内部线程标识符。每个套接字是由一个单独线程管理,所以每个套接字可以被映射到一个线程可以被映射到一个服务器进程。 |
SOCKET_ID | int(11) | NO | NULL | 分配给套接字的内部文件handle |
IP | varchar(64) | NO | NULL | 客户端IP地址。值可以是一个IPv4和IPv6地址,或空白表示一个Unix socket文件连接 |
PORT | int(11) | NO | NULL | 客户端IP地址。值可以是一个IPv4和IPv6地址,或空白表示一个Unix socket文件连接 |
STATE | enum(‘IDLE’,’ACTIVE’) | NO | NULL | 套接字状态,要么IDLE要么ACTIVE |
3.Wait event tables
events_waits_current
当前等待的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 线程ID |
EVENT_ID | bigint(20) unsigned | NO | NULL | 当前线程的事件ID,和THREAD_ID确定唯一 |
END_EVENT_ID | bigint(20) unsigned | YES | NULL | 当事件开始时,这一列被设置为NULL。当事件结束时,再更新为当前的事件ID |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
SOURCE | varchar(64) | YES | NULL | 该事件产生时的源码文件 |
TIMER_START | bigint(20) unsigned | YES | NULL | 事件开始时间(皮秒) |
TIMER_END | bigint(20) unsigned | YES | NULL | 事件结束结束时间(皮秒) |
TIMER_WAIT | bigint(20) unsigned | YES | NULL | 事件等待时间(皮秒) |
SPINS | int(10) unsigned | YES | NULL | |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 库名 |
OBJECT_NAME | varchar(512) | YES | NULL | 文件名、表名、IP:SOCK值 |
INDEX_NAME | varchar(64) | YES | NULL | 索引名 |
OBJECT_TYPE | varchar(64) | YES | NULL | FILE、TABLE、TEMPORARY TABLE |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 内存地址 |
NESTING_EVENT_ID | bigint(20) unsigned | YES | NULL | 该事件对应的父事件ID |
NESTING_EVENT_TYPE | enum(‘TRANSACTION’, ‘STATEMENT’,’STAGE’,’WAIT’) |
YES | NULL | 父事件类型(STATEMENT, STAGE, WAIT) |
OPERATION | varchar(32) | NO | NULL | 操作类型(lock, read, write) |
NUMBER_OF_BYTES | bigint(20) | YES | NULL | 该操作读取或写的字节数。对于表I / O等待, NUMBER_OF_BYTES是NULL |
FLAGS | int(10) unsigned | YES | NULL | 标记 |
events_waits_history
每个线程的最近等待时间的表结构同events_waits_current
events_waits_history_long
所有的最近等待时间的表结构同events_waits_current
4.Stage tables
events_stages_current
当前的阶段时间
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 线程ID |
EVENT_ID | bigint(20) unsigned | NO | NULL | 事件ID |
END_EVENT_ID | bigint(20) unsigned | YES | NULL | 结束事件ID |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
SOURCE | varchar(64) | YES | NULL | 源码位置 |
TIMER_START | bigint(20) unsigned | YES | NULL | 事件开始时间(皮秒) |
TIMER_END | bigint(20) unsigned | YES | NULL | 事件结束结束时间(皮秒) |
TIMER_WAIT | bigint(20) unsigned | YES | NULL | 事件等待时间(皮秒) |
WORK_COMPLETED | bigint(20) unsigned | YES | NULL | |
WORK_ESTIMATED | bigint(20) unsigned | YES | NULL | |
NESTING_EVENT_ID | bigint(20) unsigned | YES | NULL | 该事件对应的父事件ID |
NESTING_EVENT_TYPE | enum(‘TRANSACTION’, ‘STATEMENT’,’STAGE’,’WAIT’) |
YES | NULL | 父事件类型(STATEMENT, STAGE, WAIT) |
events_stages_history
每个线程的最近阶段事件表结构同events_stages_current
events_stages_history_long
所有的最近阶段事件表结构同events_stages_current
5.Statement tables
events_statements_current
当前的语句事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 线程ID |
EVENT_ID | bigint(20) unsigned | NO | NULL | 事件ID,与事件关联的线程和事件启动时的线程当前事件编号。一起使用的THREAD_ID和EVENT_ID值唯一标识该行。没有两行具有相同的值对。 |
END_EVENT_ID | bigint(20) unsigned | YES | NULL | 结束事件ID,当事件结束时事件启动并更新为线程当前事件编号时,此列设置为NULL |
EVENT_NAME | varchar(128) | NO | NULL | 收集事件的仪器的名称。这是来自setup_instruments表的NAME值。仪器名称可能具有多个部分并形成层次结构.对于SQL语句,EVENT_NAME值最初是语句/ com / Query,直到语句被解析,然后更改为更合适的值. |
SOURCE | varchar(64) | YES | NULL | 源文件的名称,其中包含产生事件的检测代码和检测到的文件中的行号。这使您可以检查源代码以确定涉及的代码 |
TIMER_START | bigint(20) unsigned | YES | NULL | 事件开始时间(皮秒) |
TIMER_END | bigint(20) unsigned | YES | NULL | 事件结束结束时间(皮秒) |
TIMER_WAIT | bigint(20) unsigned | YES | NULL | 事件等待时间(皮秒),如果事件尚未完成,则TIMER_END为当前计时器值,TIMER_WAIT为目前为止所经过的时间(TIMER_END - TIMER_START) |
LOCK_TIME | bigint(20) unsigned | NO | NULL | 锁时间 |
SQL_TEXT | longtext | YES | NULL | SQL语句的文本。对于与SQL语句无关的命令,该值为NULL。默认情况下,可用于语句显示的最大空间为1024字节 |
DIGEST | varchar(32) | YES | NULL | 对SQL_TEXT做MD5产生的32位字符串 |
DIGEST_TEXT | longtext | YES | NULL | 将语句中值部分用问号代替,用于SQL语句归类 |
CURRENT_SCHEMA | varchar(64) | YES | NULL | 语句的默认数据库,如果没有则为NULL。 |
OBJECT_TYPE | varchar(64) | YES | NULL | 对于嵌套语句(存储的程序),这些列包含有关父语句的信息。否则它们为NULL。 |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 对于嵌套语句(存储的程序),这些列包含有关父语句的信息。否则它们为NULL。 |
OBJECT_NAME | varchar(64) | YES | NULL | 对于嵌套语句(存储的程序),这些列包含有关父语句的信息。否则它们为NULL。 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | YES | NULL | 此列标识语句。该值是内存中对象的地址。 |
MYSQL_ERRNO | int(11) | YES | NULL | 语句错误号,来自语句诊断区。 |
RETURNED_SQLSTATE | varchar(5) | YES | NULL | 该语句SQLSTATE值,来自语句诊断区域 |
MESSAGE_TEXT | varchar(128) | YES | NULL | 信息 |
ERRORS | bigint(20) unsigned | NO | NULL | 错误数目 |
WARNINGS | bigint(20) unsigned | NO | NULL | 警告数目 |
ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | 影响的数目 |
ROWS_SENT | bigint(20) unsigned | NO | NULL | 返回的记录数 |
ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | 读取扫描的记录数目 |
CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | 创建磁盘临时表数目 |
CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | 创建临时表数目 |
SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | join时,第一个表为全表扫描的数目 |
SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | 引用表采用range方式扫描的数目 |
SELECT_RANGE | bigint(20) unsigned | NO | NULL | join时,第一个表采用range方式扫描的数目 |
SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SELECT_SCAN | bigint(20) unsigned | NO | NULL | join时,第一个表位全表扫描的数目 |
SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SORT_RANGE | bigint(20) unsigned | NO | NULL | 范围排序数目 |
SORT_ROWS | bigint(20) unsigned | NO | NULL | 排序的记录数目 |
SORT_SCAN | bigint(20) unsigned | NO | NULL | 全表排序数目 |
NO_INDEX_USED | bigint(20) unsigned | NO | NULL | 没有使用索引数目 |
NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL | |
NESTING_EVENT_ID | bigint(20) unsigned | YES | NULL | 该事件对应的父事件ID |
NESTING_EVENT_TYPE | enum(‘TRANSACTION’, ‘STATEMENT’,’STAGE’,’WAIT’) |
YES | NULL | 父事件类型(STATEMENT, STAGE, WAIT) |
NESTING_EVENT_LEVEL | int(11) | YES | NULL |
示例
语句事件表(events_statements_current, events_statements_history, 和 events_statements_history_long)有DIGEST和DIGEST_TEXT列包含文摘MD5值和相应的标准化的语句文本字符串。
一个events_statements_summary_by_digest表提供语句文摘的聚合信息。标准化语句有一个固定的长度。DIGEST_TEXT最大长度是1024个字节。
mysql> show variables like '%max_digest_length%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| max_digest_length | 1024 |
| performance_schema_max_digest_length | 1024 |
+--------------------------------------+-------+
没有选项来更改这个最大值。如果标准化生产一个语句,超过这个长度,文本以“…”结束。长语句差别只发生在“…”的部分,被认为是相同的。考虑这些语句:
SELECT * FROM mytable WHERE cola = 10 AND colb = 20
SELECT * FROM mytable WHERE cola = 10 AND colc = 20
-- 如果截取碰巧就在右边的and 的部分,两个语句会有这种标准化形式:
SELECT * FROM mytable WHERE cola = ? AND ...
-- 在这种情况下,这种在第二列的名字差异被失去了和两个语句被认为是相同的。
-- 执行查询:select * from test where col1='a';
mysql> select * from events_statements_current\G;
*************************** 2. row ***************************
......
SQL_TEXT: select * from test where col1='a'
DIGEST_TEXT: SELECT * FROM `test` WHERE `col1` = ?
......
-- 执行查询:select * from test where col1='c';
mysql> select * from events_statements_current\G;
*************************** 2. row ***************************
......
SQL_TEXT: select * from test where col1='c'
DIGEST_TEXT: SELECT * FROM `test` WHERE `col1` = ?
......
events_statements_history
每个线程最近的语句事件表结构同events_statements_current
events_statements_history_long
所有的最近的语句事件表结构同events_statements_current
示例
-- 实例:分析具体某条SQL,该SQL在执行各个阶段的时间消耗,通过events_statements_xxx表和events_stages_xxx表,就可以达到目的。
mysql> select count(*) from lt.apsm;
+----------+
| count(*) |
+----------+
| 2000000 |
+----------+
1 row in set (10.13 sec)
mysql> SELECT EVENT_ID,sql_text FROM events_statements_history WHERE sql_text LIKE '%count(*)%';
+----------+----------------------------------------------------------------------------+
| EVENT_ID | sql_text |
+----------+----------------------------------------------------------------------------+
| 38645 | select count(*) from lt.apsm |
| 1063453 | SELECT EVENT_ID,sql_text FROM events_statements_current WHERE sql_text LIKE '%count(*)%' |
| 38184 | select count(*) from lt.test |
+----------+----------------------------------------------------------------------------+
3 rows in set (0.00 sec)
mysql> SELECT event_id,EVENT_NAME,SOURCE,sys.format_time(TIMER_END - TIMER_START) FROM events_stages_history_long WHERE NESTING_EVENT_ID = 38645;
+----------+--------------------------------+--------------------------+------------------------------------------+
| event_id | EVENT_NAME | SOURCE | sys.format_time(TIMER_END - TIMER_START) |
+----------+--------------------------------+--------------------------+------------------------------------------+
| 38646 | stage/sql/starting | socket_connection.cc:97 | 90.54 us |
| 38651 | stage/sql/checking permissions | sql_authorization.cc:835 | 5.35 us |
| 38653 | stage/sql/Opening tables | sql_base.cc:5649 | 151.09 us |
| 38665 | stage/sql/init | sql_select.cc:121 | 16.76 us |
| 38668 | stage/sql/System lock | lock.cc:323 | 11.35 us |
| 38675 | stage/sql/optimizing | sql_optimizer.cc:151 | 10.12 s |
| 1063438 | stage/sql/executing | sql_executor.cc:119 | 13.77 us |
| 1063439 | stage/sql/end | sql_select.cc:199 | 2.85 us |
| 1063440 | stage/sql/query end | sql_parse.cc:5012 | 13.71 us |
| 1063444 | stage/sql/closing tables | sql_parse.cc:5064 | 15.05 us |
| 1063448 | stage/sql/freeing items | sql_parse.cc:5638 | 24.55 us |
| 1063450 | stage/sql/cleaning up | sql_parse.cc:1901 | 2.28 us |
+----------+--------------------------------+--------------------------+------------------------------------------+12 rows in set (0.01 sec)
prepared_statements_instances
准备的语句实例和统计信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 记录仪器化准备声明的地址 |
STATEMENT_ID | bigint(20) unsigned | NO | NULL | 由服务器分配的内部语句ID。文本和二进制协议都使用语句ID。 |
STATEMENT_NAME | varchar(64) | YES | NULL | 对于二进制协议,此列为NULL。对于文本协议,此列是用户分配的外部语句名称。例如,对于以下SQL语句,准备语句的名称为stmt:PREPARE stmt FROM’SELECT 1’; |
SQL_TEXT | longtext | NO | NULL | 准备好的语句文本?占位符标记 |
OWNER_THREAD_ID | bigint(20) unsigned | NO | NULL | 指示创建准备语句的事件 |
OWNER_EVENT_ID | bigint(20) unsigned | NO | NULL | 指示创建准备语句的事件 |
OWNER_OBJECT_TYPE | enum(‘EVENT’,’FUNCTION’, ‘PROCEDURE’,’TABLE’,’TRIGGER’) |
YES | NULL | |
OWNER_OBJECT_SCHEMA | varchar(64) | YES | NULL | |
OWNER_OBJECT_NAME | varchar(64) | YES | NULL | |
TIMER_PREPARE | bigint(20) unsigned | NO | NULL | 执行声明准备本身的时间 |
COUNT_REPREPARE | bigint(20) unsigned | NO | NULL | 声明在内部重新准备的次数 |
COUNT_EXECUTE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_EXECUTE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_EXECUTE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_EXECUTE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_EXECUTE | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
示例
mysql> select * from prepared_statements_instances\G
Empty set (0.01 sec)
mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
Query OK, 0 rows affected (0.01 sec)
Statement prepared
mysql> select * from prepared_statements_instances\G;
*************************** 1. row ***************************
OBJECT_INSTANCE_BEGIN: 386397440
STATEMENT_ID: 1
STATEMENT_NAME: stmt1
SQL_TEXT: SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse
OWNER_THREAD_ID: 276
OWNER_EVENT_ID: 2757
OWNER_OBJECT_TYPE: NULL
OWNER_OBJECT_SCHEMA: NULL
OWNER_OBJECT_NAME: NULL
TIMER_PREPARE: 12436401000
COUNT_REPREPARE: 0
COUNT_EXECUTE: 1
SUM_TIMER_EXECUTE: 199554000
MIN_TIMER_EXECUTE: 199554000
AVG_TIMER_EXECUTE: 199554000
MAX_TIMER_EXECUTE: 199554000
SUM_LOCK_TIME: 0
SUM_ERRORS: 0
SUM_WARNINGS: 0
SUM_ROWS_AFFECTED: 0
SUM_ROWS_SENT: 1
SUM_ROWS_EXAMINED: 0
SUM_CREATED_TMP_DISK_TABLES: 0
SUM_CREATED_TMP_TABLES: 0
SUM_SELECT_FULL_JOIN: 0
SUM_SELECT_FULL_RANGE_JOIN: 0
SUM_SELECT_RANGE: 0
SUM_SELECT_RANGE_CHECK: 0
SUM_SELECT_SCAN: 0
SUM_SORT_MERGE_PASSES: 0
SUM_SORT_RANGE: 0
SUM_SORT_ROWS: 0
SUM_SORT_SCAN: 0
SUM_NO_INDEX_USED: 0
SUM_NO_GOOD_INDEX_USED: 0
1 row in set (0.00 sec)
mysql> SET @a = 3;
Query OK, 0 rows affected (0.00 sec)
mysql> SET @b = 4;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from user_variables_by_thread;
+-----------+---------------+----------------+
| THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE |
+-----------+---------------+----------------+
| 276 | a | 3 |
| 276 | b | 4 |
+-----------+---------------+----------------+
2 rows in set (0.00 sec)
mysql> EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 5 |
+------------+
1 row in set (0.00 sec)
mysql> DEALLOCATE PREPARE stmt1;
Query OK, 0 rows affected (0.00 sec)
6.transaction tables
events_transactions_current
当前的事务事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 线程id |
EVENT_ID | bigint(20) unsigned | NO | NULL | 事件id |
END_EVENT_ID | bigint(20) unsigned | YES | NULL | 当事件结束时事件启动并更新为线程当前事件编号时,此列设置为NULL。 |
EVENT_NAME | varchar(128) | NO | NULL | 收集事件的仪器的名称。这是来自setup_instruments表的NAME值 |
STATE | enum(‘ACTIVE’ ,’COMMITTED’ ,’ROLLED BACK’) |
YES | NULL | 当前交易状态。值为ACTIVE(START TRANSACTION或BEGIN),COMMITTED(COMMITTED),或ROLLED BACK(ROLLBACK后) |
TRX_ID | bigint(20) unsigned | YES | NULL | unused |
GTID | varchar(64) | YES | NULL | GTID列包含gtid_next的值,它可以是使用格式UUID:NUMBER的ANONYMOUS,AUTOMATIC或GTID之一。对于使用gtid_next = AUTOMATIC(即所有正常客户端事务)的事务,GTID列在事务提交和实际GTID分配时都会更改。如果gtid_mode为ON或ON_PERMISSIVE,GTID列将更改为事务的GTID。如果gtid_mode为OFF或OFF_PERMISSIVE,则GTID列将更改为ANONYMOUS。 |
XID_FORMAT_ID | int(11) | YES | NULL | XA事务标识符的组件 |
XID_GTRID | varchar(130) | YES | NULL | XA事务标识符的组件 |
XID_BQUAL | varchar(130) | YES | NULL | XA事务标识符的组件 |
XA_STATE | varchar(64) | YES | NULL | XA交易的状态。值为ACTIVE(XA START之后),IDLE(XA END之后),PREPARED(XA PREPARE之后),ROLLED BACK(XA ROLLBACK后)或COMMITTED(XA COMMIT之后) |
SOURCE | varchar(64) | YES | NULL | 源文件的名称,其中包含产生事件的检测代码和检测到的文件中的行号 |
TIMER_START | bigint(20) unsigned | YES | NULL | 开始时间 |
TIMER_END | bigint(20) unsigned | YES | NULL | 结束时间 |
TIMER_WAIT | bigint(20) unsigned | YES | NULL | 持续时间 |
ACCESS_MODE | enum(‘READ ONLY’,’READ WRITE’) |
YES | NULL | 交易访问模式。该值为READ ONLY或READ WRITE。 |
ISOLATION_LEVEL | varchar(64) | YES | NULL | 事务隔离级别。值为REPEATABLE READ,READ COMMITTED,READ UNCOMMITTED或SERIALIZABLE。 |
AUTOCOMMIT | enum(‘YES’,’NO’) | NO | NULL | 在事务开始时是否启用自动提交模式 |
NUMBER_OF_SAVEPOINTS | bigint(20) unsigned | YES | NULL | 在交易期间发出的SAVEPOINT语句的数量 |
NUMBER_OF_ROLLBACK_TO_SAVEPOINT | bigint(20) unsigned | YES | NULL | 在交易期间发出的ROLLBACK TO SAVEPOINT语句的数量 |
NUMBER_OF_RELEASE_SAVEPOINT | bigint(20) unsigned | YES | NULL | 在交易期间发出的RELEASE SAVEPOINT语句的数量 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | YES | NULL | unused |
NESTING_EVENT_ID | bigint(20) unsigned | YES | NULL | 事件嵌套的事件的EVENT_ID值 |
NESTING_EVENT_TYPE | enum(‘TRANS ACTION’, ‘STATEMENT’, ‘STAGE’,’WAIT’) |
YES | NULL | 嵌套事件类型。值为TRANSACTION,STATEMENT,STAGE或WAIT。 (由于事务无法嵌套,因此不会出现TRANSACTION) |
events_transactions_history
表结构同events_transactions_current
events_transactions_history_long
表结构同events_transactions_current
7.connection tables
Accounts
每个客户端连接统计表
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | 用户名 |
HOST | char(60) | YES | NULL | 主机 |
CURRENT_CONNECTIONS | bigint(20) | NO | NULL | 当前的连接个数 |
TOTAL_CONNECTIONS | bigint(20) | NO | NULL | 历史总连接次数 |
-- 使用案例:使用连接池创建10个连接
mysql> select * from accounts;
+------+--------------+---------------------+-------------------+
| USER | HOST | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS |
+------+--------------+---------------------+-------------------+
| NULL | NULL | 49 | 122 |
| root | localhost | 2 | 190 |
| root | 10.41.168.11 | 10 | 11 |**
+------+--------------+---------------------+-------------------+
3 rows in set (0.00 sec)
-- 释放连接
mysql> select * from accounts;
+------+--------------+---------------------+-------------------+
| USER | HOST | CURRENT_CONNECTIONS | TOTAL_CONNECTIONS |
+------+--------------+---------------------+-------------------+
| NULL | NULL | 49 | 122 |
| root | localhost | 2 | 190 |
| root | 10.41.168.11 | 0 | 11 |**
+------+--------------+---------------------+-------------------+
hosts
每个客户端连接主机统计
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | 主机 |
CURRENT_CONNECTIONS | bigint(20) | NO | NULL | 当前连接数 |
TOTAL_CONNECTIONS | bigint(20) | NO | NULL | 总连接数 |
users
每个客户端连接用户名统计
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | 用户名 |
CURRENT_CONNECTIONS | bigint(20) | NO | NULL | 当前连接数 |
TOTAL_CONNECTIONS | bigint(20) | NO | NULL | 总连接数 |
8.connection Attribute Tables
session_account_connect_attrs
当前会话的连接属性
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
PROCESSLIST_ID | int(11) | NO | NULL | 会话的连接标识符 |
ATTR_NAME | varchar(32) | NO | NULL | 属性名称 |
ATTR_VALUE | varchar(1024) | YES | NULL | 属性值 |
ORDINAL_POSITION | int(11) | YES | NULL | 属性被添加到连接属性集合的顺序 |
session_connect_attrs
所有会话的连接属性
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
PROCESSLIST_ID | int(11) | NO | NULL | 会话的连接标识符 |
ATTR_NAME | varchar(32) | NO | NULL | 属性名称 |
ATTR_VALUE | varchar(1024) | YES | NULL | 属性值 |
ORDINAL_POSITION | int(11) | YES | NULL | 属性被添加到连接属性集合的顺序 |
mysql> select * from session_connect_attrs;
+----------------+------------------+----------------------+------------------+
| PROCESSLIST_ID | ATTR_NAME | ATTR_VALUE | ORDINAL_POSITION |
+----------------+------------------+----------------------+------------------+
| 224 | _os | Linux | 0 |
| 224 | _client_name | libmysql | 1 |
| 224 | _pid | 10020 | 2 |
| 224 | _client_version | 5.7.17 | 3 |
| 224 | _platform | x86_64 | 4 |
| 224 | program_name | mysql | 5 |
| 225 | _os | Linux | 0 |
| 225 | _client_name | libmysql | 1 |
| 225 | _pid | 38805 | 2 |
| 225 | _client_version | 5.7.17 | 3 |
| 225 | _platform | x86_64 | 4 |
| 225 | program_name | mysql | 5 |
| 226 | _os | Linux | 0 |
| 226 | _client_name | libmysql | 1 |
| 226 | _pid | 4957 | 2 |
| 226 | _client_version | 5.7.17 | 3 |
| 226 | _platform | x86_64 | 4 |
| 226 | program_name | mysql | 5 |
| 229 | _os | Win64 | 0 |
| 229 | _client_name | libmysql | 1 |
| 229 | _pid | 119544 | 2 |
| 229 | _thread | 118952 | 3 |
| 229 | _platform | x86_64 | 4 |
| 229 | program_name | mysql | 5 |
| 229 | _client_version | 5.7.18 | 6 |
| 230 | _runtime_version | 1.8.0_144 | 0 |
| 230 | _client_version | 5.1.31 | 1 |
| 230 | _client_name | MySQL Connector Java | 2 |
| 230 | _client_license | GPL | 3 |
| 230 | _runtime_vendor | Oracle Corporation | 4 |
+----------------+------------------+----------------------+------------------+
30 rows in set (0.00 sec)
_client_name:客户端名称(客户端库的libmysql)
_client_version:客户端库版本
_os:操作系统(例如Linux,Win64)
_pid:客户端进程ID
_platform:机器平台(例如,x86_64)
_thread:客户端线程ID(仅限Windows)
MySQL Connector / J定义了这些属性:
_client_license:连接器许可证类型
_runtime_vendor:Java运行时环境(JRE)供应商
_runtime_version:Java运行时环境(JRE)版本
9.User Variable Tables
user_variables_by_thread
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 定义变量的会话的线程标识符 |
VARIABLE_NAME | varchar(64) | NO | NULL | 变量名称,没有前导@字符 |
VARIABLE_VALUE | longblob | YES | NULL | 变量值 |
10.replication tables
replication_applier_configuration
从上的事务应用程序的配置参数
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 复制通道 |
DESIRED_DELAY | int(11) | NO | NULL | 从机必须落后主机的秒数,(CHANGE MASTER TO选项:MASTER_DELAY) |
表列和show slave status列对应关系:
replication_applier_configuration Column | SHOW SLAVE STATUS Column |
---|---|
DESIRED_DELAY | SQL_Delay |
replication_applier_status
从上的事务应用程序的当前状态
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 复制通道 |
SERVICE_STATE | enum(‘ON’,’OFF’) | NO | NULL | 当复制通道的应用程序线程处于活动状态或空闲状态时显示ON,OFF表示应用程序线程未处于活动状态。 |
REMAINING_DELAY | int(10) unsigned | YES | NULL | 如果从主机应用事件后,从机正在等待DESIRED_DELAY秒,则该字段包含剩余的延迟秒数。在其他时候,此字段为NULL。 (DESIRED_DELAY值存储在replication_applier_configuration表中。) |
COUNT_TRANSACTIONS_RETRIES | bigint(20) unsigned | NO | NULL | 显示由于从属SQL线程无法应用事务而进行的重试次数。 |
表列和show slave status列对应关系:
replication_applier_status Column | SHOW SLAVE STATUS Column |
---|---|
SERVICE_STATE | None |
REMAINING_DELAY | SQL_Remaining_Delay |
replication_applier_status_by_coordinator
协调器线程的状态(空,除非从机为多线程)
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 复制通道 |
THREAD_ID | bigint(20) unsigned | YES | NULL | SQL /协调器线程ID |
SERVICE_STATE | enum(‘ON’,’OFF’) | NO | NULL | ON(线程存在且处于活动状态或空闲状态)或OFF(线程不再存在) |
LAST_ERROR_NUMBER | int(11) | NO | NULL | 导致SQL /协调器线程停止的最新错误的错误号和错误消息。错误编号为0,作为空字符串的消息表示“无错误”。如果LAST_ERROR_MESSAGE值不为空,则错误值也会显示在从站的错误日志中 |
LAST_ERROR_MESSAGE | varchar(1024) | NO | NULL | |
LAST_ERROR_TIMESTAMP | timestamp | NO | CURRENT_TIMESTAMP | YYMMDD HH:MM:SS格式中的时间戳记,显示最近发生的SQL /协调器错误 |
mysql> select * from replication_applier_status_by_coordinator\G;
*************************** 1. row ***************************
CHANNEL_NAME:
THREAD_ID: 52
SERVICE_STATE: ON
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
1 row in set (0.01 sec)
mysql> select * from threads where thread_id='52'\G;
*************************** 1. row ***************************
THREAD_ID: 52
NAME: thread/sql/slave_sql --SQL线程
TYPE: FOREGROUND
PROCESSLIST_ID: 2
PROCESSLIST_USER: NULL
PROCESSLIST_HOST: NULL
PROCESSLIST_DB: NULL
PROCESSLIST_COMMAND: Connect
PROCESSLIST_TIME: 3502
PROCESSLIST_STATE: Slave has read all relay log; waiting for more updates
PROCESSLIST_INFO: NULL
PARENT_THREAD_ID: 1
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: NULL
THREAD_OS_ID: 17031
1 row in set (0.00 sec)
表列和show slave status列对应关系:
replication_applier_status_by_coordinator Column | SHOW SLAVE STATUS Column |
---|---|
THREAD_ID | None |
SERVICE_STATE | Slave_SQL_Running |
LAST_ERROR_NUMBER | Last_SQL_Errno |
LAST_ERROR_MESSAGE | Last_SQL_Error |
LAST_ERROR_TIMESTAMP | Last_SQL_Error_Timestamp |
replication_applier_status_by_worker
如果从是多线程的,则应用程序线程或工作线程的状态
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 复制通道 |
WORKER_ID | bigint(20) unsigned | NO | NULL | 工作标识符(与mysql.slave_worker_info表中的id列相同的值)。 STOP SLAVE后,THREAD_ID列变为NULL,但WORKER_ID值被保留。 |
THREAD_ID | bigint(20) unsigned | YES | NULL | 工作线程标识符 |
SERVICE_STATE | enum(‘ON’,’OFF’) | NO | NULL | ON(线程存在且处于活动状态或空闲状态)或OFF(线程不再存在) |
LAST_SEEN_TRANSACTION | char(57) | NO | NULL | 最后看到的事务。如果gtid_mode为ON,则列值定义如下:如果没有执行任何事务,则该列为空。当事务执行时,一旦设置了gtid_next,就从gtid_next设置列。从这一刻起,列总是显示GTID。保留GTID直到执行下一个事务。如果发生错误,则列值是发生错误时由工作人员执行的事务的GTID。当下一个GTID日志事件被此工作线程拾取时,该列在gtid_next设置后不久就从gtid_next更新 |
LAST_ERROR_NUMBER | int(11) | NO | NULL | 导致工作线程停止的最新错误的错误号和错误消息。错误编号0和空字符串的消息意味着“无错误”。如果LAST_ERROR_MESSAGE值不为空,则错误值也会显示在从站的错误日志中。 |
LAST_ERROR_MESSAGE | varchar(1024) | NO | NULL | |
LAST_ERROR_TIMESTAMP | timestamp | NO | CURRENT_TIMESTAMP | YYMMDD HH:MM:SS格式中的时间戳记,显示最近发生的工作错误 |
实例
mysql> select * from replication_applier_status_by_worker limit 1\G;
*************************** 1. row ***************************
CHANNEL_NAME:
WORKER_ID: 1
THREAD_ID: 53
SERVICE_STATE: ON
LAST_SEEN_TRANSACTION: d93f98a0-660a-11e7-b3a9-744aa40209ee:131
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
1 row in set (0.00 sec)
和show slave status对应关系
replication_applier_status_by_worker Column | SHOW SLAVE STATUS Column |
---|---|
WORKER_ID | None |
THREAD_ID | None |
SERVICE_STATE | None |
LAST_SEEN_TRANSACTION | None |
LAST_ERROR_NUMBER | Last_SQL_Errno |
LAST_ERROR_MESSAGE | Last_SQL_Error |
LAST_ERROR_TIMESTAMP | Last_SQL_Error_Timestamp |
replication_connection_configuration
用于连接到主机的配置参数
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 此行显示的复制通道 |
HOST | char(60) | NO | NULL | 从机连接的主机,MASTER_HOST |
PORT | int(11) | NO | NULL | 端口,MASTER_PORT |
USER | char(32) | NO | NULL | 复制的用户名,MASTER_USER |
NETWORK_INTERFACE | char(60) | NO | NULL | 绑定到的网络接口,MASTER_BIND |
AUTO_POSITION | enum(‘1’,’0’) | NO | NULL | 1如果自动定位正在使用;否则为0.MASTER_AUTO_POSITION |
SSL_ALLOWED | enum(‘YES’,’NO’,’IGNORED’) | NO | NULL | SSL参数 |
SSL_CA_FILE | varchar(512) | NO | NULL | SSL参数 |
SSL_CA_PATH | varchar(512) | NO | NULL | SSL参数 |
SSL_CERTIFICATE | varchar(512) | NO | NULL | SSL参数 |
SSL_CIPHER | varchar(512) | NO | NULL | SSL参数 |
SSL_KEY | varchar(512) | NO | NULL | SSL参数 |
SSL_VERIFY_SERVER_CERTIFICATE | enum(‘YES’,’NO’) | NO | NULL | SSL参数 |
SSL_CRL_FILE | varchar(255) | NO | NULL | SSL参数 |
SSL_CRL_PATH | varchar(255) | NO | NULL | SSL参数 |
CONNECTION_RETRY_INTERVAL | int(11) | NO | NULL | 连接重试之间的秒数,MASTER_CONNECT_RETRY |
CONNECTION_RETRY_COUNT | bigint(20) unsigned | NO | NULL | 在连接丢失的情况下,从机可以尝试重新连接到主机的次数,MASTER_RETRY_COUNT |
HEARTBEAT_INTERVAL | double(10,3) unsigned | NO | NULL | 从上复制心跳间隔,以秒为单位 |
TLS_VERSION | varchar(255) | NO | NULL |
实例
mysql> select * from replication_connection_configuration\G;
*************************** 1. row ***************************
CHANNEL_NAME:
HOST: 192.168.1.104
PORT: 15518
USER: repl
NETWORK_INTERFACE:
AUTO_POSITION: 0
SSL_ALLOWED: NO
SSL_CA_FILE:
SSL_CA_PATH:
SSL_CERTIFICATE:
SSL_CIPHER:
SSL_KEY:
SSL_VERIFY_SERVER_CERTIFICATE: NO
SSL_CRL_FILE:
SSL_CRL_PATH:
CONNECTION_RETRY_INTERVAL: 60
CONNECTION_RETRY_COUNT: 86400
HEARTBEAT_INTERVAL: 30.000
TLS_VERSION:
1 row in set (0.00 sec)
和show slave status对应关系
replication_connection_configuration | SHOW SLAVE STATUS |
---|---|
HOST | Master_Host |
PORT | Master_Port |
USER | Master_User |
NETWORK_INTERFACE | Master_Bind |
AUTO_POSITION | Auto_Position |
SSL_ALLOWED | Master_SSL_Allowed |
SSL_CA_FILE | Master_SSL_CA_File |
SSL_CA_PATH | Master_SSL_CA_Path |
SSL_CERTIFICATE | Master_SSL_Cert |
SSL_CIPHER | Master_SSL_Cipher |
SSL_KEY | Master_SSL_Key |
SSL_VERIFY_SERVER_CERTIFICATE | Master_SSL_Verify_Server_Cert |
SSL_CRL_FILE | Master_SSL_Crl |
SSL_CRL_PATH | Master_SSL_Crlpath |
CONNECTION_RETRY_INTERVAL | Connect_Retry |
CONNECTION_RETRY_COUNT | Master_Retry_Count |
replication_connection_status
与主机的连接的当前状态
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 此行显示的复制通道 |
GROUP_NAME | char(36) | NO | NULL | 如果此服务器是组的成员,则显示服务器所属的组的名称 |
SOURCE_UUID | char(36) | NO | NULL | 来自master的server_uuid值 |
THREAD_ID | bigint(20) unsigned | YES | NULL | I / O线程ID |
SERVICE_STATE | enum(‘ON’,’OFF’ ,’CONNECTING’) |
NO | NULL | ON(线程存在并处于活动状态或空闲状态),OFF(线程不再存在)或CONNECTING(线程存在并正在连接到主机) |
COUNT_RECEIVED_HEARTBEATS | bigint(20) unsigned | NO | 0 | 从上一次重新启动或重置以来,复制从机接收到的心跳信号的总数,或发出了CHANGE MASTER TO语句 |
LAST_HEARTBEAT_TIMESTAMP | timestamp | NO | CURRENT_ TIMESTAMP |
YMMDD HH:MM:SS格式中的时间戳,显示复制从站接收到最近的心跳信号。 |
RECEIVED_TRANSACTION_SET | longtext | NO | NULL | 与该从站接收到的所有事务相对应的全局事务ID(GTID)集合。如果GTID未使用,则为空。有关详细信息,请参阅GTID集。 |
LAST_ERROR_NUMBER | int(11) | NO | NULL | 导致I / O线程停止的最新错误的错误号和错误消息。错误编号为0,空字符串的消息意味着“无错误”。如果LAST_ERROR_MESSAGE值不为空,则错误值也会显示在从站的错误日志中。 |
LAST_ERROR_MESSAGE | varchar(1024) | NO | NULL | |
LAST_ERROR_TIMESTAMP | timestamp | NO | 0000-00-00 00:00:00 | YYMMDD HH:MM:SS格式中的时间戳,显示何时发生最近的I / O错误 |
实例
mysql> select * from replication_connection_status\G;
*************************** 1. row ***************************
CHANNEL_NAME:
GROUP_NAME:
SOURCE_UUID: d93f98a0-660a-11e7-b3a9-744aa40209ee
THREAD_ID: 103
SERVICE_STATE: ON
COUNT_RECEIVED_HEARTBEATS: 8910
LAST_HEARTBEAT_TIMESTAMP: 2017-09-21 17:08:29
RECEIVED_TRANSACTION_SET:
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00
1 row in set (0.00 sec)
和show slave status对应关系
replication_connection_status Column | SHOW SLAVE STATUS Column |
---|---|
SOURCE_UUID | Master_UUID |
THREAD_ID | None |
SERVICE_STATE | Slave_IO_Running |
RECEIVED_TRANSACTION_SET | Retrieved_Gtid_Set |
LAST_ERROR_NUMBER | Last_IO_Errno |
LAST_ERROR_MESSAGE | Last_IO_Error |
LAST_ERROR_TIMESTAMP | Last_IO_Error_Timestamp |
replication_group_member_stats
为组成员提供网络和状态信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 通道名 |
VIEW_ID | char(60) | NO | NULL | 此组的当前视图标识符 |
MEMBER_ID | char(36) | NO | NULL | 成员标识符,uuid |
COUNT_TRANSACTIONS_IN_QUEUE | bigint(20) unsigned | NO | NULL | 队列中的事务数量 |
COUNT_TRANSACTIONS_CHECKED | bigint(20) unsigned | NO | NULL | 已认证的事务数量 |
COUNT_CONFLICTS_DETECTED | bigint(20) unsigned | NO | NULL | 负面认证的事务数量 |
COUNT_TRANSACTIONS_ROWS_VALIDATING | bigint(20) unsigned | NO | NULL | 可用于认证但尚未被垃圾回收的可用事务数。 |
TRANSACTIONS_COMMITTED_ALL_MEMBERS | longtext | NO | NULL | 一组稳定的组事务 |
LAST_CONFLICT_FREE_TRANSACTION | text | NO | NULL | 最新事务认证没有冲突 |
replication_group_members
提供有关组参与者的组成员和事务的统计信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
CHANNEL_NAME | char(64) | NO | NULL | 通道名称 |
MEMBER_ID | char(36) | NO | NULL | 成员标识符,uuid |
MEMBER_HOST | char(60) | NO | NULL | 成员地址 |
MEMBER_PORT | int(11) | YES | NULL | 成员端口 |
MEMBER_STATE | char(64) | NO | NULL | 成员状态:offline:组复制插件已安装但尚未启动。RECOVERING:服务器已加入正在检索数据的组。ONLINE:会员处于完全正常的状态。 |
11.Lock Tables
metadata_locks
元数据锁被保存并被请求
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | NO | NULL | 元数据锁使用的锁类型:该值是GLOBAL,SCHEMA,TABLE,FUNCTION,PROCEDURE,TRIGGER(当前未使用),EVENT,COMMIT,USER LEVEL LOCK,TABLESPACE或LOCKING SERVICE中的一种 |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 包含对象的模式 |
OBJECT_NAME | varchar(64) | YES | NULL | 被检测对象的名称 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 记忆对象的地址 |
LOCK_TYPE | varchar(32) | NO | NULL | 元数据锁的锁类型。该值为INTENTION_EXCLUSIVE,SHARED,SHARED_HIGH_PRIO,SHARED_READ,SHARED_WRITE,SHARED_UPGRADABLE,SHARED_NO_WRITE,SHARED_NO_READ_WRITE或EXCLUSIVE之一 |
LOCK_DURATION | varchar(32) | NO | NULL | 来自元数据锁子系统的锁定时间。该值是STATEMENT,TRANSACTION或EXPLICIT之一。 STATEMENT和TRANSACTION值分别表示在语句或事务结束时释放的锁。 EXPLICIT值表示可以在语句或事务结束中生存并被明确释放的锁,例如使用FLUSH TABLES WITH READ LOCK获取的全局锁 |
LOCK_STATUS | varchar(32) | NO | NULL | 元数据锁子系统的锁定状态。该值是PENDING,GRANTED,VICTIM,TIMEOUT,KILLED,PRE_ACQUIRE_NOTIFY或POST_RELEASE_NOTIFY之一。性能模式如前所述分配这些值 |
SOURCE | varchar(64) | YES | NULL | 源文件的名称,其中包含产生事件的检测代码和检测到的文件中的行号。这使您可以检查源代码以确定涉及的代码 |
OWNER_THREAD_ID | bigint(20) unsigned | YES | NULL | 请求元数据锁的线程 |
OWNER_EVENT_ID | bigint(20) unsigned | YES | NULL | 请求元数据锁的事件 |
打开元数据锁
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl';
实例
mysql> select * from metadata_locks\G;
*************************** 1. row ***************************
OBJECT_TYPE: TABLE
OBJECT_SCHEMA: performance_schema
OBJECT_NAME: metadata_locks
OBJECT_INSTANCE_BEGIN: 380052496
LOCK_TYPE: SHARED_READ
LOCK_DURATION: TRANSACTION
LOCK_STATUS: GRANTED
SOURCE: sql_parse.cc:6038
OWNER_THREAD_ID: 274
OWNER_EVENT_ID: 5024
1 row in set (0.00 sec)
锁类型
目前MDL有如下锁模式,锁之间的兼容性可见源码mdl.cc:
锁模式 | 对应SQL |
---|---|
MDL_INTENTION_EXCLUSIVE | GLOBAL对象、SCHEMA对象操作会加此锁 |
MDL_SHARED | FLUSH TABLES with READ LOCK |
MDL_SHARED_HIGH_PRIO | 仅对MyISAM存储引擎有效 |
MDL_SHARED_READ | SELECT查询 |
MDL_SHARED_WRITE | DML语句 |
MDL_SHARED_WRITE_LOW_PRIO | 仅对MyISAM存储引擎有效 |
MDL_SHARED_UPGRADABLE | ALTER TABLE |
MDL_SHARED_READ_ONLY | LOCK xxx READ |
MDL_SHARED_NO_WRITE | FLUSH TABLES xxx,yyy,zzz READ |
MDL_SHARED_NO_READ_WRITE | FLUSH TABLE xxx WRITE |
MDL_EXCLUSIVE | ALTER TABLE xxx PARTITION BY … |
关于lock_status
-
当请求并立即获取元数据锁时,将插入状态为GRANTED的行。
-
当请求元数据锁并且不立即获取时,将插入状态为PENDING的行。
-
当先前请求的元数据锁被授予时,其行状态更新为GRANTED。
-
当元数据锁被释放时,它的行被删除。
-
当死锁检测器取消挂起的锁定请求以打破死锁(ER_LOCK_DEADLOCK)时,其行状态将从PENDING更新为VICTIM。
-
当待处理的锁定请求超时(ER_LOCK_WAIT_TIMEOUT)时,其行状态将从PENDING更新为TIMEOUT。
-
当授予锁定或挂起的锁定请求被杀死时,其行状态从GRANTED或PENDING更新为KILLED。
VICTIM,TIMEOUT和KILLED状态值很简短,表示锁行即将被删除。
table_handles
表锁被保存并被请求
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | NO | NULL | |
OBJECT_SCHEMA | varchar(64) | NO | NULL | 库名 |
OBJECT_NAME | varchar(64) | NO | NULL | 表名 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 内存中的表句柄地址 |
OWNER_THREAD_ID | bigint(20) unsigned | YES | NULL | 线程拥有表句柄 |
OWNER_EVENT_ID | bigint(20) unsigned | YES | NULL | 引起表句柄打开的事件 |
INTERNAL_LOCK | varchar(64) | YES | NULL | 在SQL级使用的表锁。该值是READ,READ WITH SHARED LOCKS,READ HIGH PRIORITY,READ NO INSERT,WRITE ALLOW WRITE,WRITE CONCURRENT INSERT,WRITE LOW PRIORITY或WRITE。有关这些锁类型的信息,请参阅include / thr_lock.h源文件 |
EXTERNAL_LOCK | varchar(64) | YES | NULL | 在存储引擎级使用的表锁。该值是READ EXTERNAL或WRITE EXTERNAL之一 |
实例
mysql> lock tables test read;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from table_handles where object_name='test'\G;
*************************** 7. row ***************************
OBJECT_TYPE: TABLE
OBJECT_SCHEMA: lt
OBJECT_NAME: test
OBJECT_INSTANCE_BEGIN: 367946800
OWNER_THREAD_ID: 275
OWNER_EVENT_ID: 2541
INTERNAL_LOCK: NULL
EXTERNAL_LOCK: READ EXTERNAL
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
12.System Variable Tables
global_variables
全局系统变量。只需要全局值的应用程序应该使用此表。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
VARIABLE_NAME | varchar(64) | NO | NULL | 系统变量名 |
VARIABLE_VALUE | varchar(1024) | YES | NULL | 系统变量值 |
session_variables
当前会话的系统变量。希望自己会话的所有系统变量值的应用程序应该使用此表,它包括其会话的会话变量,以及没有会话对应的全局变量的值。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
VARIABLE_NAME | varchar(64) | NO | NULL | 系统变量名 |
VARIABLE_VALUE | varchar(1024) | YES | NULL | 系统变量值 |
variables_by_thread
每个活动会话的会话系统变量,想要了解特定会话的会话变量值的应用程序应该使用此表。它仅包含会话变量,由线程ID标识。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 定义系统变量的会话的线程标识符 |
VARIABLE_NAME | varchar(64) | NO | NULL | 系统变量名 |
VARIABLE_VALUE | varchar(1024) | YES | NULL | 由THREAD_ID列命名的会话的会话变量值 |
13.Summary Tables
Wait Event Summaries
events_waits_summary_by_account_by_event_name
每个帐户等待事件和事件名称
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | 用户 |
HOST | char(60) | YES | NULL | 主机 |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 总结事件的数量。此值包括所有事件,无论是定时还是非限制 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总计等待时间的总计时间事件。此值仅针对定时事件计算,因为非活动事件的等待时间为NULL。对于其他xxx_TIMER_WAIT值也是如此 |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最短等待时间 |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的平均等待时间 |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最长等待时间 |
events_waits_summary_by_host_by_event_name
等待每个主机名和事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | 主机 |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL |
events_waits_summary_by_instance
每个实例等待事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 内存地址 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL |
events_waits_summary_by_thread_by_event_name
每个线程等待事件和事件名称
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 线程id |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL |
events_waits_summary_by_user_by_event_name
每个用户名和事件名称等待事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | 用户 |
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL |
events_waits_summary_global_by_event_name
每个事件名称等待事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | 事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL |
实例:列出Top N 个 class等待event by latency
能解决什么问题:站在更高的角度来衡量,主要是table的io,文件的io,表的lock的wait事件延迟。
SELECT SUBSTRING_INDEX(event_name,'/', 3) AS event_class,
SUM(COUNT_STAR) AS total,
sys.format_time(SUM(sum_timer_wait)) AS total_latency,
sys.format_time(MIN(min_timer_wait)) min_latency,
sys.format_time(IFNULL(SUM(sum_timer_wait) / NULLIF(SUM(COUNT_STAR), 0), 0)) AS avg_latency,
sys.format_time(MAX(max_timer_wait)) AS max_latency
FROM performance_schema.events_waits_summary_global_by_event_name
WHERE sum_timer_wait > 0
AND event_name != 'idle'
GROUP BY SUBSTRING_INDEX(event_name,'/', 3)
ORDER BY SUM(sum_timer_wait) DESC;
+-------------------+-----------+---------------+-------------+-------------+-------------+
| event_class | total | total_latency | min_latency | avg_latency | max_latency |
+-------------------+-----------+---------------+-------------+-------------+-------------+
| wait/io/table | 730785513 | 14.18 h | 704.70 ns | 69.84 us | 51.03 s |
| wait/synch/cond | 1063712 | 5.83 h | 1.46 us | 19.72 ms | 5.08 s |
| wait/synch/sxlock | 126045676 | 2.99 h | 46.98 ns | 85.36 us | 511.15 ms |
| wait/synch/mutex | 482116669 | 2.99 h | 24.36 ns | 22.31 us | 911.73 ms |
| wait/io/file | 9874913 | 29.96 m | 0 ps | 182.05 us | 1.06 s |
| wait/io/socket | 35572378 | 13.38 m | 0 ps | 22.57 us | 134.82 ms |
| wait/lock/table | 31248958 | 1.37 m | 267.96 ns | 2.63 us | 5.28 ms |
| wait/synch/rwlock | 22496810 | 4.30 s | 40.02 ns | 190.94 ns | 4.90 ms |
+-------------------+-----------+---------------+-------------+-------------+-------------+
8 rows in set (0.02 sec)
Stage Summaries
events_stages_summary_by_account_by_event_name
表结构同events_waits_summary_by_account_by_event_name
events_stages_summary_by_host_by_event_name
表结构同events_waits_summary_by_host_by_event_name
events_stages_summary_by_thread_by_event_name
表结构同events_waits_summary_by_thread_by_event_name
events_stages_summary_by_user_by_event_name
表结构同events_waits_summary_by_user_by_event_name
events_stages_summary_global_by_event_name
表结构同events_waits_summary_global_by_event_name
Statement Summaries
(重要)events_statements_summary_by_digest
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
SCHEMA_NAME | varchar(64) | YES | NULL | 库名 |
DIGEST | varchar(32) | YES | NULL | 对SQL_TEXT做MD5产生的32位字符串 |
DIGEST_TEXT | longtext | YES | NULL | 将语句中值部分用问号代替,用于SQL语句归类 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 总结事件的数量。此值包括所有事件,无论是定时还是非限制 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总计等待时间的总计时间事件。此值仅针对定时事件计算,因为非活动事件的等待时间为NULL。对于其他xxx_TIMER_WAIT值也是如此 |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最短等待时间 |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的平均等待时间 |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最长等待时间 |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的LOCK_TIME列的聚合。 |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的errors列的聚合。 |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的WARNINGS列的聚合。 |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的ROWS_AFFECTED列的聚合。 |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的ROWS_SENT列的聚合。 |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的ROWS_EXAMINED列的聚合。 |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的CREATED_TMP_DISK_TABLES列的聚合。 |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的CREATED_TMP_TABLES列的聚合。 |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SELECT_FULL_JOIN列的聚合。 |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SELECT_FULL_RANGE_JOIN列的聚合。 |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SELECT_RANGE列的聚合。 |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SELECT_RANGE_CHECK列的聚合。 |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SELECT_SCAN列的聚合。 |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SORT_MERGE_PASSES列的聚合。 |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SORT_RANGE列的聚合。 |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SORT_ROWS列的聚合。 |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的SORT_SCAN列的聚合。 |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的NO_INDEX_USED列的聚合。 |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL | 在events_statements_current表中相应的NO_GOOD_INDEX_USED列的聚合。 |
FIRST_SEEN | timestamp | NO | 0000-00-00 00:00:00 | 首次看到的具有给定摘要值的报表 |
LAST_SEEN | timestamp | NO | 0000-00-00 00:00:00 | 最近看到的具有给定摘要值的报表 |
使用说明
(1).哪类SQL执行最多?
可以看到执行次数最多的?
COUNT_STAR,FIRST_SEEN和LAST_SEEN分别显示了语句第一次执行和最后一次执行的时间点。
(2).哪类SQL的平均响应时间最多?
AVG_TIMER_WAIT
(3).哪类SQL排序记录数最多?
SUM_SORT_ROWS
(4).哪类SQL扫描记录数最多?
SUM_ROWS_EXAMINED
(5).哪类SQL使用临时表最多?
SUM_CREATED_TMP_TABLES,SUM_CREATED_TMP_DISK_TABLES
(6).哪类SQL返回结果集最多?
SUM_ROWS_SENT
(7).找出有error 或者 warning 的 SQL
SUM_ERRORS,SUM_WARNINGS
(8).找出全表扫描的SQL
SUM_NO_INDEX_USED,SUM_NO_GOOD_INDEX_USED
通过上述指标我们可以间接获得某类SQL的逻辑IO(SUM_ROWS_EXAMINED),CPU消耗(SUM_SORT_ROWS),网络带宽(SUM_ROWS_SENT)的对比,但还无法得到某类SQL的物理IO消耗,以及某类SQL访问数据的buffer命中率。
SQL维度统计信息使用实例
1.列出top N 个SQL的详细情况,以latency降序排列
SELECT sys.format_statement(DIGEST_TEXT) AS query,
SCHEMA_NAME AS db,
IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, '*', '') AS full_scan,
COUNT_STAR AS exec_count,
SUM_ERRORS AS err_count,
SUM_WARNINGS AS warn_count,
sys.format_time(SUM_TIMER_WAIT) AS total_latency,
sys.format_time(MAX_TIMER_WAIT) AS max_latency,
sys.format_time(AVG_TIMER_WAIT) AS avg_latency,
sys.format_time(SUM_LOCK_TIME) AS lock_latency,
SUM_ROWS_SENT AS rows_sent,
ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,
SUM_ROWS_EXAMINED AS rows_examined,
ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,
SUM_CREATED_TMP_TABLES AS tmp_tables,
SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables,
SUM_SORT_ROWS AS rows_sorted,
SUM_SORT_MERGE_PASSES AS sort_merge_passes,
DIGEST AS digest,
FIRST_SEEN AS first_seen,
LAST_SEEN as last_seen
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC limit 10;
*************************** 2. row ***************************
query: UPDATE `sbtest1` SET `k` = `k` + ? WHERE `id` = ?
db: lt
full_scan:
exec_count: 1734843 --SQL执行的总次数
err_count: 0 --SQL执行失败的总次数
warn_count: 0
total_latency: 8.23 h --总延时
max_latency: 922.08 ms
avg_latency: 17.07 ms
lock_latency: 5.62 m
rows_sent: 0
rows_sent_avg: 0
rows_examined: 1735053
rows_examined_avg: 1
tmp_tables: 0
tmp_disk_tables: 0
rows_sorted: 0
sort_merge_passes: 0
digest: b301230939993a6f01020a8bc9cb16c3
first_seen: 2017-09-19 11:49:46
last_seen: 2017-09-19 14:13:05
2 rows in set (0.00 sec)
实例2:找出排序延迟对多的SQL
SELECT sys.format_statement(DIGEST_TEXT) AS query,
SCHEMA_NAME db,
COUNT_STAR AS exec_count,
sys.format_time(SUM_TIMER_WAIT) AS total_latency,
SUM_SORT_MERGE_PASSES AS sort_merge_passes,
SUM_SORT_SCAN AS sorts_using_scans,
SUM_SORT_RANGE AS sort_using_range,
SUM_SORT_ROWS AS rows_sorted,
FIRST_SEEN as first_seen,
LAST_SEEN as last_seen,
DIGEST AS digest
FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_SORT_ROWS > 0 and SCHEMA_NAME not in ('mysql','sys')
ORDER BY SUM_TIMER_WAIT DESC;
+-------------------------------------------------------------------+------+------------+---------------+-------------------+-------------------+------------------+-------------+---------------------+---------------------+----------------------------------+
| query | db | exec_count | total_latency | sort_merge_passes | sorts_using_scans | sort_using_range | rows_sorted | first_seen | last_seen | digest |
+-------------------------------------------------------------------+------+------------+---------------+-------------------+-------------------+------------------+-------------+---------------------+---------------------+----------------------------------+
| SELECT DISTINCTROW `c` FROM `s ... BETWEEN ? AND ? ORDER BY `c` | lt | 1735356 | 4.35 h | 0 | 1735448 | 0 | 173541400 | 2017-09-19 11:49:46 | 2017-09-19 14:13:05 | 23fee108669d316718c9b5c78d7b9f73 |
| SELECT `c` FROM `sbtest1` WHER ... BETWEEN ? AND ? ORDER BY `c` | lt | 1735595 | 1.90 h | 0 | 0 | 1735691 | 173568300 | 2017-09-19 11:49:46 | 2017-09-19 14:13:05 | 4c5fc311dca5c840c9d8267ffbbb5d7e |
+-------------------------------------------------------------------+------+------------+---------------+-------------------+-------------------+------------------+-------------+---------------------+---------------------+----------------------------------+
events_statements_summary_by_program
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | enum(‘EVENT’,’FUNCTION’,’PROCEDURE’,’TABLE’,’TRIGGER’) | YES | NULL | |
OBJECT_SCHEMA | varchar(64) | NO | NULL | |
OBJECT_NAME | varchar(64) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_STATEMENTS | bigint(20) unsigned | NO | NULL | |
SUM_STATEMENTS_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_STATEMENTS_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_STATEMENTS_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_STATEMENTS_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
events_statements_summary_by_account_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
events_statements_summary_by_host_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
events_statements_summary_by_thread_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
events_statements_summary_by_user_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
events_statements_summary_global_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
SUM_LOCK_TIME | bigint(20) unsigned | NO | NULL | |
SUM_ERRORS | bigint(20) unsigned | NO | NULL | |
SUM_WARNINGS | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_AFFECTED | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_SENT | bigint(20) unsigned | NO | NULL | |
SUM_ROWS_EXAMINED | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_DISK_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_CREATED_TMP_TABLES | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_FULL_RANGE_JOIN | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_RANGE_CHECK | bigint(20) unsigned | NO | NULL | |
SUM_SELECT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_SORT_MERGE_PASSES | bigint(20) unsigned | NO | NULL | |
SUM_SORT_RANGE | bigint(20) unsigned | NO | NULL | |
SUM_SORT_ROWS | bigint(20) unsigned | NO | NULL | |
SUM_SORT_SCAN | bigint(20) unsigned | NO | NULL | |
SUM_NO_INDEX_USED | bigint(20) unsigned | NO | NULL | |
SUM_NO_GOOD_INDEX_USED | bigint(20) unsigned | NO | NULL |
Transaction Summaries
events_transactions_summary_by_account_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_ONLY | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL |
events_transactions_summary_by_host_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_ONLY | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL |
events_transactions_summary_by_thread_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_ONLY | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL |
events_transactions_summary_by_user_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_ONLY | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL |
events_transactions_summary_global_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_ONLY | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_ONLY | bigint(20) unsigned | NO | NULL |
Object Wait Summaries
objects_summary_global_by_type
对象摘要
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | YES | NULL | |
OBJECT_SCHEMA | varchar(64) | YES | NULL | |
OBJECT_NAME | varchar(64) | YES | NULL | |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 总结事件的数量。此值包括所有事件,无论是定时还是非限制 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总计等待时间的总计时间事件。此值仅针对定时事件计算,因为非活动事件的等待时间为NULL。对于其他xxx_TIMER_WAIT值也是如此 |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最短等待时间 |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的平均等待时间 |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | 总结定时事件的最长等待时间 |
使用说明
能解决什么问题:
- 从table的角度来衡量DB的压力。
- 和file_summary_by_instance类似,file_summary_by_instance考虑的是文件,是物理IO。而objects_summary_global_by_type更多的是上层的压力分布。
- 除了能解决file_summary_by_instance的问题外,还可以发现并发的问题。比如:如果这里table的total很低,但是total_latency 很高,这就能很好的说明,80%是由于这个file的并发访问造成的high latency
- 它还能做一件非常niubility的事情,那就是查看哪些表已经不被使用,已经下线了。其实很多开发也会问哪些表不被使用了,这下就可以派上用场了。好处:a)优化业务 b)减少磁盘空间。 c)减少备份的压力。
mysql> SELECT object_schema AS table_schema,
-> object_name AS table_name,
-> count_star AS total,
-> sys.format_time(sum_timer_wait) as total_latency,
-> sys.format_time(sum_timer_wait / count_star) as avg_latency,
-> sys.format_time(max_timer_wait) as max_latency
-> FROM performance_schema.objects_summary_global_by_type
-> ORDER BY sum_timer_wait DESC limit 10;
+--------------+---------------+-----------+---------------+-------------+-------------+
| table_schema | table_name | total | total_latency | avg_latency | max_latency |
+--------------+---------------+-----------+---------------+-------------+-------------+
| lt | sbtest1 | 762034158 | 14.16 h | 66.91 us | 922.13 ms |
| lt | test | 258 | 2.27 m | 528.48 ms | 51.03 s |
| sys | format_path | 749 | 279.48 ms | 373.13 us | 587.36 us |
| sys | format_bytes | 6072 | 54.96 ms | 9.05 us | 62.73 us |
| lt | apsm | 43 | 18.10 ms | 420.83 us | 17.86 ms |
| sys | format_time | 450 | 4.08 ms | 9.06 us | 39.30 us |
| mysql | gtid_executed | 0 | 0 ps | NULL | 0 ps |
| mysql | server_cost | 0 | 0 ps | NULL | 0 ps |
| mysql | user | 0 | 0 ps | NULL | 0 ps |
| mysql | db | 0 | 0 ps | NULL | 0 ps |
+--------------+---------------+-----------+---------------+-------------+-------------+
10 rows in set (0.01 sec)
File I/O Summaries
file_summary_by_event_name
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | 给定事件名称 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 这些列聚合所有I / O操作,含义同上 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | 这些列聚合所有读取操作,包括FGETS,FGETC,FREAD和READ |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_READ | bigint(20) | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | 这些列汇总了所有写入操作,包括FPUTS,FPUTC,FPRINTF,VFPRINTF,FWRITE和PWRITE |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_WRITE | bigint(20) | NO | NULL | |
COUNT_MISC | bigint(20) unsigned | NO | NULL | 这些列汇总了所有其他I / O操作,包括CREATE,DELETE,OPEN,CLOSE,STREAM_OPEN,STREAM_CLOSE,SEEK,TELL,FLUSH,STAT,FSTAT,CHSIZE,RENAME和SYNC。这些操作没有字节计数。 |
SUM_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_MISC | bigint(20) unsigned | NO | NULL |
使用说明
统计每个事件的IO使用率,单位bytes,counts。 Top Waits By bytes,能解决什么问题?
- 专注的不再只是文件一个点,包括服务器层和引擎层。
- 如果relaylog非常大,说明同步有问题。
- 如果binlog比较大,说明binlog有问题。
- 如果sql/FRM 比较大,Tune table_open_cache / table_definition_cache
- 如果sql/file_parse比较大,如果在5.5比较高,那就升级mysql到5.6
- 如果query_log比较大,那就disable genery log
- 如果slow log比较大,那就调整slow阈值。
- 还有很多值得挖掘~~
mysql> SELECT SUBSTRING_INDEX(event_name, '/', -2) event_name,
-> count_star AS total,
-> sys.format_time(sum_timer_wait) AS total_latency,
-> count_read,
-> sys.format_bytes(sum_number_of_bytes_read) AS total_read,
-> count_write,
-> sys.format_bytes(sum_number_of_bytes_write) AS total_written,
-> sys.format_bytes(sum_number_of_bytes_write + sum_number_of_bytes_read) AS total_requested
-> FROM performance_schema.file_summary_by_event_name
-> WHERE event_name LIKE 'wait/io/file/%'
-> AND count_star > 0
-> ORDER BY sum_number_of_bytes_write + sum_number_of_bytes_read DESC limit 10;
+-------------------------+---------+---------------+------------+------------+-------------+---------------+-----------------+
| event_name | total | total_latency | count_read | total_read | count_write | total_written | total_requested |
+-------------------------+---------+---------------+------------+------------+-------------+---------------+-----------------+
| innodb/innodb_data_file | 6181102 | 15.64 m | 4151635 | 63.33 GiB | 1893218 | 57.37 GiB | 120.71 GiB |
| innodb/innodb_log_file | 2090529 | 7.39 m | 8 | 132.50 KiB | 1045255 | 10.43 GiB | 10.43 GiB |
| sql/binlog | 1522702 | 6.88 m | 1292 | 10.04 MiB | 1396550 | 4.62 GiB | 4.63 GiB |
| sql/io_cache | 67614 | 1.58 s | 0 | 0 bytes | 63407 | 1.92 GiB | 1.92 GiB |
| innodb/innodb_temp_file | 1380 | 416.42 ms | 688 | 688.00 MiB | 688 | 688.00 MiB | 1.34 GiB |
| sql/binlog_index | 7662 | 489.73 ms | 1103 | 2.83 MiB | 0 | 0 bytes | 2.83 MiB |
| sql/FRM | 3631 | 216.27 ms | 1453 | 695.27 KiB | 509 | 96.54 KiB | 791.81 KiB |
| sql/ERRMSG | 5 | 7.12 ms | 3 | 74.51 KiB | 0 | 0 bytes | 74.51 KiB |
| mysys/charset | 3 | 7.02 ms | 1 | 18.27 KiB | 0 | 0 bytes | 18.27 KiB |
| myisam/dfile | 38 | 19.98 ms | 12 | 15.99 KiB | 0 | 0 bytes | 15.99 KiB |
+-------------------------+---------+---------------+------------+------------+-------------+---------------+-----------------+
10 rows in set (0.00 sec)
同样,也可以通过延时的维度进行统计
file_summary_by_instance
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
FILE_NAME | varchar(512) | NO | NULL | 文件名 |
EVENT_NAME | varchar(128) | NO | NULL | 事件名 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 内存地址 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_READ | bigint(20) | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_WRITE | bigint(20) | NO | NULL | |
COUNT_MISC | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_MISC | bigint(20) unsigned | NO | NULL |
使用说明
IO 相关,文件相关的延迟 , 事件相关的延迟, FILE IO, 使用说明: 统计每个文件的IO使用率, 比如读写次数,读写bytes,能解决什么问题?
- 可以清楚的知道那个文件是被访问的最频繁,压力最大,延迟最多的文件。
- 可以实时监控redo log,undo,datafile的变化,从而做针对性的优化和调整。当然,通过这个,也能知道瓶颈。
- 可以清楚的知道某个库级别,表级别的压力情况,这个比之前count sql数量,观察data size要靠谱,真实的多。
- 可以做前瞻性的规划,比如:拆库拆表,可以指导如何按照压力负载均衡的做到合理来优化拆分
- 通过表级别的count监控,还可以用做前端缓存的利用率监控。
- 可以知道哪些db.table是以只读为主,哪些db.test是以只写为主。从而又进一步做缓存和业务监控。
mysql> SELECT file_name AS file,
-> count_read,
-> sys.format_bytes(sum_number_of_bytes_read) AS total_read,
-> count_write,
-> sys.format_bytes(sum_number_of_bytes_write) AS total_written,
-> sys.format_bytes(sum_number_of_bytes_read + sum_number_of_bytes_write) AS total
-> FROM performance_schema.file_summary_by_instance
-> ORDER BY sum_number_of_bytes_read + sum_number_of_bytes_write DESC limit 10;
+------------------------------------------------------+------------+------------+-------------+---------------+-----------+
| file | count_read | total_read | count_write | total_written | total |
+------------------------------------------------------+------------+------------+-------------+---------------+-----------+
| /home/data_sas/ltdb/data/data/lt/sbtest1.ibd | 4149424 | 63.30 GiB | 1665754 | 27.78 GiB | 91.08 GiB |
| /home/data_sas/ltdb/data/data/ibdata1 | 1614 | 27.23 MiB | 214880 | 29.17 GiB | 29.19 GiB |
| /home/data_sas/ltdb/data/redo/ib_logfile0 | 8 | 132.50 KiB | 623136 | 5.26 GiB | 5.26 GiB |
| /home/data_sas/ltdb/data/redo/ib_logfile1 | 0 | 0 bytes | 422115 | 5.17 GiB | 5.17 GiB |
| /home/data_sas/ltdb/data/data/Innodb Merge Temp File | 688 | 688.00 MiB | 688 | 688.00 MiB | 1.34 GiB |
| /home/data_sas/ltdb/data/binlog/mysql-bin.000477 | 1284 | 10.02 MiB | 4038 | 10.02 MiB | 20.04 MiB |
| /home/data_sas/ltdb/data/data/ibtmp1 | 2 | 32.00 KiB | 95 | 13.30 MiB | 13.33 MiB |
| /home/data_sas/ltdb/data/binlog/mysql-bin.000025 | 0 | 0 bytes | 1368 | 10.40 MiB | 10.40 MiB |
| /home/data_sas/ltdb/data/binlog/mysql-bin.000011 | 2 | 16.00 KiB | 1355 | 10.33 MiB | 10.35 MiB |
| /home/data_sas/ltdb/data/binlog/mysql-bin.000012 | 0 | 0 bytes | 1348 | 10.34 MiB | 10.34 MiB |
+------------------------------------------------------+------------+------------+-------------+---------------+-----------+
10 rows in set (0.00 sec)
除了读写的次数大小作为维度外,也可以使用延时作为维度统计。
Table I/O and Lock Wait Summaries
table_io_waits_summary_by_table
汇总由wait / io / table / sql / handler工具生成的所有表I / O等待事件。分组是按table
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | YES | NULL | 库名 |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 文件名、表名、IP:SOCK值 |
OBJECT_NAME | varchar(64) | YES | NULL | FILE、TABLE、TEMPORARY TABLE |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 这些列聚合所有I / O操作。它们与相应的xxx_READ和xxx_WRITE列的总和相同 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | 这些列聚合所有读操作。它们与相应的xxx_FETCH列的总和相同 |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | 这些列聚合所有写入操作。它们与相应的xxx_INSERT,xxx_UPDATE和xxx_DELETE列的总和相同 |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_FETCH | bigint(20) unsigned | NO | NULL | 这些列聚合所有的提取操作 |
SUM_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
COUNT_INSERT | bigint(20) unsigned | NO | NULL | 这些列聚合所有insert操作 |
SUM_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
COUNT_UPDATE | bigint(20) unsigned | NO | NULL | 这些列聚合所有update操作 |
SUM_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
COUNT_DELETE | bigint(20) unsigned | NO | NULL | 这些列聚合所有delete操作 |
SUM_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_DELETE | bigint(20) unsigned | NO | NULL |
使用说明
- 可以精确到表级别的IOPS,TPS。为诊断问题性能问题提供可靠的粒度。
- 可以指导通过数据来了解业务并且指导业务开发,为什么IUD很高,为什么S很高。
- 有些表如果只有IDU,或者甚至只有I,那么这些表根本就不适合放入在线DB,so,可以提供在线DB的架构优化。
重点说明
以performance_schema.table_io_waits_summary_by_table举例
- 几个常用的命令:
show variables like 'perf%';
show status like 'perf%';
show engine performance_schema status;
(table_share_hash).count -- performance_schema 监控 当前表的数量
(table_share_hash).size -- performance_schema 监控 表打开的最大的数量
- 如果(table_share_hash).size 达到最大限制了会有什么影响?如何解决?
- 如果达到最大限制,即(table_share_hash).count = (table_share_hash).size , 之后新的表就不能被统计进来。
- 原来已经打开的表,任然受监控,不影响。
如何解决呢?
- 如果可以停mysql的话,可以调大performance_schema_max_table_instances 值。
- 如果不能停mysql,可以适当的删除一些表如: drop table xx; 这样做可以减少(table_share_hash).count的数量。
- 注意: truncate table performance_schema.table_io_waits_summary_by_table 只能reset status = 0 ,不会删除里面的记录,所以这个行不通。
-
performance_schema.table_io_waits_summary_by_table 里面的count_fetch 需要注意:
-
count_fetch, 指的是数据库底层com_fetch的量,千万别理解成select。
-
哪些操作会导致count_fetch 增长呢?
-
insert 操作不会造成 count_fetch ++ , 但是update 会造成 count_fetch ++。
-
其实,这也很好理解,因为update语句,会从数据库中fetch数据到server层以及内存,然后在修改。
-
select 操作会造成 count_fetch 增长。
-
-
一次select,count_fetch 增长 1 么?
-
显然不是,count_fetch 指的是: 一次底层fetch调用,增长一次。比如:有一张表100条记录。SQL语句为:select * from table; rows_affected: 100rows那么count_fetch 至少是100,而不是1.
-
为什么说至少是100呢?有可能会从二级索引中fetch 数据,然后再从主键索引中fetch 数据。特别注意: 有的时候count_update 不增长,也没有select 操作,为啥count_fetch 会增长呢?如果理解了count_fetch,你就不难懂了。
-
- fetch 指的是从数据库文件fetch的fetch 调用。举例子:一条SQL语句如: update table_A set name = ‘test’ where id = 3; 你猜,会怎样?结果是:count_fetch 增加,count_update 没有增加。因为:根本就没有id=3的记录与之匹配,也就是说udpate根本就没有更改任何记录,所以count_update 不会增加,但是有fetch操作,所以count_fetch 由此增长。
验证:
mysql> SELECT object_schema AS table_schema,
-> object_name AS table_name,
-> count_star AS rows_io_total,
-> count_read AS rows_read,
-> count_write AS rows_write,
-> count_fetch AS rows_fetchs,
-> count_insert AS rows_inserts,
-> count_update AS rows_updates,
-> count_delete AS rows_deletes,
-> sys.format_time(sum_timer_fetch) AS fetch_latency,
-> sys.format_time(sum_timer_insert) AS insert_latency,
-> sys.format_time(sum_timer_update) AS update_latency,
-> sys.format_time(sum_timer_delete) AS delete_latency
-> FROM performance_schema.table_io_waits_summary_by_table
-> ORDER BY sum_timer_wait DESC limit 10;
+--------------+------------+---------------+-----------+------------+-------------+--------------+--------------+--------------+---------------+----------------+----------------+----------------+
| table_schema | table_name | rows_io_total | rows_read | rows_write | rows_fetchs | rows_inserts | rows_updates | rows_deletes | fetch_latency | insert_latency | update_latency | delete_latency |
+--------------+------------+---------------+-----------+------------+-------------+--------------+--------------+--------------+---------------+----------------+----------------+----------------+
| lt | sbtest1 | 730785272 | 723841944 | 6943328 | 723841944 | 1735832 | 3471664 | 1735832 | 5.65 h | 1.39 h | 6.79 h | 18.88 m |
| lt | test | 199 | 177 | 22 | 177 | 14 | 8 | 0 | 2.27 m | 881.14 us | 911.04 us | 0 ps |
| lt | apsm | 40 | 40 | 0 | 40 | 0 | 0 | 0 | 18.08 ms | 0 ps | 0 ps | 0 ps |
| sys | sys_config | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 ps | 0 ps | 0 ps | 0 ps |
+--------------+------------+---------------+-----------+------------+-------------+--------------+--------------+--------------+---------------+----------------+----------------+----------------+
4 rows in set (0.00 sec)
table_io_waits_summary_by_index_usage
table_io_waits_summary_by_index_usage表汇总由wait / io / table / sql / handler工具生成的所有表索引I / O等待事件。 分组是按表索引。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | YES | NULL | 库名 |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 文件名、表名、IP:SOCK值 |
OBJECT_NAME | varchar(64) | YES | NULL | FILE、TABLE、TEMPORARY TABLE |
INDEX_NAME | varchar(64) | YES | NULL | 索引名 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_FETCH | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_FETCH | bigint(20) unsigned | NO | NULL | |
COUNT_INSERT | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_INSERT | bigint(20) unsigned | NO | NULL | |
COUNT_UPDATE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_UPDATE | bigint(20) unsigned | NO | NULL | |
COUNT_DELETE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_DELETE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_DELETE | bigint(20) unsigned | NO | NULL |
使用说明
检测索引
-- 1)哪些索引没有利用? 2)哪些索引使用率高
mysql> SELECT OBJECT_SCHEMA AS table_schema,
-> OBJECT_NAME AS table_name,
-> INDEX_NAME as index_name,
-> COUNT_FETCH AS rows_fetched,
-> sys.format_time(SUM_TIMER_FETCH) AS select_latency,
-> COUNT_INSERT AS rows_inserted,
-> sys.format_time(SUM_TIMER_INSERT) AS insert_latency,
-> COUNT_UPDATE AS rows_updated,
-> sys.format_time(SUM_TIMER_UPDATE) AS update_latency,
-> COUNT_DELETE AS rows_deleted,
-> sys.format_time(SUM_TIMER_INSERT) AS delete_latency
-> FROM performance_schema.table_io_waits_summary_by_index_usage
-> WHERE index_name IS NOT NULL
-> ORDER BY sum_timer_wait DESC;
+--------------+------------+------------+--------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| table_schema | table_name | index_name | rows_fetched | select_latency | rows_inserted | insert_latency | rows_updated | update_latency | rows_deleted | delete_latency |
+--------------+------------+------------+--------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
| lt | sbtest1 | PRIMARY | 723841944 | 5.65 h | 0 | 0 ps | 3471664 | 6.79 h | 1735832 | 0 ps |
| lt | apsm | PRIMARY | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| lt | apsm | apsmactno | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| sys | sys_config | PRIMARY | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
| lt | sbtest1 | k_1 | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps | 0 | 0 ps |
+--------------+------------+------------+--------------+----------------+---------------+----------------+--------------+----------------+--------------+----------------+
5 rows in set (0.01 sec)
找到全表扫描的表
-- 1)能找到哪些表被全表扫描的多,从而针对性的对这张表优化。
-- 2)优化内存使用率。将full_scann减少,更加能够提高内存利用率。能够让更多合理的数据进入内存,从而进一步的减少了slow
mysql> SELECT object_schema,
-> object_name,
-> count_read AS rows_full_scanned
-> FROM performance_schema.table_io_waits_summary_by_index_usage
-> WHERE index_name IS NULL
-> AND count_read > 0
-> ORDER BY count_read DESC;
+---------------+-------------+-------------------+
| object_schema | object_name | rows_full_scanned |
+---------------+-------------+-------------------+
| lt | test | 177 |
| lt | apsm | 40 |
+---------------+-------------+-------------------+
2 rows in set (0.00 sec)
找出未使用过的index和schema
mysql> SELECT object_schema,
-> object_name,
-> index_name
-> FROM performance_schema.table_io_waits_summary_by_index_usage
-> WHERE index_name IS NOT NULL
-> AND count_star = 0
-> AND index_name <> 'PRIMARY'
-> ORDER BY object_schema, object_name;
+---------------+-------------+------------+
| object_schema | object_name | index_name |
+---------------+-------------+------------+
| lt | apsm | apsmactno |
| lt | sbtest1 | k_1 |
+---------------+-------------+------------+
2 rows in set (0.00 sec)
table_lock_waits_summary_by_table
table_lock_waits_summary_by_table表汇总由wait / lock / table / sql / handler工具生成的所有表锁等待事件。分组是table
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
OBJECT_TYPE | varchar(64) | YES | NULL | 库名 |
OBJECT_SCHEMA | varchar(64) | YES | NULL | 文件名、表名、IP:SOCK值 |
OBJECT_NAME | varchar(64) | YES | NULL | FILE、TABLE、TEMPORARY TABLE |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 这些列聚合所有锁操作。它们与相应的xxx_READ和xxx_WRITE列的总和相同。 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | 这些列聚合所有读锁定操作。它们与相应的xxx_READ_NORMAL,xxx_READ_WITH_SHARED_LOCKS,xxx_READ_HIGH_PRIORITY和xxx_READ_NO_INSERT列的总和相同。 |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | 这些列聚合所有写锁定操作。它们与相应的xxx_WRITE_ALLOW_WRITE,xxx_WRITE_CONCURRENT_INSERT,xxx_WRITE_LOW_PRIORITY和xxx_WRITE_NORMAL列的总和相同。 |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_READ_NORMAL | bigint(20) unsigned | NO | NULL | 这些列聚合内部读锁。 |
SUM_TIMER_READ_NORMAL | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_NORMAL | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_NORMAL | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_NORMAL | bigint(20) unsigned | NO | NULL | |
COUNT_READ_WITH_SHARED_LOCKS | bigint(20) unsigned | NO | NULL | 这些列聚合内部读锁。 |
SUM_TIMER_READ_WITH_SHARED_LOCKS | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_WITH_SHARED_LOCKS | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_WITH_SHARED_LOCKS | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_WITH_SHARED_LOCKS | bigint(20) unsigned | NO | NULL | |
COUNT_READ_HIGH_PRIORITY | bigint(20) unsigned | NO | NULL | 这些列聚合内部读锁。 |
SUM_TIMER_READ_HIGH_PRIORITY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_HIGH_PRIORITY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_HIGH_PRIORITY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_HIGH_PRIORITY | bigint(20) unsigned | NO | NULL | |
COUNT_READ_NO_INSERT | bigint(20) unsigned | NO | NULL | 这些列聚合内部读锁。 |
SUM_TIMER_READ_NO_INSERT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_NO_INSERT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_NO_INSERT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_NO_INSERT | bigint(20) unsigned | NO | NULL | |
COUNT_READ_EXTERNAL | bigint(20) unsigned | NO | NULL | 这些列聚合了外部读锁。 |
SUM_TIMER_READ_EXTERNAL | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ_EXTERNAL | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ_EXTERNAL | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ_EXTERNAL | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE_ALLOW_WRITE | bigint(20) unsigned | NO | NULL | 这些列聚合内部写锁。 |
SUM_TIMER_WRITE_ALLOW_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE_ALLOW_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE_ALLOW_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE_ALLOW_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE_CONCURRENT_INSERT | bigint(20) unsigned | NO | NULL | 这些列聚合内部写锁。 |
SUM_TIMER_WRITE_CONCURRENT_INSERT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE_CONCURRENT_INSERT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE_CONCURRENT_INSERT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE_CONCURRENT_INSERT | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE_LOW_PRIORITY | bigint(20) unsigned | NO | NULL | 这些列聚合内部写锁。 |
SUM_TIMER_WRITE_LOW_PRIORITY | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE_LOW_PRIORITY | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE_LOW_PRIORITY | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE_LOW_PRIORITY | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE_NORMAL | bigint(20) unsigned | NO | NULL | 这些列聚合内部写锁。 |
SUM_TIMER_WRITE_NORMAL | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE_NORMAL | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE_NORMAL | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE_NORMAL | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE_EXTERNAL | bigint(20) unsigned | NO | NULL | 这些列聚合外部写锁。 |
SUM_TIMER_WRITE_EXTERNAL | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE_EXTERNAL | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE_EXTERNAL | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE_EXTERNAL | bigint(20) unsigned | NO | NULL |
附
An internal lock corresponds to a lock in the SQL layer. This is currently implemented by a call to thr_lock(). In event rows, these locks are distinguished by the OPERATION column, which has one of these values
read normal
read with shared locks
read high priority
read no insert
write allow write
write concurrent insert
write delayed
write low priority
write normal
An external lock corresponds to a lock in the storage engine layer. This is currently implemented by a call to handler::external_lock(). In event rows, these locks are distinguished by the OPERATION column, which has one of these values:
read external
write external
Socket Summaries
socket_summary_by_event_name
针对所有套接字I / O操作,每个套接字仪器,由wait / io / socket / *仪器生成的统计计时器和字节计数统计信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | 事件名 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | 这些列聚合所有操作 |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | 这些列聚合所有接收操作(RECV,RECVFROM和RECVMSG) |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_READ | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | 这些列聚合所有发送操作(SEND,SENDTO和SENDMSG) |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_MISC | bigint(20) unsigned | NO | NULL | 这些列汇总了所有其他套接字操作,如CONNECT,LISTEN,ACCEPT,CLOSE和SHUTDOWN。这些操作没有字节计数 |
SUM_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_MISC | bigint(20) unsigned | NO | NULL |
socket_summary_by_instance
对于每个套接字实例的所有套接字I / O操作,wait / io / socket / *工具生成的聚合计时器和字节计数统计信息。当连接终止时,对应于它的socket_summary_by_instance中的行将被删除。
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | 指示套接字的类:client_connection,server_tcpip_socket,server_unix_socket。该列可以分组,以隔离客户端活动与服务器侦听套接字的活动 |
OBJECT_INSTANCE_BEGIN | bigint(20) unsigned | NO | NULL | 内存地址 |
COUNT_STAR | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WAIT | bigint(20) unsigned | NO | NULL | |
COUNT_READ | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_READ | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_READ | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_READ | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_READ | bigint(20) unsigned | NO | NULL | |
COUNT_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_WRITE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_WRITE | bigint(20) unsigned | NO | NULL | |
COUNT_MISC | bigint(20) unsigned | NO | NULL | |
SUM_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MIN_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
AVG_TIMER_MISC | bigint(20) unsigned | NO | NULL | |
MAX_TIMER_MISC | bigint(20) unsigned | NO | NULL |
Memory Summaries
memory_summary_by_account_by_event_name
memory_summary_by_account_by_event_name具有USER,HOST和EVENT_NAME列。每行总结了给定帐户(用户和主机组合)和事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_ALLOC | bigint(20) unsigned | NO | NULL | 调用内存分配函数的总数 |
COUNT_FREE | bigint(20) unsigned | NO | NULL | 调用无内存函数的总数 |
SUM_NUMBER_OF_BYTES_ALLOC | bigint(20) unsigned | NO | NULL | 分配的内存块的聚合大小 |
SUM_NUMBER_OF_BYTES_FREE | bigint(20) unsigned | NO | NULL | 释放的内存块的聚合大小 |
LOW_COUNT_USED | bigint(20) | NO | NULL | 尚未释放的当前分配的块的总数。这是一个方便列,等于COUNT_ALLOC - COUNT_FREE |
CURRENT_COUNT_USED | bigint(20) | NO | NULL | 当前分配的内存块的汇总大小尚未释放。这是一个方便列,等于SUM_NUMBER_OF_BYTES_ALLOC - SUM_NUMBER_OF_BYTES_FREE |
HIGH_COUNT_USED | bigint(20) | NO | NULL | 对应于CURRENT_COUNT_USED列的低水位线 |
LOW_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | 对应于CURRENT_COUNT_USED列的高水位线 |
CURRENT_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | 对应于CURRENT_NUMBER_OF_BYTES_USED列的低水位标记 |
HIGH_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | 对应于CURRENT_NUMBER_OF_BYTES_USED列的高水位标记 |
使用说明
对于每个线程的统计信息,适用以下规则:
当分配大小为N的检测内存块时,性能模式会对内存汇总表列进行这些更新:
COUNT_ALLOC:增加1
CURRENT_COUNT_USED:增加1
HIGH_COUNT_USED:如果CURRENT_COUNT_USED是新的最大值,则会增加
SUM_NUMBER_OF_BYTES_ALLOC:增加N
CURRENT_NUMBER_OF_BYTES_USED:增加了N
HIGH_NUMBER_OF_BYTES_USED:如果CURRENT_NUMBER_OF_BYTES_USED是新的最高值,则会增加N
当取消分配检测到的内存块时,性能模式会对内存汇总表列进行这些更新:
COUNT_FREE:增加1
CURRENT_COUNT_USED:减少1
LOW_COUNT_USED:如果CURRENT_COUNT_USED是新的最低值,则减少
SUM_NUMBER_OF_BYTES_FREE:增加N
CURRENT_NUMBER_OF_BYTES_USED:减少N
LOW_NUMBER_OF_BYTES_USED:如果CURRENT_NUMBER_OF_BYTES_USED是新的最低值,则减少N
对于较高级别的聚合(全局,按帐户,按用户,按主机),相同的规则适用于低和高水位的预期。
LOW_COUNT_USED和LOW_NUMBER_OF_BYTES_USED是较低的估算值。性能架构报告的值保证小于或等于运行时有效使用的最低存储量或大小。
HIGH_COUNT_USED和HIGH_NUMBER_OF_BYTES_USED是较高的估算值。性能架构报告的值保证大于或等于运行时有效使用的内存的最高计数或大小。
对于除memory_summary_global_by_event_name之外的汇总表中的较低估计值,如果内存所有权在线程之间传输,则值可能为负。
这里是一个估计计算的例子。但请注意,估计实施可能会发生变化:
线程1在执行期间使用1MB到2MB的内存,由memory_summary_by_thread_by_event_name表的LOW_NUMBER_OF_BYTES_USED和HIGH_NUMBER_OF_BYTES_USED列报告。
线程2在执行期间使用范围从10MB到12MB的内存,同样报告。
当这两个线程属于相同的用户帐户时,每个帐户的摘要估计这个帐户使用的内存在11MB到14MB之间。也就是说,较高级别聚合的LOW_NUMBER_OF_BYTES_USED是每个LOW_NUMBER_OF_BYTES_USED(假设最差情况)的总和。同样,较高级别汇总的HIGH_NUMBER_OF_BYTES_USED是每个HIGH_NUMBER_OF_BYTES_USED(假设最差情况)的总和。
11MB是一个较低的估计,只有当两个线程同时达到低使用标记时才能发生。
14MB是一个更高的估计,只有当两个线程同时达到高使用标记时才能发生。
该帐户的实际内存使用量可能在11.5MB到13.5MB之间。
memory_summary_by_host_by_event_name
memory_summary_by_host_by_event_name包含HOST和EVENT_NAME列。每行总结给定主机和事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_ALLOC | bigint(20) unsigned | NO | NULL | |
COUNT_FREE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_ALLOC | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_FREE | bigint(20) unsigned | NO | NULL | |
LOW_COUNT_USED | bigint(20) | NO | NULL | |
CURRENT_COUNT_USED | bigint(20) | NO | NULL | |
HIGH_COUNT_USED | bigint(20) | NO | NULL | |
LOW_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
CURRENT_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
HIGH_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL |
memory_summary_by_thread_by_event_name
memory_summary_by_thread_by_event_name具有THREAD_ID和EVENT_NAME列。每行总结给定线程和事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_ALLOC | bigint(20) unsigned | NO | NULL | |
COUNT_FREE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_ALLOC | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_FREE | bigint(20) unsigned | NO | NULL | |
LOW_COUNT_USED | bigint(20) | NO | NULL | |
CURRENT_COUNT_USED | bigint(20) | NO | NULL | |
HIGH_COUNT_USED | bigint(20) | NO | NULL | |
LOW_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
CURRENT_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
HIGH_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL |
memory_summary_by_user_by_event_name
memory_summary_by_user_by_event_name具有USER和EVENT_NAME列。每行总结给定用户和事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_ALLOC | bigint(20) unsigned | NO | NULL | |
COUNT_FREE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_ALLOC | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_FREE | bigint(20) unsigned | NO | NULL | |
LOW_COUNT_USED | bigint(20) | NO | NULL | |
CURRENT_COUNT_USED | bigint(20) | NO | NULL | |
HIGH_COUNT_USED | bigint(20) | NO | NULL | |
LOW_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
CURRENT_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
HIGH_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL |
memory_summary_global_by_event_name
memory_summary_global_by_event_name有一个EVENT_NAME列。每行总结给定事件名称的事件
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
EVENT_NAME | varchar(128) | NO | NULL | |
COUNT_ALLOC | bigint(20) unsigned | NO | NULL | |
COUNT_FREE | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_ALLOC | bigint(20) unsigned | NO | NULL | |
SUM_NUMBER_OF_BYTES_FREE | bigint(20) unsigned | NO | NULL | |
LOW_COUNT_USED | bigint(20) | NO | NULL | |
CURRENT_COUNT_USED | bigint(20) | NO | NULL | |
HIGH_COUNT_USED | bigint(20) | NO | NULL | |
LOW_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
CURRENT_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL | |
HIGH_NUMBER_OF_BYTES_USED | bigint(20) | NO | NULL |
Status Variable Summaries
status_by_user
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
VARIABLE_NAME | varchar(64) | NO | NULL | |
VARIABLE_VALUE | varchar(1024) | YES | NULL |
status_by_account
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
USER | char(32) | YES | NULL | |
HOST | char(60) | YES | NULL | |
VARIABLE_NAME | varchar(64) | NO | NULL | |
VARIABLE_VALUE | varchar(1024) | YES | NULL |
status_by_host
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
HOST | char(60) | YES | NULL | |
VARIABLE_NAME | varchar(64) | NO | NULL | |
VARIABLE_VALUE | varchar(1024) | YES | NULL |
status_by_thread
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | |
VARIABLE_NAME | varchar(64) | NO | NULL | |
VARIABLE_VALUE | varchar(1024) | YES | NULL |
14.Miscellaneous Tables
performance_timers
系统支持的统计时间单位
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
TIMER_NAME | enum(‘CYCLE’, ‘NANOSECOND’, ‘MICROSECOND’, ‘MILLISECOND’,’TICK’) |
NO | NULL | 可用timer的名称。 CYCLE是指基于CPU(处理器)周期计数器的定时器。 您可以使用的setup_timers中的计时器是其他列中没有NULL的计时器。 如果与给定的计时器名称相关联的值为NULL,则该平台不支持该定时器。 |
TIMER_FREQUENCY | bigint(20) | YES | NULL | 表示每秒的计时器数量单位。对于CYCLE计时器,频率相当于cpu转速。该值相当于2.4GHZ的cpu.其他的计时器是基于秒的固定分数 |
TIMER_RESOLUTION | bigint(20) | YES | NULL | 定时器值一次增加的定时器单元数 |
TIMER_OVERHEAD | bigint(20) | YES | NULL | 给定定时器获得一个时序的最小开销周期数 |
Threads
服务线程信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
THREAD_ID | bigint(20) unsigned | NO | NULL | 唯一线程标识符 |
NAME | varchar(128) | NO | NULL | 线程名 |
TYPE | varchar(10) | NO | NULL | 线程类型,前台后台 |
PROCESSLIST_ID | bigint(20) unsigned | YES | NULL | INFORMATION_SCHEMA.PROCESSLIST表显示的线程 |
PROCESSLIST_USER | varchar(32) | YES | NULL | 关联到一个前台线程的用户,后台线程为NULL |
PROCESSLIST_HOST | varchar(60) | YES | NULL | 关联到前台线程一个客户端的主机名, 后台线程为NULL |
PROCESSLIST_DB | varchar(64) | YES | NULL | 线程默认的数据库,或NULL如果没有 |
PROCESSLIST_COMMAND | varchar(16) | YES | NULL | 线程正在执行的命令的类型 |
PROCESSLIST_TIME | bigint(20) | YES | NULL | 线程已经在其当前状态持续的时间,单位秒 |
PROCESSLIST_STATE | varchar(64) | YES | NULL | 动作、事件或状态表明线程正在做什么 |
PROCESSLIST_INFO | longtext | YES | NULL | 线程正在执行的语句,或者null,如果没有执行任何语句 |
PARENT_THREAD_ID | bigint(20) unsigned | YES | NULL | 如果这个线程是一个的子线程(源自另一个线程),这是产生子线程的THREAD_ID值 |
ROLE | varchar(64) | YES | NULL | 未使用 |
INSTRUMENTED | enum(‘YES’,’NO’) | NO | NULL | 线程是否检测,这个不影响threads表,这只影响线程执行事件是否被检测 |
HISTORY | enum(‘YES’,’NO’) | NO | NULL | |
CONNECTION_TYPE | varchar(16) | YES | NULL | |
THREAD_OS_ID | bigint(20) unsigned | YES | NULL |
示例
mysql> show processlist;
+-----+------+-----------+--------------------+---------+------+----------+-----------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+--------------------+---------+------+----------+-----------------------------------------+
| 221 | root | localhost | performance_schema | Query | 0 | starting | show processlist |
| **222 | root | localhost | lt | Query | 3 | updating | update test set col2='a' where col1='a' |**
| 223 | root | localhost | lt | Sleep | 6 | | NULL |
+-----+------+-----------+--------------------+---------+------+----------+-----------------------------------------+
3 rows in set (0.00 sec)
host_cache
来自内部主机缓存信息
Field | Type | Null | Default | 备注 |
---|---|---|---|---|
IP | varchar(64) | NO | NULL | |
HOST | varchar(255) | YES | NULL | |
HOST_VALIDATED | enum(‘YES’,’NO’) | NO | NULL | |
SUM_CONNECT_ERRORS | bigint(20) | NO | NULL | |
COUNT_HOST_BLOCKED_ERRORS | bigint(20) | NO | NULL | |
COUNT_NAMEINFO_TRANSIENT_ERRORS | bigint(20) | NO | NULL | |
COUNT_NAMEINFO_PERMANENT_ERRORS | bigint(20) | NO | NULL | |
COUNT_FORMAT_ERRORS | bigint(20) | NO | NULL | |
COUNT_ADDRINFO_TRANSIENT_ERRORS | bigint(20) | NO | NULL | |
COUNT_ADDRINFO_PERMANENT_ERRORS | bigint(20) | NO | NULL | |
COUNT_FCRDNS_ERRORS | bigint(20) | NO | NULL | |
COUNT_HOST_ACL_ERRORS | bigint(20) | NO | NULL | |
COUNT_NO_AUTH_PLUGIN_ERRORS | bigint(20) | NO | NULL | |
COUNT_AUTH_PLUGIN_ERRORS | bigint(20) | NO | NULL | |
COUNT_HANDSHAKE_ERRORS | bigint(20) | NO | NULL | |
COUNT_PROXY_USER_ERRORS | bigint(20) | NO | NULL | |
COUNT_PROXY_USER_ACL_ERRORS | bigint(20) | NO | NULL | |
COUNT_AUTHENTICATION_ERRORS | bigint(20) | NO | NULL | |
COUNT_SSL_ERRORS | bigint(20) | NO | NULL | |
COUNT_MAX_USER_CONNECTIONS_ERRORS | bigint(20) | NO | NULL | |
COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS | bigint(20) | NO | NULL | |
COUNT_DEFAULT_DATABASE_ERRORS | bigint(20) | NO | NULL | |
COUNT_INIT_CONNECT_ERRORS | bigint(20) | NO | NULL | |
COUNT_LOCAL_ERRORS | bigint(20) | NO | NULL | |
COUNT_UNKNOWN_ERRORS | bigint(20) | NO | NULL | |
FIRST_SEEN | timestamp | NO | 0000-00-00 00:00:00 | |
LAST_SEEN | timestamp | NO | 0000-00-00 00:00:00 | |
FIRST_ERROR_SEEN | timestamp | YES | 0000-00-00 00:00:00 | |
LAST_ERROR_SEEN | timestamp | YES | 0000-00-00 00:00:00 |
附录1:性能模式状态变量具有以下含义
Performance_schema_accounts_lost | 一行无法添加到帐户表中的次数,因为它已满 |
---|---|
Performance_schema_cond_classes_lost | 无法装载多少条件仪器 |
Performance_schema_cond_instances_lost | 无法创建多少条件仪器实例 |
Performance_schema_digest_lost | 在events_statements_summary_by_digest表中无法检测的摘要实例的数量。如果performance_schema_digests_size的值太小,那么这可能非零。 |
Performance_schema_file_classes_lost | 无法加载多少文件文件 |
Performance_schema_file_handles_lost | 无法打开多少文件工具实例 |
Performance_schema_file_instances_lost | 无法创建多少个文件工具实例 |
Performance_schema_hosts_lost | 一行无法添加到hosts表的次数,因为它已满 |
Performance_schema_index_stat_lost | 统计数据丢失的索引数。如果performance_schema_max_index_stat的值太小,这可能非零 |
Performance_schema_locker_lost | 由于以下条件,有多少事件“丢失”或未记录:事件是递归的(例如,等待A导致等待B,这导致在C上等待)。嵌套事件栈的深度大于实现强加的限制。性能模式记录的事件不是递归的,因此该变量应始终为0。 |
Performance_schema_memory_classes_lost | 内存仪器无法加载的次数 |
Performance_schema_metadata_lock_lost | metadata_locks表中无法检测的元数据锁的数量。如果performance_schema_max_metadata_locks的值太小,这可能非零 |
Performance_schema_mutex_classes_lost | 无法加载多少互斥锁数量 |
Performance_schema_mutex_instances_lost | 无法创建多少互斥锁实例 |
Performance_schema_nested_statement_lost | 统计信息丢失的存储程序语句数。如果performance_schema_max_statement_stack的值太小,这可能非零 |
Performance_schema_prepared_statements_lost | 在prepare_statements_instances表中无法检测到的准备语句数。如果performance_schema_max_prepared_statements_instances的值太小,这可能非零 |
Performance_schema_program_lost | 统计信息丢失的存储程序数。如果performance_schema_max_program_instances的值太小,这可能非零 |
Performance_schema_rwlock_classes_lost | 有多少读写锁无法加载 |
Performance_schema_rwlock_instances_lost | 有多少读写锁实例无法加载 |
Performance_schema_session_connect_attrs_lost | 发生连接属性截断的连接数。对于给定的连接,如果客户端发送聚合大小较大的连接属性键/值对大于由performance_schema_session_connect_attrs_size系统变量的值允许的预留存储空间,则性能模式会截断属性数据并增加Performance_schema_session_connect_attrs_lost。如果此值不为零,则可能希望将performance_schema_session_connect_attrs_size设置为较大的值 |
Performance_schema_socket_classes_lost | 无法装载多少个SOCKET仪器 |
Performance_schema_socket_instances_lost | 无法装载多少个SOCKET实例仪器 |
Performance_schema_stage_classes_lost | |
Performance_schema_statement_classes_lost | |
Performance_schema_table_handles_lost | 无法打开多少表句柄实例。如果performance_schema_max_table_handles的值太小,那么这可以非零 |
Performance_schema_table_instances_lost | |
Performance_schema_table_instances_lost | 锁统计信息丢失的表数。如果performance_schema_max_table_lock_stat的值太小,这可能非零 |
Performance_schema_thread_classes_lost | |
Performance_schema_thread_classes_lost | 线程表中无法检测的线程实例数。如果performance_schema_max_thread_instances的值太小,这可能非零 |
Performance_schema_users_lost | 一行无法添加到users表的次数,因为它已满 |