MySQL8-中文参考-五十-
MySQL8 中文参考(五十)
30.4.2 sys 模式的表和触发器
30.4.2.1 sys_config 表
30.4.2.2 sys_config_insert_set_user 触发器
30.4.2.3 sys_config_update_set_user 触发器
以下章节描述了sys 模式的表和触发器。
30.4.2.1 sys_config表
此表包含sys模式配置选项,每个选项一行。通过更新此表进行的配置更改会跨客户端会话和服务器重启持久保存。
sys_config表具有以下列:
-
variable配置选项名称。
-
value配置选项值。
-
set_time最近修改行的时间戳。
-
set_by最近修改行的帐户。如果自
sys模式安装以来未更改行,则值为NULL。
为了最小化从sys_config表直接读取的次数,sys模式函数会检查具有相应名称的用户定义变量,该变量是具有相同名称加上@sys.前缀的用户定义变量。(例如,与diagnostics.include_raw选项对应的变量是@sys.diagnostics.include_raw。)如果用户定义变量存在于当前会话中且非NULL,函数会优先使用其值,而不是sys_config表中的值。否则,函数会读取并使用表中的值。在后一种情况下,调用函数通常还会将相应的用户定义变量设置为表中的值,以便同一会话中对配置选项的进一步引用使用该变量,无需再次读取表。
例如,statement_truncate_len选项控制format_statement() Function")函数返回的语句的最大长度。默认值为 64。要临时将值更改为 32 以用于当前会话,请设置相应的@sys.statement_truncate_len用户定义变量:
mysql> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
mysql> SET @sys.statement_truncate_len = 32;
mysql> SELECT sys.format_statement(@stmt);
+-----------------------------------+
| sys.format_statement(@stmt) |
+-----------------------------------+
| SELECT variabl ... ROM sys_config |
+-----------------------------------+
会话中后续调用format_statement() Function")将继续使用用户定义变量值(32),而不是表中存储的值(64)。
要停止使用用户定义变量并恢复使用表中的值,请在会话中将变量设置为NULL:
mysql> SET @sys.statement_truncate_len = NULL;
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
或者,结束当前会话(导致用户定义变量不再存在)并开始新会话。
在sys_config表中描述的传统关系可以被利用来进行临时配置更改,这些更改在您的会话结束时结束。然而,如果您设置了一个用户定义变量,然后在同一会话中随后更改相应的表值,只要用户定义变量存在非NULL值,该会话中不会使用更改后的表值。(更改后的表值会在未分配用户定义变量的其他会话中使用。)
以下列表描述了sys_config表中的选项及相应的用户定义变量:
-
diagnostics.allow_i_s_tables,@sys.diagnostics.allow_i_s_tables如果此选项为
ON,则允许diagnostics()过程")过程在 Information SchemaTABLES表上执行表扫描。如果有许多表,这可能很昂贵。默认值为OFF。 -
diagnostics.include_raw,@sys.diagnostics.include_raw如果此选项为
ON,则diagnostics()过程")过程将包括从查询metrics视图获取的原始输出。默认值为OFF。 -
ps_thread_trx_info.max_length,@sys.ps_thread_trx_info.max_length由
ps_thread_trx_info()函数")函数生成的 JSON 输出的最大长度。默认值为 65535。 -
statement_performance_analyzer.limit,@sys.statement_performance_analyzer.limit为没有内置限制的视图返回的最大行数。(例如,
statements_with_runtimes_in_95th_percentile视图在某种意义上具有内置限制,它仅返回在第 95 百分位数中具有平均执行时间的语句。)默认值为 100。 -
statement_performance_analyzer.view,@sys.statement_performance_analyzer.viewstatement_performance_analyzer()Procedure") 过程要使用的自定义查询或视图(它本身被diagnostics()Procedure") 过程调用)。如果选项值包含空格,则将其解释为查询。否则,它必须是查询 Performance Schemaevents_statements_summary_by_digest表的现有视图的名称。如果statement_performance_analyzer.limit配置选项大于 0,则查询或视图定义中不能有LIMIT子句。默认值为NULL(未定义自定义视图)。 -
statement_truncate_len,@sys.statement_truncate_lenformat_statement()Function") 函数返回的语句的最大长度。超过此长度的语句将被截断。默认值为 64。
其他选项可以添加到 sys_config 表中。例如,diagnostics() Procedure") 和 execute_prepared_stmt() Procedure") 过程如果存在 debug 选项,则使用该选项,但默认情况下,此选项不是 sys_config 表的一部分,因为调试输出通常只是临时启用,通过设置相应的 @sys.debug 用户定义变量。要在不必在各个会话中设置该变量的情况下启用调试输出,将选项添加到表中:
mysql> INSERT INTO sys.sys_config (variable, value) VALUES('debug', 'ON');
要更改表中的调试设置,需要做两件事。首先,修改表中的值:
mysql> UPDATE sys.sys_config
SET value = 'OFF'
WHERE variable = 'debug';
其次,为了确保当前会话中的过程调用使用表中的更改值,将相应的用户定义变量设置为 NULL:
mysql> SET @sys.debug = NULL;
原文:
dev.mysql.com/doc/refman/8.0/en/sys-sys-config-insert-set-user.html
30.4.2.2 sys_config_insert_set_user 触发器
对于通过 INSERT 语句添加到 sys_config 表中的行,sys_config_insert_set_user 触发器将 set_by 列设置为当前用户。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-sys-config-update-set-user.html
30.4.2.3 sys_config_update_set_user 触发器
sys_config_update_set_user 触发器用于 sys_config 表,类似于 sys_config_insert_set_user 触发器,但用于 UPDATE 语句。
30.4.3 sys 模式视图
30.4.3.1 主机 host_summary 和 x$host_summary 视图
30.4.3.2 主机 host_summary_by_file_io 和 x$host_summary_by_file_io 视图
30.4.3.3 主机 host_summary_by_file_io_type 和 x$host_summary_by_file_io_type 视图
30.4.3.4 主机 host_summary_by_stages 和 x$host_summary_by_stages 视图
30.4.3.5 主机 host_summary_by_statement_latency 和 x$host_summary_by_statement_latency 视图
30.4.3.6 主机 host_summary_by_statement_type 和 x$host_summary_by_statement_type 视图
30.4.3.7 innodb_buffer_stats_by_schema 和 x$innodb_buffer_stats_by_schema 视图
30.4.3.8 innodb_buffer_stats_by_table 和 x$innodb_buffer_stats_by_table 视图
30.4.3.9 innodb_lock_waits 和 x$innodb_lock_waits 视图
30.4.3.10 IO 线程 io_by_thread_by_latency 和 x$io_by_thread_by_latency 视图
30.4.3.11 IO 全局 io_global_by_file_by_bytes 和 x$io_global_by_file_by_bytes 视图
30.4.3.12 IO 全局 io_global_by_file_by_latency 和 x$io_global_by_file_by_latency 视图
30.4.3.13 IO 全局 io_global_by_wait_by_bytes 和 x$io_global_by_wait_by_bytes 视图
30.4.3.14 IO 全局 io_global_by_wait_by_latency 和 x$io_global_by_wait_by_latency 视图
30.4.3.15 最新的 latest_file_io 和 x$latest_file_io 视图
30.4.3.16 主机内存 memory_by_host_by_current_bytes 和 x$memory_by_host_by_current_bytes 视图
30.4.3.17 内存 memory_by_thread_by_current_bytes 和 x$memory_by_thread_by_current_bytes 视图
30.4.3.18 用户内存 memory_by_user_by_current_bytes 和 x$memory_by_user_by_current_bytes 视图
30.4.3.19 全局内存 memory_global_by_current_bytes 和 x$memory_global_by_current_bytes 视图
30.4.3.20 全局内存 memory_global_total 和 x$memory_global_total 视图
30.4.3.21 指标 metrics 视图
30.4.3.22 进程列表 processlist 和 x$processlist 视图
30.4.3.23 ps_check_lost_instrumentation 视图
30.4.3.24 模式自增列 schema_auto_increment_columns 视图
30.4.3.25 模式索引统计 schema_index_statistics 和 x$schema_index_statistics 视图
30.4.3.26 模式对象概览 schema_object_overview 视图
30.4.3.27 schema_redundant_indexes 和 x$schema_flattened_keys 视图
30.4.3.28 schema_table_lock_waits 和 x$schema_table_lock_waits 视图
30.4.3.29 schema_table_statistics 和 x$schema_table_statistics 视图
30.4.3.30 schema_table_statistics_with_buffer 和 x$schema_table_statistics_with_buffer 视图
30.4.3.31 schema_tables_with_full_table_scans 和 x$schema_tables_with_full_table_scans 视图
30.4.3.32 schema_unused_indexes 视图
30.4.3.33 session 和 x$session 视图
30.4.3.34 session_ssl_status 视图
30.4.3.35 statement_analysis 和 x$statement_analysis 视图
30.4.3.36 statements_with_errors_or_warnings 和 x$statements_with_errors_or_warnings 视图
30.4.3.37 statements_with_full_table_scans 和 x$statements_with_full_table_scans 视图
30.4.3.38 statements_with_runtimes_in_95th_percentile 和 x$statements_with_runtimes_in_95th_percentile 视图
30.4.3.39 statements_with_sorting 和 x$statements_with_sorting 视图
30.4.3.40 statements_with_temp_tables 和 x$statements_with_temp_tables 视图
30.4.3.41 user_summary 和 x$user_summary 视图
30.4.3.42 user_summary_by_file_io 和 x$user_summary_by_file_io 视图
30.4.3.43 user_summary_by_file_io_type 和 x$user_summary_by_file_io_type 视图
30.4.3.44 user_summary_by_stages 和 x$user_summary_by_stages 视图
30.4.3.45 user_summary_by_statement_latency 和 x$user_summary_by_statement_latency 视图
30.4.3.46 user_summary_by_statement_type 和 x$user_summary_by_statement_type 视图
30.4.3.47 version 视图
30.4.3.48 wait_classes_global_by_avg_latency 和 x$wait_classes_global_by_avg_latency 视图
30.4.3.49 wait_classes_global_by_latency 和 x$wait_classes_global_by_latency 视图
30.4.3.50 waits_by_host_by_latency 和 x$waits_by_host_by_latency 视图
30.4.3.51 waits_by_user_by_latency 和 x$waits_by_user_by_latency 视图
30.4.3.52 waits_global_by_latency 和 x$waits_global_by_latency 视图
以下部分描述了sys模式视图。
sys模式包含许多视图,以各种方式总结性能模式表。其中大多数视图都是成对出现的,其中一对的名称与另一对成员的名称相同,只是多了一个x$前缀。例如,host_summary_by_file_io视图按主机分组总结文件 I/O,并显示从皮秒转换为更易读值(带单位)的延迟;
mysql> SELECT * FROM sys.host_summary_by_file_io;
+------------+-------+------------+
| host | ios | io_latency |
+------------+-------+------------+
| localhost | 67570 | 5.38 s |
| background | 3468 | 4.18 s |
+------------+-------+------------+
x$host_summary_by_file_io视图总结了相同的数据,但显示了未格式化的皮秒延迟:
mysql> SELECT * FROM sys.x$host_summary_by_file_io;
+------------+-------+---------------+
| host | ios | io_latency |
+------------+-------+---------------+
| localhost | 67574 | 5380678125144 |
| background | 3474 | 4758696829416 |
+------------+-------+---------------+
没有x$前缀的视图旨在提供更用户友好且更易读的输出。带有x$前缀的视图显示相同的原始值,更适用于其他对数据进行自己处理的工具。
没有x$前缀的视图与相应的带有x$前缀的视图有以下不同:
-
字节计数使用
format_bytes()Function")进行大小单位格式化。 -
时间值使用
format_time()Function")进行时间单位格式化。 -
SQL 语句通过
format_statement()Function")进行最大显示宽度截断。 -
路径名使用
format_path()Function")进行缩短。
30.4.3.1 主机摘要和 x$host_summary 视图
这些视图按主机分组总结语句活动、文件 I/O 和连接。
host_summary 和 x$host_summary 视图具有以下列:
-
host客户端连接的主机。假定底层性能模式表中的
HOST列为NULL的行是用于后台线程的,并报告为background主机名。 -
statements主机的总语句数。
-
statement_latency主机的定时语句的总等待时间。
-
statement_avg_latency主机的定时语句的平均等待时间。
-
table_scans主机的总表扫描次数。
-
file_ios主机的总文件 I/O 事件数。
-
file_io_latency主机的定时文件 I/O 事件的总等待时间。
-
current_connections主机的当前连接数。
-
total_connections主机的总连接数。
-
unique_users主机的不同用户数。
-
current_memory主机的当前分配内存量。
-
total_memory_allocated主机的总分配内存量。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-host-summary-by-file-io.html
30.4.3.2 host_summary_by_file_io 和 x$host_summary_by_file_io 视图
这些视图按主机分组总结文件 I/O,默认情况下按降序总文件 I/O 延迟排序。
host_summary_by_file_io 和 x$host_summary_by_file_io 视图具有以下列:
-
主机客户端连接的主机。假设基础性能模式表中的
HOST列为NULL的行是用于后台线程的,并且以background作为主机名报告。 -
ios主机的文件 I/O 事件总数。
-
io_latency主机的定时文件 I/O 事件的总等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-host-summary-by-file-io-type.html
30.4.3.3 主机按文件 I/O 类型和 x$host_summary_by_file_io_type 视图
这些视图按主机和事件类型分组汇总文件 I/O。默认情况下,行按主机和总 I/O 延迟降序排序。
host_summary_by_file_io_type 和 x$host_summary_by_file_io_type 视图具有以下列:
-
host客户端连接的主机。在底层性能模式表中
HOST列为NULL的行被假定为后台线程,并以background作为主机名报告。 -
event_name文件 I/O 事件名称。
-
total主机上文件 I/O 事件发生的总次数。
-
total_latency主机上文件 I/O 事件的定时发生的总等待时间。
-
max_latency主机上文件 I/O 事件的单个最大等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-host-summary-by-stages.html
30.4.3.4 主机 _summary_by_stages 和 x$host_summary_by_stages 视图
这些视图按主机分组总结语句阶段。默认情况下,按主机和降序总延迟排序行。
host_summary_by_stages 和 x$host_summary_by_stages 视图具有以下列:
-
host客户端连接的主机。假定底层性能模式表中的
HOST列为NULL的行是用于后台线程的,并报告为background主机名。 -
event_name舞台事件名称。
-
total主机的舞台事件发生次数总数。
-
total_latency主机的舞台事件定时发生的总等待时间。
-
avg_latency主机的舞台事件每次定时发生的平均等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-host-summary-by-statement-latency.html
30.4.3.5 host_summary_by_statement_latency 和 x$host_summary_by_statement_latency 视图
这些视图按主机分组总结了整体语句统计信息。默认情况下,按总延迟降序排序行。
host_summary_by_statement_latency 和 x$host_summary_by_statement_latency 视图具有以下列:
-
host客户端连接的主机。假定基础性能模式表中
HOST列为NULL的行是后台线程的行,并且报告的主机名为background。 -
total主机的语句总数。
-
total_latency主机的定时语句的总等待时间。
-
max_latency主机的定时语句的最大单个等待时间。
-
lock_latency主机的定时语句等待锁的总时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_sent语句返回的主机的行总数。
-
rows_examined语句从存储引擎读取的主机的总行数。
-
rows_affected语句影响的主机的总行数。
-
full_scans语句对主机进行的全表扫描总数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-host-summary-by-statement-type.html
30.4.3.6 主机按语句类型和 x$host_summary_by_statement_type 视图
这些视图总结了按主机和语句类型分组执行的语句的信息。默认情况下,按主机和降序总延迟排序行。
host_summary_by_statement_type 和 x$host_summary_by_statement_type 视图具有以下列:
-
host客户端连接的主机。在底层性能模式表中
HOST列为NULL的行被假定为后台线程,并以background作为主机名报告。 -
statement语句事件名称的最终组成部分。
-
total主机的语句事件的总发生次数。
-
total_latency主机的语句事件的总等待时间。
-
max_latency主机的语句事件的最大单个等待时间。
-
lock_latency由主机的语句事件等待锁的总时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_sent由主机的语句事件返回的行总数。
-
rows_examined由主机的语句事件从存储引擎读取的行总数。
-
rows_affected由主机的语句事件影响的行总数。
-
full_scans由主机的语句事件执行的全表扫描的总数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-innodb-buffer-stats-by-schema.html
30.4.3.7 innodb_buffer_stats_by_schema 和 x$innodb_buffer_stats_by_schema 视图
这些视图总结了 INFORMATION_SCHEMA INNODB_BUFFER_PAGE 表中按模式分组的信息。默认情况下,按降序缓冲区大小排序行。
警告
查询访问 INNODB_BUFFER_PAGE 表的视图可能会影响性能。除非您了解性能影响并确定其可接受,否则不要在生产系统上查询这些视图。为避免影响生产系统的性能,请在测试实例上重现要调查的问题并查询缓冲池统计信息。
innodb_buffer_stats_by_schema 和 x$innodb_buffer_stats_by_schema 视图具有以下列:
-
object_schema对象的模式名称,如果表属于
InnoDB存储引擎,则为InnoDB System。 -
allocated为模式分配的字节的总数。
-
data为模式分配的数据字节的总数。
-
pages为模式分配的页的总数。
-
pages_hashed为模式分配的散列页的总数。
-
pages_old为模式分配的旧页的总数。
-
rows_cached为模式缓存的行的总数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-innodb-buffer-stats-by-table.html
30.4.3.8 innodb_buffer_stats_by_table和x$innodb_buffer_stats_by_table视图
这些视图总结了INFORMATION_SCHEMA INNODB_BUFFER_PAGE表中的信息,按模式和表进行分组。默认情况下,按照缓冲区大小降序排序行。
警告
查询访问INNODB_BUFFER_PAGE表的视图可能会影响性能。除非您意识到性能影响并确定其可接受,否则不要在生产系统上查询这些视图。为了避免在生产系统上影响性能,重现您想要调查的问题,并在测试实例上查询缓冲池统计信息。
innodb_buffer_stats_by_table和x$innodb_buffer_stats_by_table视图具有以下列:
-
object_schema对象的模式名称,如果表属于
InnoDB存储引擎,则为InnoDB System。 -
object_name表名。
-
allocated表格分配的总字节数。
-
data为表分配的数据字节数。
-
pages表格分配的总页数。
-
pages_hashed为表分配的哈希页数。
-
pages_old为表分配的旧页数。
-
rows_cached表的缓存行数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-innodb-lock-waits.html
30.4.3.9 innodb_lock_waits 和 x$innodb_lock_waits 视图
这些视图总结了事务正在等待的InnoDB锁。默认情况下,按照锁��年龄降序排序。
innodb_lock_waits 和 x$innodb_lock_waits 视图具有以下列:
-
wait_started等待锁的开始时间。
-
wait_age等待锁已等待的时间,作为
TIME值。 -
wait_age_secs等待锁已等待的时间,以秒为单位。
-
locked_table_schema包含锁定表的模式。
-
locked_table_name锁定表的名称。
-
locked_table_partition锁定分区的名称(如果有);否则为
NULL。 -
locked_table_subpartition锁定子分区的名称(如果有);否则为
NULL。 -
locked_index锁定索引的名称。
-
locked_type等待锁的类型。
-
waiting_trx_id等待事务的 ID。
-
waiting_trx_started等待事务开始的时间。
-
waiting_trx_age等待事务已等待的时间,作为
TIME值。 -
waiting_trx_rows_locked等待事务锁定的行数。
-
waiting_trx_rows_modified等待事务修改的行数。
-
waiting_pid等待事务的进程列表 ID。
-
waiting_query等待锁的语句。
-
waiting_lock_id等待锁的 ID。
-
waiting_lock_mode等待锁的模式。
-
blocking_trx_id阻塞等待锁的事务的 ID。
-
blocking_pid阻塞事务的进程列表 ID。
-
blocking_query阻塞事务正在执行的语句。如果发出阻塞查询的会话变为空闲,则此字段报告为 NULL。有关更多信息,请参阅在发出会话变为空闲后识别阻塞查询。
-
blocking_lock_id阻塞等待锁的锁的 ID。
-
blocking_lock_mode阻塞等待锁的锁的模式。
-
blocking_trx_started阻塞事务开始的时间。
-
blocking_trx_age阻塞事务已执行的时间,作为
TIME值。 -
blocking_trx_rows_locked阻塞事务锁定的行数。
-
blocking_trx_rows_modified阻塞事务修改的行数。
-
sql_kill_blocking_query需要执行的
KILL语句以终止阻塞语句。 -
sql_kill_blocking_connection需要执行的
KILL语句以终止运行阻塞语句的会话。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-io-by-thread-by-latency.html
30.4.3.10 io_by_thread_by_latency和x$io_by_thread_by_latency视图
这些视图总结了 I/O 消费者的信息,显示了等待 I/O 的时间,按线程分组。默认情况下,按照总 I/O 延迟降序排序行。
io_by_thread_by_latency和x$io_by_thread_by_latency视图具有以下列:
-
user对于前台线程,与线程关联的账户。对于后台线程,线程名称。
-
total线程的 I/O 事件总数。
-
total_latency线程的定时 I/O 事件的总等待时间。
-
min_latency线程的定时 I/O 事件的最小单次等待时间。
-
avg_latency平均每个线程的定时 I/O 事件等待时间。
-
max_latency线程的定时 I/O 事件的最大单次等待时间。
-
thread_id线程 ID。
-
processlist_id对于前台线程,线程的进程列表 ID。对于后台线程,
NULL。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-io-global-by-file-by-bytes.html
30.4.3.11 io_global_by_file_by_bytes 和 x$io_global_by_file_by_bytes 视图
这些视图总结了全局 I/O 消费者,以显示按文件分组的 I/O 量。默认情况下,按降序排列总 I/O(读取和写入的字节数)。
io_global_by_file_by_bytes 和 x$io_global_by_file_by_bytes 视图具有以下列:
-
file文件路径名。
-
count_read文件的总读取事件数。
-
total_read从文件中读取的总字节数。
-
avg_read每次从文件读取的平均字节数。
-
count_write文件的总写入事件数。
-
total_written向文件写入的总字节数。
-
avg_write每次写入文件的平均字节数。
-
total文件的总读取和写入字节数。
-
write_pctI/O 总字节数中写入的百分比。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-io-global-by-file-by-latency.html
30.4.3.12 io_global_by_file_by_latency 和 x$io_global_by_file_by_latency 视图
这些视图总结了全局 I/O 消费者,以显示按文件分组的 I/O 等待时间。默认情况下,按总等待时间降序排序行。
io_global_by_file_by_latency 和 x$io_global_by_file_by_latency 视图具有以下列:
-
file文件路径名。
-
total文件的 I/O 事件总数。
-
total_latency文件的定时 I/O 事件的总等待时间。
-
count_read文件的总读取 I/O 事件数。
-
read_latency文件的定时读取 I/O 事件的总等待时间。
-
count_write文件的写入 I/O 事件总数。
-
write_latency文件的定时写入 I/O 事件的总等待时间。
-
count_misc文件的其他 I/O 事件总数。
-
misc_latency文件的定时其他 I/O 事件的总等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-io-global-by-wait-by-bytes.html
30.4.3.13 io_global_by_wait_by_bytes 和 x$io_global_by_wait_by_bytes 视图
这些视图总结了全局 I/O 消费者,显示了 I/O 量和等待 I/O 时间,按事件分组。默认情况下,按降序排列总 I/O(读取和写入的字节数)的行。
io_global_by_wait_by_bytes 和 x$io_global_by_wait_by_bytes 视图具有以下列:
-
event_name去除了
wait/io/file/前缀的 I/O 事件名称。 -
totalI/O 事件的总发生次数。
-
total_latencyI/O 事件的定时发生的总等待时间。
-
min_latencyI/O 事件的定时发生的最小单次等待时间。
-
avg_latencyI/O 事件的每次定时发生的平均等待时间。
-
max_latencyI/O 事件的定时发生的最大单次等待时间。
-
count_readI/O 事件的读取请求次数。
-
total_readI/O 事件的读取字节数。
-
avg_readI/O 事件的每次读取的平均字节数。
-
count_writeI/O 事件的写入请求次数。
-
total_writtenI/O 事件的写入字节数。
-
avg_writtenI/O 事件的每次写入的平均字节数。
-
total_requestedI/O 事件的总读取和写入字节数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-io-global-by-wait-by-latency.html
30.4.3.14 io_global_by_wait_by_latency 和 x$io_global_by_wait_by_latency 视图
这些视图总结了全局 I/O 消费者,显示了 I/O 量和等待 I/O 的时间,按事件分组。默认情况下,行按总延迟降序排序。
io_global_by_wait_by_latency 和 x$io_global_by_wait_by_latency 视图具有以下列:
-
event_nameI/O 事件名称,去除
wait/io/file/前缀。 -
totalI/O 事件的总发生次数。
-
total_latencyI/O 事件的定时发生的总等待时间。
-
avg_latencyI/O 事件的每次定时发生的平均等待时间。
-
max_latencyI/O 事件的定时发生的最大单次等待时间。
-
read_latencyI/O 事件的读取定时发生的总等待时间。
-
write_latencyI/O 事件的写入定时发生的总等待时间。
-
misc_latencyI/O 事件的其他定时发生的总等待时间。
-
count_readI/O 事件的读取请求数。
-
total_readI/O 事件的读取字节数。
-
avg_readI/O 事件的每次读取的平均字节数。
-
count_writeI/O 事件的写入请求数。
-
total_writtenI/O 事件的写入字节数。
-
avg_writtenI/O 事件的每次写入的平均字节数。
30.4.3.15 最新的文件 I/O 和 x$latest_file_io 视图
这些视图按文件和线程分组总结文件 I/O 活动。默认情况下,按最近的 I/O 排序行。
latest_file_io 和 x$latest_file_io 视图具有以下列:
-
thread对于前台线程,与线程相关联的帐户(以及 TCP/IP 连接的端口号)。对于后台线程,线程名称和线程 ID。
-
file文件路径名。
-
latency文件 I/O 事件的等待时间。
-
operation操作类型。
-
requested请求的数据字节数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-memory-by-host-by-current-bytes.html
30.4.3.16 memory_by_host_by_current_bytes 和 x$memory_by_host_by_current_bytes 视图
这些视图按主机分组总结内存使用情况。默认情况下,按内存使用量降序排序行。
memory_by_host_by_current_bytes 和 x$memory_by_host_by_current_bytes 视图具有以下列:
-
host客户端连接的主机。假定底层性能模式表中的
HOST列为NULL的行是用于后台线程的,并且报告的主机名为background。 -
current_count_used尚未释放的主机的当前分配内存块数。
-
current_allocated尚未释放的主机的当前分配字节数。
-
current_avg_alloc每个主机的当前分配字节数。
-
current_max_alloc主机的最大单个当前内存分配(以字节为单位)。
-
total_allocated主机的总内存分配(以字节为单位)。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-memory-by-thread-by-current-bytes.html
30.4.3.17 The memory_by_thread_by_current_bytes and x$memory_by_thread_by_current_bytes Views
这些视图按线程分组总结内存使用情况。默认情况下,按内存使用量降序排序。
memory_by_thread_by_current_bytes 和 x$memory_by_thread_by_current_bytes 视图具有以下列:
-
thread_id线程 ID。
-
user线程用户或线程名称。
-
current_count_used尚未释放的线程的当前分配内存块数。
-
current_allocated尚未释放的线程的当前分配字节数。
-
current_avg_alloc每个线程的内存块的当前分配字节数。
-
current_max_alloc线程的最大单个当前内存分配字节数。
-
total_allocated线程的总内存分配字节数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-memory-by-user-by-current-bytes.html
30.4.3.18 memory_by_user_by_current_bytes 和 x$memory_by_user_by_current_bytes 视图
这些视图按用户分组总结内存使用情况。默认情况下,按内存使用量降序排序行。
memory_by_user_by_current_bytes 和 x$memory_by_user_by_current_bytes 视图具有以下列:
-
user客户端用户名。假定底层性能模式表中的
USER列为NULL的行是后台线程的行,并且以background主机名报告。 -
current_count_used当前分配但尚未释放的用户内存块数量。
-
current_allocated当前分配但尚未释放的用户字节总数。
-
current_avg_alloc每个用户内存块的当前分配字节数。
-
current_max_alloc用户的最大单个当前内存分配字节数。
-
total_allocated用户的总内存分配字节数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-memory-global-by-current-bytes.html
30.4.3.19 memory_global_by_current_bytes 和 x$memory_global_by_current_bytes 视图
这些视图按分配类型(即按事件)汇总内存使用情况。默认情况下,按内存使用量降序排序行。
memory_global_by_current_bytes 和 x$memory_global_by_current_bytes 视图具有以下列:
-
event_name内存事件名称。
-
current_count事件发生的总次数。
-
current_alloc为事件分配但尚未释放的当前分配字节数。
-
current_avg_alloc当前为事件分配的每个内存块的字节数。
-
high_count为事件分配的内存块数量的高水位标记。
-
high_alloc为事件分配的字节数的高水位标记。
-
high_avg_alloc平均每个内存块为事件分配的字节数的高水位标记。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-memory-global-total.html
30.4.3.20 memory_global_total 和 x$memory_global_total 视图
这些视图总结了服务器内的总内存使用情况。
memory_global_total 和 x$memory_global_total 视图具有以下列:
-
total_allocated服务器内分配的总字节内存。
30.4.3.21 指标视图
此视图总结了 MySQL 服务器的指标,显示变量名称、数值、类型以及是否启用。默认情况下,按变量类型和名称排序。
metrics视图包括以下信息:
-
来自性能模式
global_status表的全局状态变量 -
来自
INFORMATION_SCHEMAINNODB_METRICS表的InnoDB指标 -
基于性能模式内存仪表化的当前和总内存分配
-
当前时间(人类可读和 Unix 时间戳格式)
在global_status和INNODB_METRICS表之间存在一些信息重复,metrics视图消除了这种重复。
metrics视图具有以下列:
-
变量名称指标名称。指标类型确定了名称的来源:
-
对于全局状态变量:
global_status表的VARIABLE_NAME列 -
对于
InnoDB指标:INNODB_METRICS表的NAME列 -
对于其他指标:视图提供的描述性字符串
-
-
Variable_value指标数值。指标类型确定了数值的来源:
-
对于全局状态变量:
global_status表的VARIABLE_VALUE列 -
对于
InnoDB指标:INNODB_METRICS表的COUNT列 -
对于内存指标:性能模式
memory_summary_global_by_event_name表中的相关列 -
对于当前时间:
NOW(3)或UNIX_TIMESTAMP(NOW(3))的值
-
-
类型指标类型:
-
对于全局状态变量:
全局状态 -
对于
InnoDB指标:InnoDB 指标 - %,其中%由INNODB_METRICS表的SUBSYSTEM列的值替换而来 -
对于内存指标:
性能模式 -
对于当前时间:
系统时间
-
-
已启用指标是否已启用:
-
对于全局状态变量:
是 -
对于
InnoDB指标:如果INNODB_METRICS表的STATUS列为enabled,则为是,否则为否 -
对于内存指标:
否,是或部分(目前,部分仅出现在内存指标中,表示并非所有memory/%工具都已启用;性能模式内存工具始终已启用) -
对于当前时间:
是
-
30.4.3.22 The processlist and x$processlist Views
MySQL 进程列表显示服务器内执行的线程集合当前正在执行的操作。processlist 和 x$processlist 视图总结了进程信息。它们提供的信息比 SHOW PROCESSLIST 语句和 INFORMATION_SCHEMA PROCESSLIST 表更完整,而且不会阻塞。默认情况下,行按照进程时间和等待时间降序排序。有关进程信息来源的比较,请参见 进程信息来源。
这里的列描述很简要。有关更多信息,请参阅性能模式 threads 表的描述,链接在 第 29.12.21.8 节,“The threads Table”。
processlist 和 x$processlist 视图具有以下列:
-
thd_id线程 ID。
-
conn_id连接 ID。
-
user线程用户或线程名称。
-
db线程的默认数据库,如果没有则为
NULL。 -
command对于前台线程,线程代表客户端执行的命令类型,如果会话空闲,则为
Sleep。 -
state指示线程正在执行的操作、事件或状态。
-
time线程在当前状态下已经经过的秒数。
-
current_statement线程正在执行的语句,如果没有执行任何语句则为
NULL。 -
execution_engine查询执行引擎。该值为
PRIMARY或SECONDARY。用于 MySQL HeatWave 服务和 HeatWave,其中PRIMARY引擎为InnoDB,SECONDARY引擎为 HeatWave(RAPID)。对于 MySQL Community Edition Server、MySQL Enterprise Edition Server(本地)和没有 HeatWave 的 MySQL HeatWave 服务,该值始终为PRIMARY。此列在 MySQL 8.0.29 中添加。 -
statement_latency语句执行的时间长。
-
progress支持进度报告的阶段完成的工作百分比。参见 第 30.3 节,“sys Schema Progress Reporting”。
-
lock_latency当前语句等待锁的时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_examined当前语句从存储引擎中读取的行数。
-
rows_sent当前语句返回的行数。
-
rows_affected当前语句影响的行数。
-
tmp_tables当前语句创建的内存中临时表的数量。
-
tmp_disk_tables当前语句创建的磁盘上临时表的数量。
-
full_scan当前语句执行的全表扫描次数。
-
last_statement线程执行的最后一条语句,如果当前没有正在执行的语句或等待。
-
last_statement_latency最后一条语句执行的时间。
-
current_memory线程分配的字节数。
-
last_wait线程的最近等待事件名称。
-
last_wait_latency线程的最近等待事件的等待时间。
-
source包含产生事件的受检代码的源文件和行号。
-
trx_latency线程的当前事务等待时间。
-
trx_state线程的当前事务状态。
-
trx_autocommit当前事务开始时是否启用了自动提交模式。
-
pid客户端进程 ID。
-
program_name客户端程序名称。
dev.mysql.com/doc/refman/8.0/en/sys-ps-check-lost-instrumentation.html
30.4.3.23 ps_check_lost_instrumentation 视图
此视图返回有关丢失的性能模式仪器的信息,以指示性能模式是否无法监视所有运行时数据。
ps_check_lost_instrumentation 视图具有以下列:
-
variable_name指示丢失哪种类型仪器的性能模式状态变量名称。
-
variable_value丢失的仪器数量。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-auto-increment-columns.html
30.4.3.24 schema_auto_increment_columns视图
此视图指示哪些表具有AUTO_INCREMENT列,并提供有关这些列的信息,例如当前值和最大列值以及使用率(已使用值与可能值的比率)。默认情况下,按降序使用率和最大列值对行进行排序。
这些模式中的表在查看输出中被排除:mysql,sys,INFORMATION_SCHEMA,performance_schema。
schema_auto_increment_columns视图具有以下列:
-
table_schema包含表的模式。
-
table_name包含
AUTO_INCREMENT列的表。 -
column_nameAUTO_INCREMENT列的名称。 -
data_type列的数据类型。
-
column_type列的列类型,即数据类型加上可能的其他信息。例如,对于具有
bigint(20) unsigned列类型的列,数据类型只是bigint。 -
is_signed列类型是否为有符号。
-
is_unsigned列类型是否为无符号。
-
max_value列的最大允许值。
-
auto_increment列的当前
AUTO_INCREMENT值。 -
auto_increment_ratio用于列的已使用值与允许值的比率。这表示数值序列中有多少“已使用”。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-index-statistics.html
30.4.3.25 schema_index_statistics 和 x$schema_index_statistics 视图
这些视图提供索引统计信息。默认情况下,按照总索引延迟降序排序行。
schema_index_statistics 和 x$schema_index_statistics 视图具有以下列:
-
table_schema包含表的模式。
-
table_name包含索引的表。
-
index_name索引的名称。
-
rows_selected使用索引读取的总行数。
-
select_latency使用索引进行定时读取的总等待时间。
-
rows_inserted插入到索引中的总行数。
-
insert_latency插入到索引中的定时等待总时间。
-
rows_updated在索引中更新的总行数。
-
update_latency在索引中进行定时更新的总等待时间。
-
rows_deleted从索引中删除的总行数。
-
delete_latency从索引中删除的定时等待总时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-object-overview.html
30.4.3.26 模式对象概述视图
此视图总结了每个模式中的对象类型。默认情况下,按模式和对象类型对行进行排序。
注意
对于具有大量对象的 MySQL 实例,执行此视图可能需要很长时间。
schema_object_overview 视图具有以下列:
-
db模式名称。
-
object_type对象类型:
BASE TABLE,INDEX (*index_type*),EVENT,FUNCTION,PROCEDURE,TRIGGER,VIEW。 -
count给定类型的模式中对象的数量。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-redundant-indexes.html
30.4.3.27 模式冗余索引和 x$schema_flattened_keys 视图
schema_redundant_indexes 视图显示重复其他索引或被其他索引冗余的索引。x$schema_flattened_keys 视图是schema_redundant_indexes 的辅助视图。
在以下列描述中,主导索引是使冗余索引冗余的索引。
schema_redundant_indexes 视图包含以下列:
-
table_schema包含表的模式。
-
table_name包含索引的表。
-
redundant_index_name冗余索引的名称。
-
redundant_index_columns冗余索引中列的名称。
-
redundant_index_non_unique冗余索引中非唯一列的数量。
-
dominant_index_name主导索引的名称。
-
dominant_index_columns主导索引中列的名称。
-
dominant_index_non_unique主导索引中非唯一列的数量。
-
subpart_exists索引是否仅索引列的一部分。
-
sql_drop_index执行以删除冗余索引的语句。
x$schema_flattened_keys 视图包含以下列:
-
table_schema包含表的模式。
-
table_name包含索引的表。
-
index_name索引名称。
-
non_unique索引中非唯一列的数量。
-
subpart_exists索引是否仅索引列的一部分。
-
index_columns索引中列的名称。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-table-lock-waits.html
30.4.3.28 The schema_table_lock_waits and x$schema_table_lock_waits Views
这些视图显示了哪些会话因等待元数据锁而被阻塞,以及是什么在阻塞它们。
这里的列描述很简要。有关更多信息,请参阅性能模式 metadata_locks 表的描述,链接在 Section 29.12.13.3, “The metadata_locks Table”。
schema_table_lock_waits 和 x$schema_table_lock_waits 视图具有以下列:
-
object_schema包含要锁定对象的模式。
-
object_name被检测对象的名称。
-
waiting_thread_id等待锁的线程 ID。
-
waiting_pid等待锁的线程的进程列表 ID。
-
waiting_account与等待锁的会话相关联的帐户。
-
waiting_lock_type等待锁的类型。
-
waiting_lock_duration等待锁已经等待多长时间。
-
waiting_query等待锁的语句。
-
waiting_query_secs语句等待的时间,以秒为单位。
-
waiting_query_rows_affected语句受影响的行数。
-
waiting_query_rows_examined语句从存储引擎中读取的行数。
-
blocking_thread_id阻塞等待锁的线程的线程 ID。
-
blocking_pid阻塞等待锁的线程的进程列表 ID。
-
blocking_account与阻塞等待锁的线程相关联的帐户。
-
blocking_lock_type阻塞等待锁的类型。
-
blocking_lock_duration阻塞锁已经持有多长时间。
-
sql_kill_blocking_queryKILL语句用于执行以终止阻塞语句。 -
sql_kill_blocking_connectionKILL语句用于执行以终止运行阻塞语句的会话。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-table-statistics.html
30.4.3.29 schema_table_statistics 和 x$schema_table_statistics 视图
这些视图总结了表的统计信息。默认情况下,按照总等待时间降序排序(具有最多争用的表排在前面)。
这些视图使用一个辅助视图,x$ps_schema_table_statistics_io。
schema_table_statistics 和 x$schema_table_statistics 视图具有以下列:
-
table_schema包含表的模式。
-
table_name表名。
-
total_latency对表的定时 I/O 事件的总等待时间。
-
rows_fetched从表中读取的总行数。
-
fetch_latency对表的定时读取 I/O 事件的总等待时间。
-
rows_inserted向表中插入的总行数。
-
insert_latency对表的定时插入 I/O 事件的总等待时间。
-
rows_updated在表中更新的总行数。
-
update_latency对表的定时更新 I/O 事件的总等待时间。
-
rows_deleted从表中删除的总行数。
-
delete_latency对表的定时删除 I/O 事件的总等待时间。
-
io_read_requests对表的总读取请求次数。
-
io_read从表中读取的总字节数。
-
io_read_latency从表中读取的总等待时间。
-
io_write_requests对表的总写入请求次数。
-
io_write向表中写入的总字节数。
-
io_write_latency对表的写入的总等待时间。
-
io_misc_requests对表的杂项 I/O 请求的总数。
-
io_misc_latency对表的杂项 I/O 请求的总等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-table-statistics-with-buffer.html
30.4.3.30 schema_table_statistics_with_buffer和x$schema_table_statistics_with_buffer视图
这些视图总结了表的统计信息,包括InnoDB缓冲池统计信息。默认情况下,按照总等待时间降序排序(最有争议的表排在前面)。
这些视图使用一个辅助视图,x$ps_schema_table_statistics_io。
schema_table_statistics_with_buffer和x$schema_table_statistics_with_buffer视图具有以下列:
-
table_schema包含表的模式。
-
table_name表名。
-
rows_fetched从表中读取的总行数。
-
fetch_latency表的定时读取 I/O 事件的总等待时间。
-
rows_inserted插入表的总行数。
-
insert_latency表的定时插入 I/O 事件的总等待时间。
-
rows_updated更新表的总行数。
-
update_latency表的定时更新 I/O 事件的总等待时间。
-
rows_deleted从表中删除的总行数。
-
delete_latency表的定时删除 I/O 事件的总等待时间。
-
io_read_requests表的读取请求总数。
-
io_read从表中读取的总字节数。
-
io_read_latency从表中读取的总等待时间。
-
io_write_requests为表的写入请求总数。
-
io_write写入表的总字节数。
-
io_write_latency写入表的总等待时间。
-
io_misc_requests表的杂项 I/O 请求总数。
-
io_misc_latency表的杂项 I/O 请求的总等待时间。
-
innodb_buffer_allocated为表分配的总
InnoDB缓冲字节数。 -
innodb_buffer_data为表分配的总
InnoDB数据字节数。 -
innodb_buffer_free为表分配的总
InnoDB非数据字节数(innodb_buffer_allocated-innodb_buffer_data)。 -
innodb_buffer_pages为表分配的总
InnoDB页面数。 -
innodb_buffer_pages_hashed为表分配的总
InnoDB哈希页面数。 -
innodb_buffer_pages_old为表分配的总
InnoDB旧页面数。 -
innodb_buffer_rows_cached表的总
InnoDB缓存行数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-tables-with-full-table-scans.html
30.4.3.31 The schema_tables_with_full_table_scans and x$schema_tables_with_full_table_scans Views
这些视图显示了正在进行全表扫描的表。默认情况下,行按照扫描的行数降序排序。
schema_tables_with_full_table_scans 和 x$schema_tables_with_full_table_scans 视图具有以下列:
-
对象模式模式名称。
-
对象名称表名称。
-
行数全扫描表的全表扫描扫描的总行数。
-
延迟表的全表扫描的总等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-unused-indexes.html
30.4.3.32 The schema_unused_indexes View
这些视图显示没有事件的索引,这表明它们没有被使用。默认情况下,按模式和表对行进行排序。
当服务器运行时间足够长且其工作负载具有代表性时,此视图最有用。否则,此视图中的索引存在可能没有意义。
schema_unused_indexes 视图包含以下列:
-
object_schema模式名称。
-
object_name表名称。
-
index_name未使用的索引名称。
30.4.3.33 会话和 x$session 视图
这些视图类似于processlist和x$processlist,但它们会过滤掉后台进程,仅显示用户会话。有关列的描述,请参阅 Section 30.4.3.22, “The processlist and x$processlist Views”。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-session-ssl-status.html
30.4.3.34 session_ssl_status 视图
对于每个连接,该视图显示 SSL 版本、密码和重用 SSL 会话的计数。
session_ssl_status 视图包含以下列:
-
thread_id连接的线程 ID。
-
ssl_version连接使用的 SSL 版本。
-
ssl_cipher连接使用的 SSL 密码。
-
ssl_sessions_reused连接中重用的 SSL 会话数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statement-analysis.html
30.4.3.35 语句分析和 x$statement_analysis 视图
这些视图列出了带有聚合统计信息的规范化语句。内容模仿了 MySQL Enterprise Monitor 查询分析视图。默认情况下,按总延迟降序排序行。
statement_analysis 和 x$statement_analysis 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
full_scan由语句出现执行的全表扫描总数。
-
exec_count语句执行的总次数。
-
err_count由语句出现产生的错误总数。
-
warn_count由语句出现产生的警告总数。
-
total_latency语句定时出现的总等待时间。
-
max_latency定时出现的语句的最大单次等待时间。
-
avg_latency每次语句出现的平均等待时间。
-
lock_latency定时出现的语句等待锁的总时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_sent由语句出现返回的总行数。
-
rows_sent_avg每次语句出现平均返回的行数。
-
rows_examined由语句出现从存储引擎读取的总行数。
-
rows_examined_avg从存储引擎读取的平均行数。
-
rows_affected由语句出现影响的总行数。
-
rows_affected_avg每次语句出现的平均影响行数。
-
tmp_tables由语句出现创建的内部内存临时表的总数。
-
tmp_disk_tables由语句出现创建的内部磁盘临时表的总数。
-
rows_sorted由语句出现排序的总行数。
-
sort_merge_passes由语句出现的排序合并总数。
-
max_controlled_memory语句使用的最大受控内存量(字节)。
该列在 MySQL 8.0.31 中添加。
-
max_total_memory语句使用的最大内存量(字节)。
该列在 MySQL 8.0.31 中添加。
-
digest语句摘要。
-
first_seen语句首次出现的时间。
-
last_seen语句最近一次出现的时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statements-with-errors-or-warnings.html
30.4.3.36 包含错误或警告的语句和 x$statements_with_errors_or_warnings 视图
这些视图显示产生错误或警告的规范化语句。默认情况下,按照错误和警告计数降序排序。
statements_with_errors_or_warnings 和 x$statements_with_errors_or_warnings 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
exec_count语句执行的总次数。
-
errors语句产生的错误总数。
-
error_pct产生错误的语句出现次数的百分比。
-
warnings语句产生的警告总数。
-
warning_pct产生警告的语句出现次数的百分比。
-
first_seen语句首次被看到的时间。
-
last_seen语句最近被看到的时间。
-
digest语句摘要。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statements-with-full-table-scans.html
30.4.3.37 statements_with_full_table_scans 和 x$statements_with_full_table_scans 视图
这些视图显示了执行全表扫描的规范化语句。默认情况下,按照全表扫描所占时间的百分比和总延迟时间降序排序。
statements_with_full_table_scans 和 x$statements_with_full_table_scans 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
exec_count语句执行的总次数。
-
total_latency语句事件的计时等待时间。
-
no_index_used_count未使用索引扫描表的总次数。
-
no_good_index_used_count未使用良好索引扫描表的总次数。
-
no_index_used_pct未使用索引扫描表的时间百分比。
-
rows_sent从表返回的总行数。
-
rows_examined从存储引擎读取的表的总行数。
-
rows_sent_avg从表返回的平均行数。
-
rows_examined_avg从存储引擎读取的表的平均行数。
-
first_seen语句首次出现的时间。
-
last_seen语句最近出现的时间。
-
digest语句摘要。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statements-with-runtimes-in-95th-percentile.html
30.4.3.38 statements_with_runtimes_in_95th_percentile 和 x$statements_with_runtimes_in_95th_percentile 视图
这些视图列出了运行时间处于第 95 百分位数的语句。默认情况下,按照平均延迟降序排序行。
这两个视图使用两个辅助视图,x$ps_digest_avg_latency_distribution 和 x$ps_digest_95th_percentile_by_avg_us。
statements_with_runtimes_in_95th_percentile 和 x$statements_with_runtimes_in_95th_percentile 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
full_scan语句执行的全表扫描总次数。
-
exec_count语句执行的总次数。
-
err_count语句执行产生的错误总数。
-
warn_count语句执行产生的警告总数。
-
total_latency语句定时执行的总等待时间。
-
max_latency语句定时执行的最大单次等待时间。
-
avg_latency每次定时执行语句的平均等待时间。
-
rows_sent语句执行返回的总行数。
-
rows_sent_avg每次语句执行返回的平均行数。
-
rows_examined语句执行从存储引擎读取的总行数。
-
rows_examined_avg每次语句执行从存储引擎读取的平均行数。
-
first_seen首次出现语句的时间。
-
last_seen语句最近一次出现的时间。
-
digest语句摘要。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statements-with-sorting.html
30.4.3.39 statements_with_sorting 和 x$statements_with_sorting 视图
这些视图列出了执行排序操作的规范化语句。默认情况下,按总延迟降序排序行。
statements_with_sorting 和 x$statements_with_sorting 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
exec_count语句执行的总次数。
-
total_latency该语句定时出现的总等待时间。
-
sort_merge_passes通过语句出现的总排序合并次数。
-
avg_sort_merges每次语句出现的平均排序合并次数。
-
sorts_using_scans通过语句出现的表扫描进行排序的总次数。
-
sort_using_range通过语句出现的范围访问进行排序的总次数。
-
rows_sorted通过语句出现的总排序行数。
-
avg_rows_sorted每次语句出现的平均排序行数。
-
first_seen该语句首次出现的时间。
-
last_seen语句最近一次出现的时间。
-
digest语句摘要。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statements-with-temp-tables.html
30.4.3.40 语句 _with_temp_tables 和 x$statements_with_temp_tables 视图
这些视图列出了使用临时表的规范化语句。默认情况下,按照使用的磁盘临时表数量和内存临时表数量降序排序行。
statements_with_temp_tables 和 x$statements_with_temp_tables 视图具有以下列:
-
query规范化的语句字符串。
-
db语句的默认数据库,如果没有则为
NULL。 -
exec_count语句执行的总次数。
-
total_latency语句定时发生的总等待时间。
-
memory_tmp_tables由语句发生创建的内存中临时表的总数。
-
disk_tmp_tables由该语句发生创建的内部磁盘临时表的总数。
-
avg_tmp_tables_per_query每次语句发生时创建的内部临时表的平均数量。
-
tmp_tables_to_disk_pct将内存中临时表转换为磁盘表的百分比。
-
first_seen语句首次出现的时间。
-
last_seen语句最近出现的时间。
-
digest陈述摘要。
30.4.3.41 用户摘要和 x$user_summary 视图
这些视图总结了语句活动、文件 I/O 和连接,按用户分组。默认情况下,按总延迟降序排序行。
user_summary 和 x$user_summary 视图具有以下列:
-
user客户端用户名。在底层性能模式表中
USER列为NULL的行被认为是后台线程,并以background主机名报告。 -
statements用户的语句总数。
-
statement_latency用户的定时语句的总等待时间。
-
statement_avg_latency用户的每个定时语句的平均等待时间。
-
table_scans用户的表扫描总数。
-
file_ios用户的文件 I/O 事件总数。
-
file_io_latency用户的定时文件 I/O 事件的总等待时间。
-
current_connections用户的当前连接数。
-
total_connections用户的总连接数。
-
unique_hosts用户发起连接的不同主机数量。
-
current_memory用户的当前分配内存量。
-
total_memory_allocated用户的总分配内存量。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-user-summary-by-file-io.html
30.4.3.42 user_summary_by_file_io和x$user_summary_by_file_io视图
这些视图按用户分组总结文件 I/O。默认情况下,按降序总文件 I/O 延迟排序行。
user_summary_by_file_io和x$user_summary_by_file_io视图具有以下列:
-
user客户端用户名。假定底层性能模式表中
USER列为NULL的行是用于后台线程,并且以主机名background报告。 -
ios用户的文件 I/O 事件总数。
-
io_latency用户的定时文件 I/O 事件的总等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-user-summary-by-file-io-type.html
30.4.3.43 用户按文件 I/O 类型和 x$user_summary_by_file_io_type 视图
这些视图按用户和事件类型对文件 I/O 进行汇总。默认情况下,按用户和降序总延迟排序行。
user_summary_by_file_io_type和x$user_summary_by_file_io_type视图具有以下列:
-
用户客户端用户名。基础性能模式表中
USER列为NULL的行被假定为后台线程,并以background主机名报告。 -
事件名称文件 I/O 事件名称。
-
总用户文件 I/O 事件的总发生次数。
-
延迟用户文件 I/O 事件定时发生的总等待时间。
-
最大延迟用户文件 I/O 事件定时发生的最大单个等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-user-summary-by-stages.html
30.4.3.44 用户 _summary_by_stages 和 x$user_summary_by_stages 视图
这些视图按用户分组总结阶段。默认情况下,按用户和降序总阶段延迟排序。
user_summary_by_stages 和 x$user_summary_by_stages 视图具有以下列:
-
user客户端用户名。在底层性能模式表中
USER列为NULL的行被假定为后台线程,并以background主机名报告。 -
event_name阶段事件名称。
-
total用户的阶段事件发生总次数。
-
total_latency用户的阶段事件定时发生的总等待时间。
-
avg_latency用户的阶段事件定时发生的平均等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-user-summary-by-statement-latency.html
30.4.3.45 用户 _summary_by_statement_latency 和 x$user_summary_by_statement_latency 视图
这些视图总结了按用户分组的整体语句统计信息。默认情况下,按总延迟降序排序行。
user_summary_by_statement_latency 和 x$user_summary_by_statement_latency 视图具有以下列:
-
user客户端用户名。假定底层性能模式表中的
USER列为NULL的行是后台线程的行,并报告为background主机名。 -
total用户的语句总数。
-
total_latency用户的定时语句的总等待时间。
-
max_latency用户的定时语句的最大单个等待时间。
-
lock_latency用户的定时语句等待锁的总时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_sent用户语句返回的行数总数。
-
rows_examined用户语句从存储引擎读取的行数总数。
-
rows_affected用户语句影响的行数总数。
-
full_scans用户语句的全表扫描总数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-user-summary-by-statement-type.html
30.4.3.46 用户汇总按语句类型和 x$user_summary_by_statement_type 视图
这些视图总结了按用户和语句类型分组执行的语句信息。默认情况下,按用户和降序总延迟排序行。
user_summary_by_statement_type 和 x$user_summary_by_statement_type 视图具有以下列:
-
user客户端用户名。在底层性能模式表中
USER列为NULL的行被假定为后台线程,并报告为主机名background。 -
statement语句事件名称的最终组成部分。
-
total用户语句事件的总发生次数。
-
total_latency用户语句事件的总等待时间。
-
max_latency用户语句事件的最大单个等待时间。
-
lock_latency用户语句事件的总等待锁时间。
-
cpu_latency当前线程在 CPU 上花费的时间。
-
rows_sent用户语句事件返回的总行数。
-
rows_examined用户语句事件从存储引擎读取的总行数。
-
rows_affected语句事件对用户影响的总行数。
-
full_scans用户语句事件的总表全表扫描次数。
30.4.3.47 版本视图
这个视图提供了当前的sys模式和 MySQL 服务器版本。
注意
截至 MySQL 8.0.18 版本,此视图已被弃用,并可能在未来的 MySQL 版本中被移除。使用它的应用程序应迁移到使用其他替代方法。例如,使用VERSION()函数来检索 MySQL 服务器版本。
version视图包含以下列:
-
sys_versionsys模式版本。 -
mysql_versionMySQL 服务器版本。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-wait-classes-global-by-avg-latency.html
30.4.3.48 wait_classes_global_by_avg_latency 和 x$wait_classes_global_by_avg_latency 视图
这些视图按事件类别分组总结等待类别的平均延迟。默认情况下,按降序平均延迟排序行。空闲事件将被忽略。
事件类别是通过从事件名称中去除第一个三个组件之后的所有内容来确定的。例如,wait/io/file/sql/slow_log 的类别是 wait/io/file。
wait_classes_global_by_avg_latency 和 x$wait_classes_global_by_avg_latency 视图具有以下列:
-
event_class事件类别。
-
total事件类别中事件发生的总次数。
-
total_latency事件类别中定时发生事件的总等待时间。
-
min_latency事件类别中定时发生事件的最小单次等待时间。
-
avg_latency事件类别中事件的平均等待时间。
-
max_latency事件类别中定时发生事件的最大单次等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-wait-classes-global-by-latency.html
30.4.3.49 wait_classes_global_by_latency 和 x$wait_classes_global_by_latency 视图
这些视图按事件类别分组总结等待类别总延迟。默认情况下,按降序总延迟排序行。空闲事件被忽略。
事件类别由事件名称中第一个三个组件之后的所有内容剥离而确定。例如,wait/io/file/sql/slow_log的类别是wait/io/file。
wait_classes_global_by_latency和x$wait_classes_global_by_latency视图具有以下列:
-
event_class事件类别。
-
total事件类别中事件发生的总次数。
-
total_latency事件类别中定时事件的总等待时间。
-
min_latency事件类别中定时事件的最小单个等待时间。
-
avg_latency事件类别中每个定时事件的平均等待时间。
-
max_latency事件类别中定时事件的最大单个等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-waits-by-host-by-latency.html
30.4.3.50 waits_by_host_by_latency 和 x$waits_by_host_by_latency 视图
这些视图按主机和事件分组总结等待事件。默认情况下,按主机和降序总延迟排序行。空闲事件被忽略。
waits_by_host_by_latency 和 x$waits_by_host_by_latency 视图具有以下列:
-
host连接来源主机。
-
event事件名称。
-
total主机的事件发生总次数。
-
total_latency主机的事件定时发生的总等待时间。
-
avg_latency主机的事件每次定时发生的平均等待时间。
-
max_latency主机的事件定时发生的最大单个等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-waits-by-user-by-latency.html
30.4.3.51 waits_by_user_by_latency 和 x$waits_by_user_by_latency 视图
这些视图按用户和事件分组总结等待事件。默认情况下,按用户和降序总延迟排序。空闲事件将被忽略。
waits_by_user_by_latency 和 x$waits_by_user_by_latency 视图具有以下列:
-
用户与连接相关联的用户。
-
事件事件名称。
-
总数用户的事件发生次数的总数。
-
总延迟用户事件发生的总等待时间。
-
平均延迟用户每次事件发生的平均等待时间。
-
最大延迟用户事件发生的单次最大等待时间。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-waits-global-by-latency.html
30.4.3.52 waits_global_by_latency 和 x$waits_global_by_latency 视图
这些视图按事件分组总结等待事件。默认情况下,按总延迟降序排序行。空闲事件将被忽略。
waits_global_by_latency 和 x$waits_global_by_latency 视图包含以下列:
-
events事件名称。
-
total事件发生的总次数。
-
total_latency事件定时发生的总等待时间。
-
avg_latency事件定时发生的平均等待时间。
-
max_latency事件定时发生的最长等待时间。
30.4.4 sys Schema 存储过程
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-procedures.html
30.4.4.1 create_synonym_db() 过程
30.4.4.2 diagnostics() 过程
30.4.4.3 execute_prepared_stmt() 过程
30.4.4.4 ps_setup_disable_background_threads() 过程
30.4.4.5 ps_setup_disable_consumer() 过程
30.4.4.6 ps_setup_disable_instrument() 过程
30.4.4.7 ps_setup_disable_thread() 过程
30.4.4.8 ps_setup_enable_background_threads() 过程
30.4.4.9 ps_setup_enable_consumer() 过程
30.4.4.10 ps_setup_enable_instrument() 过程
30.4.4.11 ps_setup_enable_thread() 过程
30.4.4.12 ps_setup_reload_saved() 过程
30.4.4.13 ps_setup_reset_to_default() 过程
30.4.4.14 ps_setup_save() 过程
30.4.4.15 ps_setup_show_disabled() 过程
30.4.4.16 ps_setup_show_disabled_consumers() 过程
30.4.4.17 ps_setup_show_disabled_instruments() 过程
30.4.4.18 ps_setup_show_enabled() 过程
30.4.4.19 ps_setup_show_enabled_consumers() 过程
30.4.4.20 ps_setup_show_enabled_instruments() 过程
30.4.4.21 ps_statement_avg_latency_histogram() 过程
30.4.4.22 ps_trace_statement_digest() 过程
30.4.4.23 ps_trace_thread() 过程
30.4.4.24 ps_truncate_all_tables() 过程
30.4.4.25 statement_performance_analyzer() 过程
30.4.4.26 table_exists() 过程
以下各节描述sys模式存储过程。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-create-synonym-db.html
30.4.4.1 create_synonym_db() 过程
给定一个模式名称,此过程将创建一个包含引用原始模式中所有表和视图的视图的同义词模式。例如,可以使用此方法创建一个更短的名称来引用具有长名称的模式(例如使用info而不是INFORMATION_SCHEMA)。
参数
-
in_db_name VARCHAR(64): 要创建同义词的模式的名称。 -
in_synonym VARCHAR(64): 用于同义词模式的名称。此模式不能已经存在。
示例
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
mysql> CALL sys.create_synonym_db('INFORMATION_SCHEMA', 'info');
+---------------------------------------+
| summary |
+---------------------------------------+
| Created 63 views in the info database |
+---------------------------------------+
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| info |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
mysql> SHOW FULL TABLES FROM info;
+---------------------------------------+------------+
| Tables_in_info | Table_type |
+---------------------------------------+------------+
| character_sets | VIEW |
| collation_character_set_applicability | VIEW |
| collations | VIEW |
| column_privileges | VIEW |
| columns | VIEW |
...
30.4.4.2 The diagnostics() Procedure
为诊断目的创建当前服务器状态报告。
此过程在执行期间通过操纵sql_log_bin系统变量的会话值来禁用二进制日志记录。这是一项受限制的操作,因此该过程需要具有足够权限设置受限制会话变量的权限。请参阅第 7.1.9.1 节,“系统变量权限”。
为diagnostics() Procedure")收集的数据包括以下信息:
-
来自
metrics视图的信息(参见第 30.4.3.21 节,“The metrics View”) -
来自其他相关
sys模式视图的信息,例如确定第 95 百分位数中的查询的视图 -
如果 MySQL 服务器是 NDB Cluster 的一部分,则包括来自
ndbinfo模式的信息 -
复制状态(源和副本)
一些 sys 模式视图被计算为初始(可选)、总体和增量值:
-
初始视图是
diagnostics()Procedure")过程开始时视图的内容。此输出与用于增量视图的开始值相同。如果diagnostics.include_raw配置选项为ON,则包括初始视图。 -
总体视图是
diagnostics()Procedure")过程结束时视图的内容。此输出与用于增量视图的结束值相同。总体视图始终包括在内。 -
增量视图是过程执行开始到结束的差异。最小值和最大值分别是结束视图中的最小值和最大值。它们不一定反映监控期间的最小值和最大值。除了
metrics视图外,增量仅在第一个和最后一个输出之间计算。
参数
-
in_max_runtime INT UNSIGNED: 数据收集的最大时间,单位为秒。使用NULL以收集默认的 60 秒的数据。否则,使用大于 0 的值。 -
in_interval INT UNSIGNED: 数据收集之间的睡眠时间,单位为秒。使用NULL以睡眠默认的 30 秒。否则,使用大于 0 的值。 -
in_auto_config ENUM('current', 'medium', 'full'): 要使用的性能模式配置。允许的值为:-
current: 使用当前仪器和消费者设置。 -
medium: 启用一些仪器和消费者。 -
full:启用所有仪器和消费者。
注意
启用的仪器和消费者越多,对 MySQL 服务器性能的影响就越大。要小心使用
medium设置,尤其是full设置,对性能影响很大。使用
medium或full设置需要SUPER特权。如果选择的设置不是
current,则在过程结束时将恢复当前设置。 -
配置选项
diagnostics() Procedure")操作可以使用以下配置选项或其对应的用户定义变量进行修改(参见 Section 30.4.2.1, “The sys_config Table”):
-
debug,@sys.debug如果此选项为
ON,则生成调试输出。默认为OFF。 -
diagnostics.allow_i_s_tables,@sys.diagnostics.allow_i_s_tables如果此选项为
ON,则允许diagnostics()Procedure")过程在 Information SchemaTABLES表上执行表扫描。如果表很多,这可能会很昂贵。默认为OFF。 -
diagnostics.include_raw,@sys.diagnostics.include_raw如果此选项为
ON,则diagnostics()Procedure")过程的输出包括查询metrics视图的原始输出。默认为OFF。 -
statement_truncate_len,@sys.statement_truncate_lenformat_statement()Function")函数返回的语句的最大长度。超过此长度的语句将被截断。默认为 64。
示例
创建一个诊断报告,每 30 秒开始一次迭代,最多运行 120 秒,使用当前的 Performance Schema 设置:
mysql> CALL sys.diagnostics(120, 30, 'current');
要在运行时将diagnostics()过程的输出捕获到文件中,请使用mysql客户端的tee filename``和notee命令(参见 Section 6.5.1.2, “mysql Client Commands”):
mysql> tee diag.out;
mysql> CALL sys.diagnostics(120, 30, 'current');
mysql> notee;
原文:
dev.mysql.com/doc/refman/8.0/en/sys-execute-prepared-stmt.html
30.4.4.3 execute_prepared_stmt() 过程
给定一个作为字符串的 SQL 语句,将其作为准备好的语句执行。执行后,准备好的语句将被取消分配,因此不会被重用。因此,此过程主要用于一次性执行动态语句。
此过程使用sys_execute_prepared_stmt作为准备好的语句名称。如果在调用过程时存在该语句名称,则其先前的内容将被销毁。
参数
in_query LONGTEXT CHARACTER SET utf8mb3:要执行的语句字符串。
配置选项
execute_prepared_stmt() Procedure") 操作可以使用以下配置选项或其对应的用户定义变量进行修改(参见 Section 30.4.2.1, “The sys_config Table”):
-
debug,@sys.debug如果此选项为
ON,则生成调试输出。默认为OFF。
示例
mysql> CALL sys.execute_prepared_stmt('SELECT COUNT(*) FROM mysql.user');
+----------+
| COUNT(*) |
+----------+
| 15 |
+----------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-disable-background-threads.html
30.4.4.4 ps_setup_disable_background_threads() 过程
禁用性能模式对所有后台线程的仪器化。生成一个结果集,指示禁用了多少个后台线程。已经禁用的线程不计入其中。
参数
无。
示例
mysql> CALL sys.ps_setup_disable_background_threads();
+--------------------------------+
| summary |
+--------------------------------+
| Disabled 24 background threads |
+--------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-disable-consumer.html
30.4.4.5 ps_setup_disable_consumer() 存储过程
禁用包含指定参数的 Performance Schema 消费者。返回一个结果集,指示禁用了多少个消费者。已经禁用的消费者不计入其中。
参数
-
consumer VARCHAR(128): 用于匹配消费者名称的值,可以使用%consumer%作为LIKE模式匹配的操作数来识别消费者名称。值为
''匹配所有消费者。
示例
禁用所有语句消费者:
mysql> CALL sys.ps_setup_disable_consumer('statement');
+----------------------+
| summary |
+----------------------+
| Disabled 4 consumers |
+----------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-disable-instrument.html
30.4.4.6 ps_setup_disable_instrument() 过程
禁用包含参数的性能模式仪器名称。生成一个结果集,指示禁用了多少个仪器。已禁用的仪器不计入其中。
参数
-
in_pattern VARCHAR(128): 用于匹配仪器名称的值,通过在LIKE模式匹配中使用%in_pattern%作为操作数来识别。''的值匹配所有仪器。
示例
禁用特定仪器:
mysql> CALL sys.ps_setup_disable_instrument('wait/lock/metadata/sql/mdl');
+-----------------------+
| summary |
+-----------------------+
| Disabled 1 instrument |
+-----------------------+
禁用所有互斥仪器:
mysql> CALL sys.ps_setup_disable_instrument('mutex');
+--------------------------+
| summary |
+--------------------------+
| Disabled 177 instruments |
+--------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-disable-thread.html
30.4.4.7 ps_setup_disable_thread() 过程
给定连接 ID,禁用线程的性能模式仪表。生成一个结果集,指示禁用了多少个线程。已禁用的线程不计入其中。
参数
in_connection_id BIGINT:连接 ID。这是性能模式threads表中PROCESSLIST_ID列或SHOW PROCESSLIST输出中Id列中给定类型的值。
示例
通过连接 ID 禁用特定连接:
mysql> CALL sys.ps_setup_disable_thread(225);
+-------------------+
| summary |
+-------------------+
| Disabled 1 thread |
+-------------------+
禁用当前连接:
mysql> CALL sys.ps_setup_disable_thread(CONNECTION_ID());
+-------------------+
| summary |
+-------------------+
| Disabled 1 thread |
+-------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-enable-background-threads.html
30.4.4.8 ps_setup_enable_background_threads() 过程
启用性能模式对所有后台线程进行仪器化。生成一个结果集,指示启用了多少个后台线程。已经启用的线程不计入其中。
参数
无。
示例
mysql> CALL sys.ps_setup_enable_background_threads();
+-------------------------------+
| summary |
+-------------------------------+
| Enabled 24 background threads |
+-------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-enable-consumer.html
30.4.4.9 ps_setup_enable_consumer() 过程
启用包含参数的性能模式消费者名称。生成一个结果集,指示启用了多少个消费者。已经启用的消费者不计入其中。
参数
-
consumer VARCHAR(128): 用于匹配消费者名称的值,通过在LIKE模式匹配中使用%consumer%作为操作数来识别。值为
''匹配所有消费者。
示例
启用所有语句消费者:
mysql> CALL sys.ps_setup_enable_consumer('statement');
+---------------------+
| summary |
+---------------------+
| Enabled 4 consumers |
+---------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-enable-instrument.html
30.4.4.10 ps_setup_enable_instrument()过程
启用包含参数的性能模式仪器的名称。生成一个结果集,指示启用了多少个仪器。已启用的仪器不计入其中。
参数
-
in_pattern VARCHAR(128): 用于匹配仪器名称的值,通过在LIKE模式匹配中使用%in_pattern%作为操作数来识别。一个值为
''匹配所有仪器。
示例
启用特定仪器:
mysql> CALL sys.ps_setup_enable_instrument('wait/lock/metadata/sql/mdl');
+----------------------+
| summary |
+----------------------+
| Enabled 1 instrument |
+----------------------+
启用所有互斥仪器:
mysql> CALL sys.ps_setup_enable_instrument('mutex');
+-------------------------+
| summary |
+-------------------------+
| Enabled 177 instruments |
+-------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-enable-thread.html
30.4.4.11 ps_setup_enable_thread() 过程
给定连接 ID,为线程启用性能模式仪器。生成一个结果集,指示启用了多少个线程。已经启用的线程不计入其中。
参数
in_connection_id BIGINT: 连接 ID。这是性能模式threads表中PROCESSLIST_ID列或SHOW PROCESSLIST输出中的Id列中给定类型的值。
示例
通过连接 ID 启用特定连接:
mysql> CALL sys.ps_setup_enable_thread(225);
+------------------+
| summary |
+------------------+
| Enabled 1 thread |
+------------------+
启用当前连接:
mysql> CALL sys.ps_setup_enable_thread(CONNECTION_ID());
+------------------+
| summary |
+------------------+
| Enabled 1 thread |
+------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-reload-saved.html
30.4.4.12 ps_setup_reload_saved() 过程
使用ps_setup_save() Procedure")在同一会话中重新加载先前保存的性能模式配置。有关更多信息,请参阅ps_setup_save() Procedure")的描述。
在执行此过程期间,通过操纵sql_log_bin系统变量的会话值来禁用二进制日志记录。这是一项受限制的操作,因此该过程需要具有足够权限以设置受限制会话变量的权限。请参阅 Section 7.1.9.1, “System Variable Privileges”。
参数
无。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-reset-to-default.html
30.4.4.13 ps_setup_reset_to_default() 过程
将性能模式配置重置为默认设置。
参数
in_verbose BOOLEAN: 是否在过程执行期间显示有关每个设置阶段的信息。这包括执行的 SQL 语句。
示例
mysql> CALL sys.ps_setup_reset_to_default(TRUE)\G
*************************** 1\. row ***************************
status: Resetting: setup_actors
DELETE
FROM performance_schema.setup_actors
WHERE NOT (HOST = '%' AND USER = '%' AND ROLE = '%')
*************************** 1\. row ***************************
status: Resetting: setup_actors
INSERT IGNORE INTO performance_schema.setup_actors
VALUES ('%', '%', '%')
...
30.4.4.14 ps_setup_save() 过程
保存当前性能模式配置。这使您可以暂时更改配置以进行调试或其他目的,然后通过调用ps_setup_reload_saved() 过程")过程将其恢复到先前状态。
为了防止其他同时调用保存配置的操作,ps_setup_save() 过程")通过调用GET_LOCK()函数获取名为sys.ps_setup_save的咨询锁。ps_setup_save() 过程")接受一个超时参数,指示如果锁已经存在(表示其他会话有一个未完成的保存配置),等待多少秒。如果超时时间到期而未获得锁,则ps_setup_save() 过程")会失败。
在同一个会话中稍后调用ps_setup_reload_saved() 过程")是有意义的,因为配置保存在TEMPORARY表中。ps_setup_save() 过程")会删除临时表并释放锁。如果您在不调用ps_setup_save() 过程")的情况下结束会话,表和锁会自动消失。
此过程通过操纵sql_log_bin系统变量的会话值,在执行期间禁用二进制日志记录。这是一项受限制的操作,因此该过程需要具有足够权限以设置受限制会话变量的权限。请参阅 Section 7.1.9.1, “System Variable Privileges”。
参数
in_timeout INT:等待获取sys.ps_setup_save锁的秒数。负超时值表示无限超时。
示例
mysql> CALL sys.ps_setup_save(10);
... *make Performance Schema configuration changes* ...
mysql> CALL sys.ps_setup_reload_saved();
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-disabled.html
30.4.4.15 ps_setup_show_disabled() 过程
显示当前所有已禁用的性能模式配置。
参数
-
in_show_instruments BOOLEAN: 是否显示已禁用的工具。这可能是一个很长的列表。 -
in_show_threads BOOLEAN: 是否显示已禁用的线程。
示例
mysql> CALL sys.ps_setup_show_disabled(TRUE, TRUE);
+----------------------------+
| performance_schema_enabled |
+----------------------------+
| 1 |
+----------------------------+
+---------------+
| enabled_users |
+---------------+
| '%'@'%' |
+---------------+
+-------------+----------------------+---------+-------+
| object_type | objects | enabled | timed |
+-------------+----------------------+---------+-------+
| EVENT | mysql.% | NO | NO |
| EVENT | performance_schema.% | NO | NO |
| EVENT | information_schema.% | NO | NO |
| FUNCTION | mysql.% | NO | NO |
| FUNCTION | performance_schema.% | NO | NO |
| FUNCTION | information_schema.% | NO | NO |
| PROCEDURE | mysql.% | NO | NO |
| PROCEDURE | performance_schema.% | NO | NO |
| PROCEDURE | information_schema.% | NO | NO |
| TABLE | mysql.% | NO | NO |
| TABLE | performance_schema.% | NO | NO |
| TABLE | information_schema.% | NO | NO |
| TRIGGER | mysql.% | NO | NO |
| TRIGGER | performance_schema.% | NO | NO |
| TRIGGER | information_schema.% | NO | NO |
+-------------+----------------------+---------+-------+
...
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-disabled-consumers.html
30.4.4.16 ps_setup_show_disabled_consumers() 过程
显示当前所有已禁用的性能模式消费者。
参数
无。
示例
mysql> CALL sys.ps_setup_show_disabled_consumers();
+----------------------------------+
| disabled_consumers |
+----------------------------------+
| events_stages_current |
| events_stages_history |
| events_stages_history_long |
| events_statements_history |
| events_statements_history_long |
| events_transactions_history |
| events_transactions_history_long |
| events_waits_current |
| events_waits_history |
| events_waits_history_long |
+----------------------------------+
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-disabled-instruments.html
30.4.4.17 ps_setup_show_disabled_instruments() 过程
显示当前所有禁用的性能模式仪器。这可能是一个很长的列表。
参数
无。
示例
mysql> CALL sys.ps_setup_show_disabled_instruments()\G
*************************** 1\. row ***************************
disabled_instruments: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
timed: NO
*************************** 2\. row ***************************
disabled_instruments: wait/synch/mutex/sql/THD::LOCK_query_plan
timed: NO
*************************** 3\. row ***************************
disabled_instruments: wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit
timed: NO
...
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-enabled.html
30.4.4.18 ps_setup_show_enabled() 过程
显示当前所有已启用的性能模式配置。
参数
-
in_show_instruments BOOLEAN: 是否显示已启用的仪器。这可能是一个很长的列表。 -
in_show_threads BOOLEAN: 是否显示已启用的线程。
示例
mysql> CALL sys.ps_setup_show_enabled(FALSE, FALSE);
+----------------------------+
| performance_schema_enabled |
+----------------------------+
| 1 |
+----------------------------+
1 row in set (0.01 sec)
+---------------+
| enabled_users |
+---------------+
| '%'@'%' |
+---------------+
1 row in set (0.01 sec)
+-------------+---------+---------+-------+
| object_type | objects | enabled | timed |
+-------------+---------+---------+-------+
| EVENT | %.% | YES | YES |
| FUNCTION | %.% | YES | YES |
| PROCEDURE | %.% | YES | YES |
| TABLE | %.% | YES | YES |
| TRIGGER | %.% | YES | YES |
+-------------+---------+---------+-------+
5 rows in set (0.02 sec)
+-----------------------------+
| enabled_consumers |
+-----------------------------+
| events_statements_current |
| events_statements_history |
| events_transactions_current |
| events_transactions_history |
| global_instrumentation |
| statements_digest |
| thread_instrumentation |
+-----------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-enabled-consumers.html
30.4.4.19 ps_setup_show_enabled_consumers() 过程
显示当前所有已启用的性能模式消费者。
参数
无。
示例
mysql> CALL sys.ps_setup_show_enabled_consumers();
+-----------------------------+
| enabled_consumers |
+-----------------------------+
| events_statements_current |
| events_statements_history |
| events_transactions_current |
| events_transactions_history |
| global_instrumentation |
| statements_digest |
| thread_instrumentation |
+-----------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-setup-show-enabled-instruments.html
30.4.4.20 ps_setup_show_enabled_instruments() 过程
显示当前启用的所有性能模式仪器。这可能是一个很长的列表。
参数
无。
示例
mysql> CALL sys.ps_setup_show_enabled_instruments()\G
*************************** 1\. row ***************************
enabled_instruments: wait/io/file/sql/map
timed: YES
*************************** 2\. row ***************************
enabled_instruments: wait/io/file/sql/binlog
timed: YES
*************************** 3\. row ***************************
enabled_instruments: wait/io/file/sql/binlog_cache
timed: YES
...
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-statement-avg-latency-histogram.html
30.4.4.21 ps_statement_avg_latency_histogram() 过程
显示跨所有在性能模式中跟踪的标准化语句中的平均延迟值的文本直方图图表events_statements_summary_by_digest表。
此过程可用于显示在此 MySQL 实例中运行的语句的延迟分布的非常高级别的图像。
参数
无。
示例
直方图输出以语句单位为单位。例如,在直方图图例中,* = 2 units 表示每个 * 字符代表 2 个语句。
mysql> CALL sys.ps_statement_avg_latency_histogram()\G
*************************** 1\. row ***************************
Performance Schema Statement Digest Average Latency Histogram:
. = 1 unit
* = 2 units
# = 3 units
(0 - 66ms) 88 | #############################
(66 - 133ms) 14 | ..............
(133 - 199ms) 4 | ....
(199 - 265ms) 5 | **
(265 - 332ms) 1 | .
(332 - 398ms) 0 |
(398 - 464ms) 1 | .
(464 - 531ms) 0 |
(531 - 597ms) 0 |
(597 - 663ms) 0 |
(663 - 730ms) 0 |
(730 - 796ms) 0 |
(796 - 863ms) 0 |
(863 - 929ms) 0 |
(929 - 995ms) 0 |
(995 - 1062ms) 0 |
Total Statements: 114; Buckets: 16; Bucket Size: 66 ms;
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-trace-statement-digest.html
30.4.4.22 ps_trace_statement_digest() 过程
跟踪特定语句摘要的所有性能模式仪表板。
如果在性能模式events_statements_summary_by_digest表中找到感兴趣的语句,请将其DIGEST列的 MD5 值指定给该过程,并指示轮询持续时间和间隔。结果是在该间隔内跟踪的性能模式中的所有统计信息报告。
该过程还尝试在间隔期间执行EXPLAIN以解释摘要中运行时间最长的示例。这次尝试可能会失败,因为性能模式会截断较长的SQL_TEXT值。因此,由于解析错误,EXPLAIN失败。
该过程通过操纵sql_log_bin系统变量的会话值,在执行过程中禁用二进制日志记录。这是一个受限操作,因此该过程需要具有足够权限设置受限会话变量的权限。请参阅 Section 7.1.9.1, “System Variable Privileges”。
参数
-
in_digest VARCHAR(32):要分析的语句摘要标识符。 -
in_runtime INT:分析运行的持续时间,单位为秒。 -
in_interval DECIMAL(2,2):尝试在秒内(可以是小数)进行快照的分析间隔。 -
in_start_fresh BOOLEAN:是否在开始之前截断性能模式events_statements_history_long和events_stages_history_long表。 -
in_auto_enable BOOLEAN:是否自动启用所需的消费者。
示例
mysql> CALL sys.ps_trace_statement_digest('891ec6860f98ba46d89dd20b0c03652c', 10, 0.1, TRUE, TRUE);
+--------------------+
| SUMMARY STATISTICS |
+--------------------+
| SUMMARY STATISTICS |
+--------------------+
1 row in set (9.11 sec)
+------------+-----------+-----------+-----------+---------------+------------+------------+
| executions | exec_time | lock_time | rows_sent | rows_examined | tmp_tables | full_scans |
+------------+-----------+-----------+-----------+---------------+------------+------------+
| 21 | 4.11 ms | 2.00 ms | 0 | 21 | 0 | 0 |
+------------+-----------+-----------+-----------+---------------+------------+------------+
1 row in set (9.11 sec)
+------------------------------------------+-------+-----------+
| event_name | count | latency |
+------------------------------------------+-------+-----------+
| stage/sql/statistics | 16 | 546.92 us |
| stage/sql/freeing items | 18 | 520.11 us |
| stage/sql/init | 51 | 466.80 us |
...
| stage/sql/cleaning up | 18 | 11.92 us |
| stage/sql/executing | 16 | 6.95 us |
+------------------------------------------+-------+-----------+
17 rows in set (9.12 sec)
+---------------------------+
| LONGEST RUNNING STATEMENT |
+---------------------------+
| LONGEST RUNNING STATEMENT |
+---------------------------+
1 row in set (9.16 sec)
+-----------+-----------+-----------+-----------+---------------+------------+-----------+
| thread_id | exec_time | lock_time | rows_sent | rows_examined | tmp_tables | full_scan |
+-----------+-----------+-----------+-----------+---------------+------------+-----------+
| 166646 | 618.43 us | 1.00 ms | 0 | 1 | 0 | 0 |
+-----------+-----------+-----------+-----------+---------------+------------+-----------+
1 row in set (9.16 sec)
# Truncated for clarity...
+-----------------------------------------------------------------+
| sql_text |
+-----------------------------------------------------------------+
| select hibeventhe0_.id as id1382_, hibeventhe0_.createdTime ... |
+-----------------------------------------------------------------+
1 row in set (9.17 sec)
+------------------------------------------+-----------+
| event_name | latency |
+------------------------------------------+-----------+
| stage/sql/init | 8.61 us |
| stage/sql/init | 331.07 ns |
...
| stage/sql/freeing items | 30.46 us |
| stage/sql/cleaning up | 662.13 ns |
+------------------------------------------+-----------+
18 rows in set (9.23 sec)
+----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+
| 1 | SIMPLE | hibeventhe0_ | const | fixedTime | fixedTime | 775 | const,const | 1 | NULL |
+----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+
1 row in set (9.27 sec)
Query OK, 0 rows affected (9.28 sec)
30.4.4.23 ps_trace_thread() 过程
将一个被仪器化线程的所有性能模式数据转储到一个.dot格式的图形文件(用于 DOT 图形描述语言)。每个从该过程返回的结果集应用于一个完整的图形。
该过程在执行过程中通过操纵sql_log_bin系统变量的会话值来禁用二进制日志记录。这是一个受限操作,因此该过程需要具有足够权限来设置受限会话变量。参见 Section 7.1.9.1, “System Variable Privileges”。
参数
-
in_thread_id INT: 要跟踪的线程。 -
in_outfile VARCHAR(255): 用于.dot输出文件的名称。 -
in_max_runtime DECIMAL(20,2): 收集数据的最大秒数(可以是小数)。使用NULL来收集默认的 60 秒数据。 -
in_interval DECIMAL(20,2): 在数据收集之间休眠的秒数(可以是小数)。使用NULL来休眠默认的 1 秒。 -
in_start_fresh BOOLEAN: 是否在跟踪之前重置所有性能模式数据。 -
in_auto_setup BOOLEAN: 是否禁用所有其他线程并启用所有仪器和消费者。这也会在运行结束时重置设置。 -
in_debug BOOLEAN: 是否在图中包含file:lineno信息。
示例
mysql> CALL sys.ps_trace_thread(25, CONCAT('/tmp/stack-', REPLACE(NOW(), ' ', '-'), '.dot'), NULL, NULL, TRUE, TRUE, TRUE);
+-------------------+
| summary |
+-------------------+
| Disabled 1 thread |
+-------------------+
1 row in set (0.00 sec)
+---------------------------------------------+
| Info |
+---------------------------------------------+
| Data collection starting for THREAD_ID = 25 |
+---------------------------------------------+
1 row in set (0.03 sec)
+-----------------------------------------------------------+
| Info |
+-----------------------------------------------------------+
| Stack trace written to /tmp/stack-2014-02-16-21:18:41.dot |
+-----------------------------------------------------------+
1 row in set (60.07 sec)
+-------------------------------------------------------------------+
| Convert to PDF |
+-------------------------------------------------------------------+
| dot -Tpdf -o /tmp/stack_25.pdf /tmp/stack-2014-02-16-21:18:41.dot |
+-------------------------------------------------------------------+
1 row in set (60.07 sec)
+-------------------------------------------------------------------+
| Convert to PNG |
+-------------------------------------------------------------------+
| dot -Tpng -o /tmp/stack_25.png /tmp/stack-2014-02-16-21:18:41.dot |
+-------------------------------------------------------------------+
1 row in set (60.07 sec)
+------------------+
| summary |
+------------------+
| Enabled 1 thread |
+------------------+
1 row in set (60.32 sec)
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-truncate-all-tables.html
30.4.4.24 ps_truncate_all_tables() 过程
截断所有性能模式摘要表,重置所有聚合仪表作为快照的指令。生成一个结果集,指示截断了多少个表。
参数
in_verbose BOOLEAN:是否在执行之前显示每个TRUNCATE TABLE语句。
示例
mysql> CALL sys.ps_truncate_all_tables(FALSE);
+---------------------+
| summary |
+---------------------+
| Truncated 49 tables |
+---------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-statement-performance-analyzer.html
30.4.4.25 statement_performance_analyzer()过程
创建一个报告,显示服务器上正在运行的语句。视图是基于整体和/或增量活动计算的。
在执行此过程期间,通过操纵sql_log_bin系统变量的会话值来禁用二进制日志记录。这是一个受限制的操作,因此该过程需要具有足够权限以设置受限制会话变量的权限。请参阅第 7.1.9.1 节,“系统变量权限”。
参数
-
in_action ENUM('snapshot', 'overall', 'delta', 'create_tmp', 'create_table', 'save', 'cleanup'): 执行的操作。允许使用以下数值:-
snapshot: 存储一个快照。默认情况下,会对性能模式events_statements_summary_by_digest表的当前内容进行快照。通过设置in_table,可以覆盖为复制指定表的内容。快照存储在sys模式下的tmp_digests临时表中。 -
overall: 基于由in_table指定的表的内容生成分析。对于整体分析,in_table可以是NOW()以使用最新快照。这会覆盖现有快照。对于in_table为NULL的情况,使用现有快照。如果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,不使用任何反引号 (```sql) identifier-quoting characters. Periods (.) are not supported in database and table names.The meaning of the
in_tablevalue for eachin_actionvalue is detailed in the individualin_actionvalue descriptions.
-
in_views SET ('with_runtimes_in_95th_percentile', 'analysis', 'with_errors_or_warnings', 'with_full_table_scans', 'with_sorting', 'with_temp_tables', 'custom'): Which views to include. This parameter is aSETvalue, so it can contain multiple view names, separated by commas. The default is to include all views exceptcustom. The following values are permitted:-
with_runtimes_in_95th_percentile: Use thestatements_with_runtimes_in_95th_percentileview. -
analysis: Use thestatement_analysisview. -
with_errors_or_warnings: Use thestatements_with_errors_or_warningsview. -
with_full_table_scans: Use thestatements_with_full_table_scansview. -
with_sorting: Use thestatements_with_sortingview. -
with_temp_tables: Use thestatements_with_temp_tablesview. -
custom: Use a custom view. This view must be specified using thestatement_performance_analyzer.viewconfiguration option to name a query or an existing view.
-
Configuration Options
statement_performance_analyzer() Procedure") operation can be modified using the following configuration options or their corresponding user-defined variables (see Section 30.4.2.1, “The sys_config Table”):
-
debug,@sys.debugIf this option is
ON, produce debugging output. The default isOFF. -
statement_performance_analyzer.limit,@sys.statement_performance_analyzer.limitThe maximum number of rows to return for views that have no built-in limit. The default is 100.
-
statement_performance_analyzer.view,@sys.statement_performance_analyzer.viewThe custom query or view to be used. If the option value contains a space, it is interpreted as a query. Otherwise, it must be the name of an existing view that queries the Performance Schema
events_statements_summary_by_digesttable. There cannot be anyLIMITclause in the query or view definition if thestatement_performance_analyzer.limitconfiguration option is greater than 0. If specifying a view, use the same format as for thein_tableparameter. The default isNULL(no custom view defined).
Example
To create a report with the queries in the 95th percentile since the last truncation of events_statements_summary_by_digest and with a one-minute delta period:
-
Create a temporary table to store the initial snapshot.
-
Create the initial snapshot.
-
Save the initial snapshot in the temporary table.
-
Wait one minute.
-
Create a new snapshot.
-
Perform analysis based on the new snapshot.
-
Perform analysis based on the delta between the initial and new snapshots.
mysql> 调用 sys.statement_performance_analyzer('create_tmp', 'mydb.tmp_digests_ini', NULL);
查询成功,0 行受影响 (0.08 秒)
mysql> 调用 sys.statement_performance_analyzer('snapshot', NULL, NULL);
查询成功,0 行受影响 (0.02 秒)
mysql> 调用 sys.statement_performance_analyzer('save', 'mydb.tmp_digests_ini', NULL);
查询成功,0 行受影响 (0.00 秒)
mysql> 休眠 60 秒;
查询成功,0 行受影响 (1 分 0.00 秒)
mysql> 调用 sys.statement_performance_analyzer('snapshot', NULL, NULL);
查询成功,0 行受影响 (0.02 秒)
mysql> 调用 sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile');
+-----------------------------------------+
| 下一个输出 |
| --- |
+-----------------------------------------+
| 运行时间在第 95 百分位数的查询 |
| --- |
+-----------------------------------------+
1 行受影响 (0.05 秒)
...
mysql> 调用 sys.statement_performance_analyzer('delta', 'mydb.tmp_digests_ini', 'with_runtimes_in_95th_percentile');
+-----------------------------------------+
| 下一个输出 |
| --- |
+-----------------------------------------+
| 运行时间在第 95 百分位数的查询 |
| --- |
+-----------------------------------------+
1 行受影响 (0.03 秒)
...
```sql
Create an overall report of the 95th percentile queries and the top 10 queries with full table scans:
mysql> 调用 sys.statement_performance_analyzer('snapshot', NULL, NULL);
查询成功,0 行受影响 (0.01 秒)
mysql> 设�� @sys.statement_performance_analyzer.limit = 10;
查询成功,0 行受影响 (0.00 秒)
mysql> 调用 sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile,with_full_table_scans');
+-----------------------------------------+
| 下一个输出 |
|---|
+-----------------------------------------+
| 运行时间在第 95 百分位数的查询 |
|---|
+-----------------------------------------+
1 行受影响 (0.01 秒)
...
+-------------------------------------+
| 下一个输出 |
|---|
+-------------------------------------+
| 具有全表扫描的前 10 个查询 |
|---|
+-------------------------------------+
1 行受影响 (0.09 秒)
...
Use a custom view showing the top 10 queries sorted by total execution time, refreshing the view every minute using the **watch** command in Linux:
mysql> 创建或替换视图 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
按 SUM_TIMER_WAIT 降序排列;
查询成功,0 行受影响 (0.10 秒)
mysql> 调用 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);
""
每隔 60.0 秒: mysql sys --table -e " ... Mon Dec 22 10:58:51 2014
+----------------------------------+
| 下一个输出 |
|---|
+----------------------------------+
| 前 10 个使用自定义视图的查询 |
|---|
+----------------------------------+
+-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+
| 查询 | 数据库 | 执行次数 | 总延迟 | 平均延迟 | 平均发送行数 | 平均检查行数 | 平均影响行数 | 摘要 |
|---|
+-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+
...
> 原文:[`dev.mysql.com/doc/refman/8.0/en/sys-table-exists.html`](https://dev.mysql.com/doc/refman/8.0/en/sys-table-exists.html)
#### 30.4.4.26 table_exists() 过程
测试给定表是否存在为常规表、`TEMPORARY`表或视图。过程将表类型返回到一个`OUT`参数中。如果同名的临时表和永久表都存在,则返回`TEMPORARY`。
##### 参数
+ `in_db VARCHAR(64)`: 要检查表存在性的数据库名。
+ `in_table VARCHAR(64)`: 要检查存在性的表名。
+ `out_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY')`: 返回值。这是一个`OUT`参数,因此必须是一个可以存储表类型的变量。当过程返回时,变量具有以下值之一,指示表是否存在:
+ `''`: 表名不存在为基本表、`TEMPORARY`表或视图。
+ `BASE TABLE`: 表名存在为基本(永久)表。
+ `VIEW`: 表名存在为视图。
+ `TEMPORARY`: 表名存在为`TEMPORARY`表。
##### 示例
```sql
mysql> CREATE DATABASE db1;
Query OK, 1 row affected (0.01 sec)
mysql> USE db1;
Database changed
mysql> CREATE TABLE t1 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE t2 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.20 sec)
mysql> CREATE view v_t1 AS SELECT * FROM t1;
Query OK, 0 rows affected (0.02 sec)
mysql> CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY);
Query OK, 0 rows affected (0.00 sec)
mysql> CALL sys.table_exists('db1', 't1', @exists); SELECT @exists;
Query OK, 0 rows affected (0.01 sec)
+-----------+
| @exists |
+-----------+
| TEMPORARY |
+-----------+
1 row in set (0.00 sec)
mysql> CALL sys.table_exists('db1', 't2', @exists); SELECT @exists;
Query OK, 0 rows affected (0.02 sec)
+------------+
| @exists |
+------------+
| BASE TABLE |
+------------+
1 row in set (0.00 sec)
mysql> CALL sys.table_exists('db1', 'v_t1', @exists); SELECT @exists;
Query OK, 0 rows affected (0.02 sec)
+---------+
| @exists |
+---------+
| VIEW |
+---------+
1 row in set (0.00 sec)
mysql> CALL sys.table_exists('db1', 't3', @exists); SELECT @exists;
Query OK, 0 rows affected (0.00 sec)
+---------+
| @exists |
+---------+
| |
+---------+
1 row in set (0.00 sec)
30.4.5 sys Schema 存储函数
原文:
dev.mysql.com/doc/refman/8.0/en/sys-schema-functions.html
30.4.5.1 extract_schema_from_file_name() 函数
30.4.5.2 extract_table_from_file_name() 函数
30.4.5.3 format_bytes() 函数
30.4.5.4 format_path() 函数
30.4.5.5 format_statement() 函数
30.4.5.6 format_time() 函数
30.4.5.7 list_add() 函数
30.4.5.8 list_drop() 函数
30.4.5.9 ps_is_account_enabled() 函数
30.4.5.10 ps_is_consumer_enabled() 函数
30.4.5.11 ps_is_instrument_default_enabled() 函数
30.4.5.12 ps_is_instrument_default_timed() 函数
30.4.5.13 ps_is_thread_instrumented() 函数
30.4.5.14 ps_thread_account() 函数
30.4.5.15 ps_thread_id() 函数
30.4.5.16 ps_thread_stack() 函数
30.4.5.17 ps_thread_trx_info() 函数
30.4.5.18 quote_identifier() 函数
30.4.5.19 sys_get_config() 函数
30.4.5.20 version_major() 函数
30.4.5.21 version_minor() 函数
30.4.5.22 version_patch() 函数
以下章节描述 sys schema 存储函数。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-extract-schema-from-file-name.html
30.4.5.1 extract_schema_from_file_name() 函数
给定文件路径名,返回表示模式名称的路径组件。此函数假定文件名位于模式目录中。因此,它不适用于使用其自己的DATA_DIRECTORY表选项定义的分区或表。
此函数在从包含文件路径名的性能模式中提取文件 I/O 信息时非常有用。它提供了一种方便的方式来显示模式名称,这比完整路径名更容易理解,并且可以用于与对象模式名称进行连接。
参数
path VARCHAR(512): 数据文件的完整路径,用于提取模式名称。
返回值
一个VARCHAR(64)值。
示例
mysql> SELECT sys.extract_schema_from_file_name('/usr/local/mysql/data/world/City.ibd');
+---------------------------------------------------------------------------+
| sys.extract_schema_from_file_name('/usr/local/mysql/data/world/City.ibd') |
+---------------------------------------------------------------------------+
| world |
+---------------------------------------------------------------------------+
30.4.5.3 format_bytes() 函数
注意
截至 MySQL 8.0.16 版本,format_bytes()`` 函数") 已被弃用,并可能在未来的 MySQL 版本中移除。使用该函数的应用程序应迁移到使用内置的 FORMAT_BYTES()` 函数。参见 Section 14.21, “Performance Schema Functions”
给定一个字节计数,将其转换为人类可读的格式,并返回一个由值和单位指示器组成的字符串。根据值的大小,单位部分可以是 bytes、KiB(kibibytes)、MiB(mebibytes)、GiB(gibibytes)、TiB(tebibytes)或 PiB(pebibytes)。
参数
bytes TEXT:要格式化的字节计数。
返回值
一个 TEXT 值。
示例
mysql> SELECT sys.format_bytes(512), sys.format_bytes(18446644073709551615);
+-----------------------+----------------------------------------+
| sys.format_bytes(512) | sys.format_bytes(18446644073709551615) |
+-----------------------+----------------------------------------+
| 512 bytes | 16383.91 PiB |
+-----------------------+----------------------------------------+
30.4.5.4 format_path()函数
给定一个路径名,返回在按顺序替换以下系统变量的值匹配的子路径后的修改路径名:
datadir
tmpdir
slave_load_tmpdir or replica_load_tmpdir
innodb_data_home_dir
innodb_log_group_home_dir
innodb_undo_directory
basedir
与系统变量sysvar的值匹配的值将被替换为字符串@@GLOBAL.*sysvar*。
参数
path VARCHAR(512): 要格式化的路径名。
返回数值
一个VARCHAR(512) CHARACTER SET utf8mb3的数值。
示例
mysql> SELECT sys.format_path('/usr/local/mysql/data/world/City.ibd');
+---------------------------------------------------------+
| sys.format_path('/usr/local/mysql/data/world/City.ibd') |
+---------------------------------------------------------+
| @@datadir/world/City.ibd |
+---------------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-format-statement.html
30.4.5.5 The format_statement() Function
给定一个字符串(通常表示一个 SQL 语句),将其缩短到statement_truncate_len配置选项指定的长度,并返回结果。如果字符串短于statement_truncate_len,则不会进行截断。否则,字符串的中间部分将被省略号(...)替换。
此函数对从性能模式表中检索的可能较长的语句进行格式化,使其达到已知的固定最大长度。
参数
statement LONGTEXT:需要格式化的语句。
配置选项
format_statement() Function") 操作可以使用以下配置选项或其对应的用户定义变量进行修改(参见第 30.4.2.1 节,“sys_config 表”):
-
statement_truncate_len,@sys.statement_truncate_lenformat_statement()Function") 函数返回的语句的最大长度。超过此长度的语句将被截断至此长度。默认值为 64。
返回值
一个LONGTEXT值。
示例
默认情况下,format_statement() Function") 将语句截断为不超过 64 个字符。设置@sys.statement_truncate_len会改变当前会话的截断长度:
mysql> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
mysql> SET @sys.statement_truncate_len = 32;
mysql> SELECT sys.format_statement(@stmt);
+-----------------------------------+
| sys.format_statement(@stmt) |
+-----------------------------------+
| SELECT variabl ... ROM sys_config |
+-----------------------------------+
30.4.5.6 format_time() 函数
注意
从 MySQL 8.0.16 开始,format_time() Function") 已被弃用,并将在未来的 MySQL 版本中移除。使用它的应用程序应该迁移到使用内置的 FORMAT_PICO_TIME() 函数。参见 Section 14.21, “Performance Schema Functions”
给定一个以皮秒为单位的性能模式延迟或等待时间,将其转换为人类可读的格式,并返回一个由值和单位指示器组成的字符串。根据值的大小,单位部分可以是 ps(皮秒)、ns(纳秒)、us(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)或 w(周)。
参数
picoseconds TEXT:要格式化的皮秒值。
返回值
一个 TEXT 值。
示例
mysql> SELECT sys.format_time(3501), sys.format_time(188732396662000);
+-----------------------+----------------------------------+
| sys.format_time(3501) | sys.format_time(188732396662000) |
+-----------------------+----------------------------------+
| 3.50 ns | 3.15 m |
+-----------------------+----------------------------------+
30.4.5.7 list_add()函数
将一个值添加到逗号分隔的值列表中并返回结果。
这个函数和list_drop() Function")对于操作系统变量的值非常有用,比如sql_mode和optimizer_switch,它们接受一个逗号分隔的值列表。
参数
-
in_list TEXT:需要修改的列表。 -
in_add_value TEXT:要添加到列表中的值。
返回值
一个TEXT值。
示例
mysql> SELECT @@sql_mode;
+----------------------------------------+
| @@sql_mode |
+----------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES |
+----------------------------------------+
mysql> SET @@sql_mode = sys.list_add(@@sql_mode, 'NO_ENGINE_SUBSTITUTION');
mysql> SELECT @@sql_mode;
+---------------------------------------------------------------+
| @@sql_mode |
+---------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------------------------------------------------------+
mysql> SET @@sql_mode = sys.list_drop(@@sql_mode, 'ONLY_FULL_GROUP_BY');
mysql> SELECT @@sql_mode;
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
30.4.5.8 list_drop() 函数
从逗号分隔的值列表中删除一个值并返回结果。更多信息,请参阅 `list_add()`` 函数") 的描述。
参数
-
in_list TEXT: 要修改的列表。 -
in_drop_value TEXT: 要从列表中删除的值。
返回值
一个 TEXT 值。
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-is-account-enabled.html
30.4.5.9 ps_is_account_enabled() 函数
返回 YES 或 NO 表示给定账户的性能模式仪器是否已启用。
参数
-
in_host VARCHAR(60): 要检查的账户的主机名。 -
in_user VARCHAR(32): 要检查的账户的用户名。
返回值
一个 ENUM('YES','NO') 值。
示例
mysql> SELECT sys.ps_is_account_enabled('localhost', 'root');
+------------------------------------------------+
| sys.ps_is_account_enabled('localhost', 'root') |
+------------------------------------------------+
| YES |
+------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-is-consumer-enabled.html
30.4.5.10 ps_is_consumer_enabled() 函数
返回YES或NO以指示给定的性能模式消费者是否已启用,如果参数为NULL,则返回NULL。如果参数不是有效的消费者名称,则会发生错误。(在 MySQL 8.0.18 之前,如果参数不是有效的消费者名称,则函数将返回NULL。)
该函数考虑了消费者层次结构,因此除非所有依赖的消费者也处于启用状态,否则不会被视为已启用。有关消费者层次结构的信息,请参见第 29.4.7 节,“按消费者进行预过滤”。
参数
in_consumer VARCHAR(64): 要检查的消费者的名称。
返回值
一个ENUM('YES','NO')值。
示例
mysql> SELECT sys.ps_is_consumer_enabled('thread_instrumentation');
+------------------------------------------------------+
| sys.ps_is_consumer_enabled('thread_instrumentation') |
+------------------------------------------------------+
| YES |
+------------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-is-instrument-default-enabled.html
30.4.5.11 ps_is_instrument_default_enabled()函数
返回YES或NO,指示给定的性能模式工具是否默认启用。
参数
in_instrument VARCHAR(128): 要检查的工具的名称。
返回值
一个ENUM('YES','NO')值。
示例
mysql> SELECT sys.ps_is_instrument_default_enabled('memory/innodb/row_log_buf');
+-------------------------------------------------------------------+
| sys.ps_is_instrument_default_enabled('memory/innodb/row_log_buf') |
+-------------------------------------------------------------------+
| NO |
+-------------------------------------------------------------------+
mysql> SELECT sys.ps_is_instrument_default_enabled('statement/sql/alter_user');
+------------------------------------------------------------------+
| sys.ps_is_instrument_default_enabled('statement/sql/alter_user') |
+------------------------------------------------------------------+
| YES |
+------------------------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-is-instrument-default-timed.html
30.4.5.12 ps_is_instrument_default_timed()函数
返回YES或NO,指示给定的性能模式工具是否默认计时。
参数
in_instrument VARCHAR(128): 要检查的工具的名称。
返回值
一个ENUM('YES','NO')值。
示例
mysql> SELECT sys.ps_is_instrument_default_timed('memory/innodb/row_log_buf');
+-----------------------------------------------------------------+
| sys.ps_is_instrument_default_timed('memory/innodb/row_log_buf') |
+-----------------------------------------------------------------+
| NO |
+-----------------------------------------------------------------+
mysql> SELECT sys.ps_is_instrument_default_timed('statement/sql/alter_user');
+----------------------------------------------------------------+
| sys.ps_is_instrument_default_timed('statement/sql/alter_user') |
+----------------------------------------------------------------+
| YES |
+----------------------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-is-thread-instrumented.html
30.4.5.13 ps_is_thread_instrumented()函数
返回YES或NO以指示给定连接 ID 的性能模式仪器是否启用,如果 ID 未知则返回UNKNOWN,如果 ID 为NULL则返回NULL。
参数
in_connection_id BIGINT UNSIGNED:连接 ID。这是性能模式threads表中PROCESSLIST_ID列或SHOW PROCESSLIST输出中Id列中给定类型的值。
返回值
一个ENUM('YES','NO','UNKNOWN')值。
示例
mysql> SELECT sys.ps_is_thread_instrumented(43);
+-----------------------------------+
| sys.ps_is_thread_instrumented(43) |
+-----------------------------------+
| UNKNOWN |
+-----------------------------------+
mysql> SELECT sys.ps_is_thread_instrumented(CONNECTION_ID());
+------------------------------------------------+
| sys.ps_is_thread_instrumented(CONNECTION_ID()) |
+------------------------------------------------+
| YES |
+------------------------------------------------+
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-account.html
30.4.5.14 ps_thread_account()函数
给定一个性能模式线程 ID,返回与该线程关联的*user_name*@*host_name*账户。
参数
in_thread_id BIGINT UNSIGNED:要返回账户的线程 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。
返回值
一个TEXT值。
示例
mysql> SELECT sys.ps_thread_account(sys.ps_thread_id(CONNECTION_ID()));
+----------------------------------------------------------+
| sys.ps_thread_account(sys.ps_thread_id(CONNECTION_ID())) |
+----------------------------------------------------------+
| root@localhost |
+----------------------------------------------------------+
30.4.5.15 ps_thread_id()函数
注意
截至 MySQL 8.0.16,ps_thread_id() Function")已被弃用,并将在未来的 MySQL 版本中移除。使用它的应用程序应该迁移到使用内置的PS_THREAD_ID()和PS_CURRENT_THREAD_ID()函数。参见第 14.21 节,“性能模式函数”
返回给定连接 ID 分配的性能模式线程 ID,如果连接 ID 为NULL,则返回当前连接的线程 ID。
参数
in_connection_id BIGINT UNSIGNED: 要返回线程 ID 的连接的 ID。这是性能模式threads表中PROCESSLIST_ID列中给定类型的值,或SHOW PROCESSLIST输出中的Id列。
返回值
一个BIGINT UNSIGNED值。
示例
mysql> SELECT sys.ps_thread_id(260);
+-----------------------+
| sys.ps_thread_id(260) |
+-----------------------+
| 285 |
+-----------------------+
30.4.5.16 ps_thread_stack() 函数
返回给定线程 ID 的性能模式中所有语句、阶段和事件的 JSON 格式堆栈。
参数
-
in_thread_id BIGINT: 要跟踪的线程的 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。 -
in_verbose BOOLEAN: 是否在事件中包含file:lineno信息。
返回值
一个LONGTEXT CHARACTER SET latin1值。
示例
mysql> SELECT sys.ps_thread_stack(37, FALSE) AS thread_stack\G
*************************** 1\. row ***************************
thread_stack: {"rankdir": "LR","nodesep": "0.10",
"stack_created": "2014-02-19 13:39:03", "mysql_version": "8.0.2-dmr-debug-log",
"mysql_user": "root@localhost","events": [{"nesting_event_id": "0",
"event_id": "10", "timer_wait": 256.35, "event_info": "sql/select",
"wait_info": "select @@version_comment limit 1\nerrors: 0\nwarnings: 0\nlock time:
...
原文:
dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-trx-info.html
30.4.5.17 The ps_thread_trx_info() Function
返回一个包含有关给定线程信息的 JSON 对象。该信息包括当前事务以及它已经执行的语句,从性能模式events_transactions_current和events_statements_history表中获取的。(这些表的消费者必须启用才能在 JSON 对象中获取完整数据。)
如果输出超过截断长度(默认为 65535),将返回一个 JSON 错误对象,例如:
{ "error": "Trx info truncated: Row 6 was cut by GROUP_CONCAT()" }
在函数执行期间引发的其他警告和异常会返回类似的错误对象。
参数
in_thread_id BIGINT UNSIGNED:要返回事务信息的线程 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。
配置选项
ps_thread_trx_info() Function") 操作可以使用以下配置选项或它们对应的用户定义变量进行修改(参见第 30.4.2.1 节,“sys_config 表”):
-
ps_thread_trx_info.max_length,@sys.ps_thread_trx_info.max_length输出的最大长度。默认为 65535。
返回值
一个LONGTEXT值。
示例
mysql> SELECT sys.ps_thread_trx_info(48)\G
*************************** 1\. row ***************************
sys.ps_thread_trx_info(48): [
{
"time": "790.70 us",
"state": "COMMITTED",
"mode": "READ WRITE",
"autocommitted": "NO",
"gtid": "AUTOMATIC",
"isolation": "REPEATABLE READ",
"statements_executed": [
{
"sql_text": "INSERT INTO info VALUES (1, \'foo\')",
"time": "471.02 us",
"schema": "trx",
"rows_examined": 0,
"rows_affected": 1,
"rows_sent": 0,
"tmp_tables": 0,
"tmp_disk_tables": 0,
"sort_rows": 0,
"sort_merge_passes": 0
},
{
"sql_text": "COMMIT",
"time": "254.42 us",
"schema": "trx",
"rows_examined": 0,
"rows_affected": 0,
"rows_sent": 0,
"tmp_tables": 0,
"tmp_disk_tables": 0,
"sort_rows": 0,
"sort_merge_passes": 0
}
]
},
{
"time": "426.20 us",
"state": "COMMITTED",
"mode": "READ WRITE",
"autocommitted": "NO",
"gtid": "AUTOMATIC",
"isolation": "REPEATABLE READ",
"statements_executed": [
{
"sql_text": "INSERT INTO info VALUES (2, \'bar\')",
"time": "107.33 us",
"schema": "trx",
"rows_examined": 0,
"rows_affected": 1,
"rows_sent": 0,
"tmp_tables": 0,
"tmp_disk_tables": 0,
"sort_rows": 0,
"sort_merge_passes": 0
},
{
"sql_text": "COMMIT",
"time": "213.23 us",
"schema": "trx",
"rows_examined": 0,
"rows_affected": 0,
"rows_sent": 0,
"tmp_tables": 0,
"tmp_disk_tables": 0,
"sort_rows": 0,
"sort_merge_passes": 0
}
]
}
]
原文:
dev.mysql.com/doc/refman/8.0/en/sys-quote-identifier.html
30.4.5.18 quote_identifier()函数
给定一个字符串参数,此函数生成一个适合包含在 SQL 语句中的带引号标识符。当要用作标识符的值是保留字或包含反引号时,这将非常有用。
mysql> SELECT sys.quote_identifier('plain');
+-------------------------------+
| sys.quote_identifier('plain') |
|---|
+-------------------------------+
plain |
|---|
+-------------------------------+
mysql> SELECT sys.quote_identifier('trick`ier');
+-----------------------------------+
| sys.quote_identifier('trick`ier') |
|---|
+-----------------------------------+
trick``ier |
|---|
+-----------------------------------+
mysql> SELECT sys.quote_identifier('integer');
+---------------------------------+
| sys.quote_identifier('integer') |
|---|
+---------------------------------+
integer |
|---|
+---------------------------------+
> 原文:[`dev.mysql.com/doc/refman/8.0/en/sys-sys-get-config.html`](https://dev.mysql.com/doc/refman/8.0/en/sys-sys-get-config.html)
#### 30.4.5.19 sys_get_config()函数
给定配置选项名称,从`sys_config`表中返回选项值,如果该选项在表中不存在,则返回提供的默认值(可能为`NULL`)。
如果`sys_get_config()`函数")返回默认值且该值为`NULL`,则期望调用者能够处理给定配置选项的`NULL`。
按照惯例,调用`sys_get_config()`函数")的例程首先检查相应的用户定义变量是否存在且非`NULL`。如果是,则例程使用变量值而不读取`sys_config`表中的选项值。如果变量不存在或为`NULL`,则例程从表中读取选项值并将用户定义变量设置为该值。有关配置选项及其相应用户定义变量之间关系的更多信息,请参见第 30.4.2.1 节,“sys_config 表”。
如果要检查配置选项是否已设置,并在没有设置时使用`sys_get_config()`的返回值,可以使用`IFNULL(...)`(见后面的示例)。但是,这不应该在循环内执行(例如,在结果集中的每一行),因为对于需要在第一次迭代中才需要赋值的重复调用,使用`IFNULL(...)`预计比使用`IF (...) THEN ... END IF;`块要慢得多(见后面的示例)。
##### 参数
+ `in_variable_name VARCHAR(128)`: 要返回值的配置选项的名称。
+ `in_default_value VARCHAR(128)`: 如果在`sys_config`表中找不到配置选项,则返回的默认值。
##### 返回值
一个`VARCHAR(128)`值。
##### 示例
从`sys_config`表中获取配置值,如果该选项在表中不存在,则返回默认值 128:
```sql
mysql> SELECT sys.sys_get_config('statement_truncate_len', 128) AS Value;
+-------+
| Value |
+-------+
| 64 |
+-------+
一行示例:检查选项是否已设置;如果没有,则分配IFNULL(...)结果(使用sys_config表中的值):
mysql> SET @sys.statement_truncate_len =
IFNULL(@sys.statement_truncate_len,
sys.sys_get_config('statement_truncate_len', 64));
IF (...) THEN ... END IF;块示例:检查选项是否已设置;如果没有,则分配sys_config表中的值:
IF (@sys.statement_truncate_len IS NULL) THEN
SET @sys.statement_truncate_len = sys.sys_get_config('statement_truncate_len', 64);
END IF;
30.4.5.20 version_major()函数
此函数返回 MySQL 服务器的主要版本。
参数
无。
返回值
一个TINYINT UNSIGNED值。
示例
mysql> SELECT VERSION(), sys.version_major();
+--------------+---------------------+
| VERSION() | sys.version_major() |
+--------------+---------------------+
| 8.0.26-debug | 8 |
+--------------+---------------------+
30.4.5.21 版本次要() 函数
此函数返回 MySQL 服务器的次要版本。
参数
无。
返回值
一个 TINYINT UNSIGNED 值。
示例
mysql> SELECT VERSION(), sys.version_minor();
+--------------+---------------------+
| VERSION() | sys.version_minor() |
+--------------+---------------------+
| 8.0.26-debug | 0 |
+--------------+---------------------+
30.4.5.22 版本 _patch() 函数
此函数返回 MySQL 服务器的补丁发布版本。
参数
无。
返回值
一个TINYINT UNSIGNED值。
示例
mysql> SELECT VERSION(), sys.version_patch();
+--------------+---------------------+
| VERSION() | sys.version_patch() |
+--------------+---------------------+
| 8.0.26-debug | 26 |
+--------------+---------------------+
第三十一章 连接器和 API
目录
31.1 MySQL Connector/C++
31.2 MySQL Connector/J
31.3 MySQL Connector/NET
31.4 MySQL Connector/ODBC
31.5 MySQL Connector/Python
31.6 MySQL Connector/Node.js
31.7 MySQL C API
31.8 MySQL PHP API
31.9 MySQL Perl API
31.10 MySQL Python API
31.11 MySQL Ruby APIs
31.11.1 MySQL/Ruby API
31.11.2 Ruby/MySQL API
31.12 MySQL Tcl API
31.13 MySQL Eiffel Wrapper
MySQL 连接器为客户端程序提供了与 MySQL 服务器的连接。API 使用经典的 MySQL 协议或 X 协议提供对 MySQL 资源的低级访问。连接器和 API 都使您能够从另一种语言或环境连接和执行 MySQL 语句,包括 ODBC、Java(JDBC)、C++、Python、Node.js、PHP、Perl、Ruby 和 C。
MySQL 连接器
Oracle 开发了许多连接器:
-
Connector/C++ 使 C++应用程序能够连接到 MySQL。
-
Connector/J 提供了驱动程序支持,用于使用标准的 Java 数据库连接(JDBC)API 从 Java 应用程序连接到 MySQL。
-
Connector/NET 使开发人员能够创建连接到 MySQL 的.NET 应用程序。Connector/NET 实现了完全功能的 ADO.NET 接口,并提供了与 ADO.NET 感知工具一起使用的支持。使用 Connector/NET 的应用程序可以用任何支持的.NET 语言编写。
-
Connector/ODBC 提供了驱动程序支持,用于使用开放数据库连接(ODBC)API 连接到 MySQL。支持从 Windows、Unix 和 macOS 平台进行 ODBC 连接。
-
Connector/Python 提供了驱动程序支持,用于使用符合Python DB API version 2.0的 API 从 Python 应用程序连接到 MySQL。不需要额外的 Python 模块或 MySQL 客户端库。
-
Connector/Node.js提供了一个异步 API,用于使用 X 协议从 Node.js 应用程序连接到 MySQL。Connector/Node.js 支持管理数据库会话和模式,处理 MySQL 文档存储集合,并使用原始 SQL 语句。
MySQL C API
要直接在 C 应用程序中使用 MySQL,C API 通过libmysqlclient客户端库提供了对 MySQL 客户端/服务器协议的低级访问。这是连接到 MySQL 服务器实例的主要方法,被 MySQL 命令行客户端和这里详细介绍的许多 MySQL 连接器和第三方 API 所使用。
libmysqlclient包含在 MySQL 发行版中。
另请参阅 MySQL C API 实现。
要从 C 应用程序访问 MySQL,或者为本章中未支持的语言构建与 MySQL 的接口,C API 是起点。有许多程序员工具可用于帮助处理此过程;请参阅第 6.7 节,“程序开发工具”。
第三方 MySQL API
本章描述的其余 API 提供了从特定应用程序语言到 MySQL 的接口。这些第三方解决方案并非由 Oracle 开发或支持。这里仅提供它们的使用和能力的基本信息供参考。
所有第三方语言 API 都是使用两种方法之一开发的,使用libmysqlclient或通过实现本机驱动程序。这两种解决方案提供不同的好处:
-
使用
libmysqlclient完全兼容 MySQL,因为它使用与 MySQL 客户端应用程序相同的库。但是,功能集仅限于通过libmysqlclient公开的实现和接口,性能可能较低,因为数据在本机语言和 MySQL API 组件之间进行复制。 -
本机驱动程序是完全在主机语言或环境中实现 MySQL 网络协议的驱动程序。本机驱动程序速度快,因为在组件之间的数据复制较少,并且可以提供标准 MySQL API 无法提供的高级功能。本机驱动程序也更容易供最终用户构建和部署,因为构建本机驱动程序组件不需要 MySQL 客户端库的副本。
表 31.1,“MySQL API 和接口”列出了许多可用于 MySQL 的库和接口。
表 31.1 MySQL API 和接口
| 环境 | API | 类型 | 备注 |
|---|---|---|---|
| Ada | GNU Ada MySQL 绑定 | libmysqlclient |
请参阅GNU Ada 的 MySQL 绑定 |
| C | C API | libmysqlclient |
请参阅 MySQL 8.0 C API 开发人员指南。 |
| C++ | 连接器/C++ | libmysqlclient |
请参阅 MySQL Connector/C++ 8.3 开发人员指南。 |
| MySQL++ | libmysqlclient |
请参阅MySQL++网站。 | |
| MySQL wrapped | libmysqlclient |
查看MySQL wrapped。 | |
| Cocoa | MySQL-Cocoa | libmysqlclient |
与 Objective-C Cocoa 环境兼容。查看mysql-cocoa.sourceforge.net/。 |
| D | D 的 MySQL | libmysqlclient |
查看D 的 MySQL。 |
| Eiffel | Eiffel MySQL | libmysqlclient |
查看第 31.13 节,“MySQL Eiffel 包装器”。 |
| Erlang | erlang-mysql-driver |
libmysqlclient |
查看erlang-mysql-driver。 |
| Haskell | Haskell MySQL 绑定 | 本地驱动程序 | 查看Brian O'Sullivan 的纯 Haskell MySQL 绑定。 |
hsql-mysql |
libmysqlclient |
查看Haskell 的 MySQL 驱动程序。 | |
| Java/JDBC | Connector/J | 本地驱动程序 | 查看 MySQL Connector/J 8.0 开发者指南。 |
| Kaya | MyDB | libmysqlclient |
查看MyDB。 |
| Lua | LuaSQL | libmysqlclient |
查看LuaSQL。 |
| .NET/Mono | Connector/NET | 本地驱动程序 | 查看 MySQL Connector/NET 开发者指南。 |
| Objective Caml | Objective Caml MySQL 绑定 | libmysqlclient |
查看Objective Caml 的 MySQL 绑定。 |
| Octave | GNU Octave 的数据库绑定 | libmysqlclient |
查看GNU Octave 的数据库绑定。 |
| ODBC | Connector/ODBC | libmysqlclient |
查看 MySQL Connector/ODBC 开发者指南。 |
| Perl | DBI/DBD::mysql |
libmysqlclient |
查看第 31.9 节,“MySQL Perl API”。 |
Net::MySQL |
本地驱动程序 | 查看Net::MySQL在 CPAN 上。 |
|
| PHP | mysql,ext/mysql接口(已弃用) |
libmysqlclient |
查看 MySQL 和 PHP。 |
mysqli,ext/mysqli接口 |
libmysqlclient |
查看 MySQL 和 PHP。 | |
PDO_MYSQL |
libmysqlclient |
查看 MySQL 和 PHP。 | |
| PDO mysqlnd | 本地驱动程序 | ||
| Python | Connector/Python | 本地驱动程序 | 查看 MySQL Connector/Python 开发者指南。 |
| Python | Connector/Python C 扩展 | libmysqlclient |
查看 MySQL Connector/Python 开发者指南。 |
| MySQLdb | libmysqlclient |
查看第 31.10 节,“MySQL Python API”。 | |
| Ruby | mysql2 | libmysqlclient |
使用libmysqlclient。查看第 31.11 节,“MySQL Ruby APIs”。 |
| Scheme | Myscsh |
libmysqlclient |
查看Myscsh。 |
| SPL | sql_mysql |
libmysqlclient |
查看SPL 中的sql_mysql。 |
| Tcl | MySQLtcl | libmysqlclient |
查看第 31.12 节,“MySQL Tcl API”。 |
| 环境 | API | 类型 | 备注 |


浙公网安备 33010602011771号