使用performance_schema

可以使用performance_schema在运行时检查服务器的内部执行情况。
performance_schema中有许多影响服务器计时的事件消费者,例如函数调用、对操作系统的等待、
SQL语句执行中的某个阶段(例如解析或排序)、一条语句或一组语句。所有收集的信息都存储在
performance_schema中,不会被复制。
默认情况下,performance_schema是启用的;如果要禁用它,可以在my.cnf文件中设置
performance_schema = OFF。默认情况下,并非所有的消费者和计数器都处于启用状态;可以通过更
新performance_schema.setup_instruments和performance_schema.setup_consumers表来关闭/打
开它们。
如何操作
如何使用performance_schema呢?
启用/禁用performance_schema
要禁用performance_schema,可以修改配置文件
启用/禁用消费者和计数器
可以在setup_consumers表中看到可用的消费者列表,如下所示:
如果要启用events_waits_current:
[root@www ~]# vim /etc/my.cnf
[mysqld]
performance_schema = 0
mysql> select * from performance_schema.setup_consumers;
±---------------------------------±--------+
| NAME | ENABLED |
±---------------------------------±--------+
| events_stages_current | NO |
| events_stages_history | NO |
| events_stages_history_long | NO |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | NO |
| events_transactions_current | YES |
| events_transactions_history | YES |
| events_transactions_history_long | NO |
| events_waits_current | NO |
| events_waits_history | NO |
| events_waits_history_long | NO |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
±---------------------------------±--------+
15 rows in set (0.00 sec)

同样,可以从setup_instruments表启用/禁用计数器,大约有1182种计数器(视MySQL版本而定):
performance_schema表
performance_schema中有5种主要的表类型。它们是当前事件表、事件历史表、事件摘要表、对象实
例表和设置(配置)表:
mysql> UPDATE performance_schema.setup_consumers SET ENABLED=‘YES’
-> WHERE NAME=‘events_waits_current’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT NAME, ENABLED, TIMED FROM performance_schema.setup_instruments
LIMIT 10;
±--------------------------------------------------------±--------±------+
| NAME | ENABLED | TIMED |
±--------------------------------------------------------±--------±------+
| wait/synch/mutex/pfs/LOCK_pfs_share_list | NO | NO |
| wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit_queue | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_done | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_flush_queue | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_log | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_binlog_end_pos | NO | NO |
| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_sync | NO | NO |
±--------------------------------------------------------±--------±------+
10 rows in set (0.00 sec)
mysql> show tables like ‘%current%’;
±-----------------------------------------+
| Tables_in_performance_schema (%current%) |
±-----------------------------------------+
| events_stages_current |
| events_statements_current |
| events_transactions_current |
| events_waits_current |
±-----------------------------------------+
4 rows in set (0.00 sec)
mysql> show tables like ‘%history%’;
±-----------------------------------------+
| Tables_in_performance_schema (%history%) |
±-----------------------------------------+
| events_stages_history |
| events_stages_history_long |
| events_statements_history |
| events_statements_history_long |
| events_transactions_history |
| events_transactions_history_long |
| events_waits_history |
| events_waits_history_long |
±-----------------------------------------+
8 rows in set (0.00 sec)
间隔线_______________________________________
mysql> show tables like ‘%summary%’;
±-----------------------------------------------------+
| Tables_in_performance_schema (%summary%) |
±-----------------------------------------------------+
| events_errors_summary_by_account_by_error |
| events_errors_summary_by_host_by_error |
| events_errors_summary_by_thread_by_error |
| events_errors_summary_by_user_by_error |
| events_errors_summary_global_by_error |
| events_stages_summary_by_account_by_event_name |
| events_stages_summary_by_host_by_event_name |
| events_stages_summary_by_thread_by_event_name |
| events_stages_summary_by_user_by_event_name |
| events_stages_summary_global_by_event_name |
| events_statements_summary_by_account_by_event_name |
| events_statements_summary_by_digest |
| events_statements_summary_by_host_by_event_name |
| events_statements_summary_by_program |
| events_statements_summary_by_thread_by_event_name |
| events_statements_summary_by_user_by_event_name |
| events_statements_summary_global_by_event_name |
| events_transactions_summary_by_account_by_event_name |
| events_transactions_summary_by_host_by_event_name |
| events_transactions_summary_by_thread_by_event_name |
| events_transactions_summary_by_user_by_event_name |
| events_transactions_summary_global_by_event_name |
| events_waits_summary_by_account_by_event_name |
| events_waits_summary_by_host_by_event_name |
| events_waits_summary_by_instance |
| events_waits_summary_by_thread_by_event_name |
| events_waits_summary_by_user_by_event_name |
| events_waits_summary_global_by_event_name |
| file_summary_by_event_name |
| file_summary_by_instance |
| memory_summary_by_account_by_event_name |
| memory_summary_by_host_by_event_name |
| memory_summary_by_thread_by_event_name |
| memory_summary_by_user_by_event_name |
| memory_summary_global_by_event_name |
| objects_summary_global_by_type |
| socket_summary_by_event_name |
| socket_summary_by_instance |
| table_io_waits_summary_by_index_usage |
| table_io_waits_summary_by_table |
| table_lock_waits_summary_by_table |
±-----------------------------------------------------+
41 rows in set (0.00 sec)
mysql> show tables like ‘%setup%’;
±---------------------------------------+
| Tables_in_performance_schema (%setup%) |
±---------------------------------------+
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_threads |

