创建在服务器上运行的语句的报告。视图是根据整体和/或增量活动计算的。
sql_log_bin此过程通过操纵系统变量
的会话值在其执行期间禁用二进制日志记录
。这是一个受限操作,因此该过程需要足够的权限来设置受限会话变量。请参阅
第 5.1.8.1 节,“系统变量权限”。
in_action ENUM('snapshot', 'overall', 'delta', 'create_tmp', 'create_table', 'save', 'cleanup'):要采取的行动。这些值是允许的:snapshot:存储快照。默认是对 Performance Schemaevents_statements_summary_by_digest表的当前内容进行快照。通过设置in_table,可以覆盖复制指定表的内容。快照存储在sys架构tmp_digests临时表中。overall:根据指定的表的内容生成分析in_table。对于整体分析,in_table可以NOW()使用全新的快照。这会覆盖现有快照。用于NULL使用in_table现有快照。如果in_table是NULL且不存在快照,则创建一个新快照。in_views参数和statement_performance_analyzer.limit配置选项会影响此过程的操作 。delta:生成增量分析。增量是在指定的引用表in_table和必须存在的快照之间计算的。此操作使用sys架构tmp_digests_delta临时表。in_views参数和statement_performance_analyzer.limit配置选项会影响此过程的操作 。create_table:创建一个适合存储快照供以后使用(例如,用于计算增量)的常规表。create_tmp:创建一个适合存储快照以备后用(例如,用于计算增量)的临时表。save:将快照保存在指定的表中in_table。该表必须存在并且具有正确的结构。如果不存在快照,则会创建一个新快照。cleanup:删除用于快照和增量的临时表。
in_table VARCHAR(129):用于参数指定的一些动作的表in_action参数。使用格式db_name.tbl_name或tbl_name不使用任何反引号 (`) 标识符引号字符。.数据库和表名称不支持 句点 ( )。in_table每个值的值 的含义in_action在各个值的描述中有详细in_action说明。in_views SET ('with_runtimes_in_95th_percentile', 'analysis', 'with_errors_or_warnings', 'with_full_table_scans', 'with_sorting', 'with_temp_tables', 'custom'):要包括哪些视图。该参数是一个SET值,因此可以包含多个视图名称,以逗号分隔。默认包括除 之外的所有视图custom。允许以下值:with_runtimes_in_95th_percentile: 使用statements_with_runtimes_in_95th_percentile视图。analysis: 使用statement_analysis视图。with_errors_or_warnings: 使用statements_with_errors_or_warnings视图。with_full_table_scans: 使用statements_with_full_table_scans视图。with_sorting: 使用statements_with_sorting视图。with_temp_tables: 使用statements_with_temp_tables视图。custom:使用自定义视图。必须使用statement_performance_analyzer.view配置选项指定此视图以命名查询或现有视图。
statement_performance_analyzer()
可以使用以下配置选项或其相应的用户定义变量修改操作(请参阅
第 26.4.2.1 节,“sys_config 表”):
debug,@sys.debug如果此选项为
ON,则产生调试输出。默认值为OFF。statement_performance_analyzer.limit,@sys.statement_performance_analyzer.limit为没有内置限制的视图返回的最大行数。默认值为 100。
statement_performance_analyzer.view,@sys.statement_performance_analyzer.view要使用的自定义查询或视图。如果选项值包含空格,则将其解释为查询。
events_statements_summary_by_digest否则,它必须是查询性能模式表的现有视图的名称 。 如果配置选项大于 0 ,则查询或视图定义中不能有任何LIMIT子句。 如果指定视图,请使用与参数相同的格式。默认值为 (未定义自定义视图)。statement_performance_analyzer.limitin_tableNULL
要创建包含自上次截断以来第 95 个百分位的查询
events_statements_summary_by_digest
并具有一分钟增量周期的报告:
创建一个临时表来存储初始快照。
创建初始快照。
将初始快照保存在临时表中。
等一分钟。
创建一个新的快照。
根据新快照执行分析。
根据初始快照和新快照之间的增量执行分析。
mysql> CALL sys.statement_performance_analyzer('create_tmp', 'mydb.tmp_digests_ini', NULL);
Query OK, 0 rows affected (0.08 sec)
mysql> CALL sys.statement_performance_analyzer('snapshot', NULL, NULL);
Query OK, 0 rows affected (0.02 sec)
mysql> CALL sys.statement_performance_analyzer('save', 'mydb.tmp_digests_ini', NULL);
Query OK, 0 rows affected (0.00 sec)
mysql> DO SLEEP(60);
Query OK, 0 rows affected (1 min 0.00 sec)
mysql> CALL sys.statement_performance_analyzer('snapshot', NULL, NULL);
Query OK, 0 rows affected (0.02 sec)
mysql> CALL sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile');
+-----------------------------------------+
| Next Output |
+-----------------------------------------+
| Queries with Runtime in 95th Percentile |
+-----------------------------------------+
1 row in set (0.05 sec)
...
mysql> CALL sys.statement_performance_analyzer('delta', 'mydb.tmp_digests_ini', 'with_runtimes_in_95th_percentile');
+-----------------------------------------+
| Next Output |
+-----------------------------------------+
| Queries with Runtime in 95th Percentile |
+-----------------------------------------+
1 row in set (0.03 sec)
...使用全表扫描创建第 95 个百分位数查询和前 10 个查询的总体报告:
mysql> CALL sys.statement_performance_analyzer('snapshot', NULL, NULL);
Query OK, 0 rows affected (0.01 sec)
mysql> SET @sys.statement_performance_analyzer.limit = 10;
Query OK, 0 rows affected (0.00 sec)
mysql> CALL sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile,with_full_table_scans');
+-----------------------------------------+
| Next Output |
+-----------------------------------------+
| Queries with Runtime in 95th Percentile |
+-----------------------------------------+
1 row in set (0.01 sec)
...
+-------------------------------------+
| Next Output |
+-------------------------------------+
| Top 10 Queries with Full Table Scan |
+-------------------------------------+
1 row in set (0.09 sec)
...使用自定义视图显示按总执行时间排序的前 10 个查询,使用 Linux 中的 watch命令每分钟刷新一次视图:
mysql> CREATE OR REPLACE VIEW mydb.my_statements AS
SELECT sys.format_statement(DIGEST_TEXT) AS query,
SCHEMA_NAME AS db,
COUNT_STAR AS exec_count,
sys.format_time(SUM_TIMER_WAIT) AS total_latency,
sys.format_time(AVG_TIMER_WAIT) AS avg_latency,
ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,
ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,
ROUND(IFNULL(SUM_ROWS_AFFECTED / NULLIF(COUNT_STAR, 0), 0)) AS rows_affected_avg,
DIGEST AS digest
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC;
Query OK, 0 rows affected (0.10 sec)
mysql> CALL sys.statement_performance_analyzer('create_table', 'mydb.digests_prev', NULL);
Query OK, 0 rows affected (0.10 sec)
$> watch -n 60 "mysql sys --table -e \"
> SET @sys.statement_performance_analyzer.view = 'mydb.my_statements';
> SET @sys.statement_performance_analyzer.limit = 10;
> CALL statement_performance_analyzer('snapshot', NULL, NULL);
> CALL statement_performance_analyzer('delta', 'mydb.digests_prev', 'custom');
> CALL statement_performance_analyzer('save', 'mydb.digests_prev', NULL);
> \""
Every 60.0s: mysql sys --table -e " ... Mon Dec 22 10:58:51 2014
+----------------------------------+
| Next Output |
+----------------------------------+
| Top 10 Queries Using Custom View |
+----------------------------------+
+-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+
| query | db | exec_count | total_latency | avg_latency | rows_sent_avg | rows_examined_avg | rows_affected_avg | digest |
+-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+
...