如果要找出被访问最多的文件:
或者想知道哪一个文件的写入时间最长:
可以使用events_statements_summary_by_digest表来获取查询报告,就像对pt-query-digest所做的
那样。按所花费的时间列出排名靠前的查询:
±---------------------------------------+
5 rows in set (0.00 sec)
mysql> SELECT EVENT_NAME, COUNT_STAR from file_summary_by_event_name
-> ORDER BY count_star DESC LIMIT 10;
±-------------------------------------±-----------+
| EVENT_NAME | COUNT_STAR |
±-------------------------------------±-----------+
| wait/io/file/innodb/innodb_data_file | 3249 |
| wait/io/file/sql/query_log | 183 |
| wait/io/file/innodb/innodb_log_file | 92 |
| wait/io/file/innodb/innodb_temp_file | 80 |
| wait/io/file/sql/binlog_index | 21 |
| wait/io/file/sql/binlog | 20 |
| wait/io/file/sql/casetest | 15 |
| wait/io/file/csv/metadata | 12 |
| wait/io/file/sql/slow_log | 12 |
| wait/io/file/csv/data | 6 |
±-------------------------------------±-----------+
10 rows in set (0.05 sec)
mysql> SELECT EVENT_NAME, SUM_TIMER_WRITE FROM file_summary_by_event_name
-> ORDER BY SUM_TIMER_WRITE DESC LIMIT 10;
±-------------------------------------±----------------+
| EVENT_NAME | SUM_TIMER_WRITE |
±-------------------------------------±----------------+
| wait/io/file/innodb/innodb_data_file | 8598755323 |
| wait/io/file/innodb/innodb_log_file | 4102550995 |
| wait/io/file/sql/query_log | 1764069288 |
| wait/io/file/innodb/innodb_temp_file | 1454021094 |
| wait/io/file/sql/slow_log | 140477337 |
| wait/io/file/sql/binlog | 27573957 |
| wait/io/file/sql/pid | 9900549 |
| wait/io/file/sql/binlog_cache | 0 |
| wait/io/file/sql/relaylog | 0 |
| wait/io/file/sql/relaylog_cache | 0 |
±-------------------------------------±----------------+
10 rows in set (0.00 sec)

按执行次数列出排名靠前的查询:

mysql> SELECT SCHEMA_NAME,digest, digest_text,
round(sum_timer_wait/1000000000000,6)
-> as avg_time, count_star FROM events_statements_summary_by_digest
-> ORDER BY sum_timer_wait DESC LIMIT 1\G
*************************** 1. row ***************************
SCHEMA_NAME: employees
digest: e7099bc0313e71566cdcbf0f4fedd9dee2da121c3d2c30762979ce49fad7da64
digest_text: SELECT first_name , last_name FROM employees WHERE
hire_date > ?
avg_time: 0.444007
count_star: 4
1 row in set (0.00 sec)

按执行次数列出排名靠前的查询:
mysql> SELECT SCHEMA_NAME,digest, digest_text,
round(sum_timer_wait/1000000000000,6)
-> as avg_time, count_star FROM events_statements_summary_by_digest
-> ORDER BY count_star DESC LIMIT 1\G
*************************** 1. row ***************************
SCHEMA_NAME: employees
digest: 230e50b71157a47e34c64f86d958d304e42cc8bad0d5a345f7f60672da38222c
digest_text: SHOW VARIABLES LIKE ?
avg_time: 0.013246
count_star: 10
1 row in set (0.00 sec)

假设要查找特定查询的统计信息,可以使用performance_schema检查所有统计信息,而不是依赖于
mysqlslap基准数据:

mysql> SELECT * FROM events_statements_summary_by_digest
-> WHERE DIGEST_TEXT LIKE ‘%SELECT%employees%’ LIMIT 1\G
*************************** 1. row ***************************
SCHEMA_NAME: employees
DIGEST:
e7099bc0313e71566cdcbf0f4fedd9dee2da121c3d2c30762979ce49fad7da64
DIGEST_TEXT: SELECT first_name , last_name FROM employees
WHERE hire_date > ?
COUNT_STAR: 4
SUM_TIMER_WAIT: 444006679000
MIN_TIMER_WAIT: 65428428000
AVG_TIMER_WAIT: 111001669000
MAX_TIMER_WAIT: 173988118000
SUM_LOCK_TIME: 787000000
SUM_ERRORS: 0
SUM_WARNINGS: 0
SUM_ROWS_AFFECTED: 0
SUM_ROWS_SENT: 373688
SUM_ROWS_EXAMINED: 1200096
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: 4

SUM_SORT_MERGE_PASSES: 0
SUM_SORT_RANGE: 0
SUM_SORT_ROWS: 0
SUM_SORT_SCAN: 0
SUM_NO_INDEX_USED: 4
SUM_NO_GOOD_INDEX_USED: 0
FIRST_SEEN: 2019-10-06 16:21:13.627844
LAST_SEEN: 2019-10-06 16:56:06.412642
QUANTILE_95: 181970085861
QUANTILE_99: 181970085861
QUANTILE_999: 181970085861
QUERY_SAMPLE_TEXT: select first_name,last_name from employees where
hire_date > ‘1985-01-01’
QUERY_SAMPLE_SEEN: 2019-10-06 16:56:06.412642
QUERY_SAMPLE_TIMER_WAIT: 131864014000
1 row in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/wangboyujiayou/article/details/106396759
今日推荐