MySQL中服务器状态变量全解(一)

MySQL 服务器维护了许多状态变量,这些变量提供了关于其操作的信息。您可以使用 SHOW [GLOBAL | SESSION] STATUS 语句来查看这些变量及其值。

  • GLOBAL 关键字(可选)用于显示所有连接的聚合值。这些值通常表示自MySQL服务器启动以来的累计统计信息。
  • SESSION 关键字(也是可选的)用于显示当前连接的状态值。这些值仅表示当前会话的统计信息。

下面是如何使用这些选项的一些示例:

mysql> SHOW GLOBAL STATUS;
+-----------------------------------+------------+
| Variable_name                     | Value      |
+-----------------------------------+------------+
| Aborted_clients                   | 0          |
| Aborted_connects                  | 0          |
| Bytes_received                    | 155372598  |
| Bytes_sent                        | 1176560426 |
...
| Connections                       | 30023      |
| Created_tmp_disk_tables           | 0          |
| Created_tmp_files                 | 3          |
| Created_tmp_tables                | 2          |
...
| Threads_created                   | 217        |
| Threads_running                   | 88         |
| Uptime                            | 1389872    |
+-----------------------------------+------------+

FLUSH STATUS 语句用于重置大多数全局状态变量到它们的初始值,即 0。这个命令对于想要获取某个时间段内的统计信息特别有用,因为它可以清除先前的计数,以便您只获取从新时间点开始的状态变量值。

MySQL 的状态变量提供了关于服务器内部操作和性能的大量信息。这些状态变量可以帮助您诊断问题、监控性能以及进行调优。以下是一些常见的状态变量及其大致含义:

  • Aborted_clients

表示由于客户端在没有正确关闭连接的情况下死亡而导致连接被中止的数量。这通常发生在客户端程序崩溃、网络问题或客户端意外终止时。

这个状态变量可以帮助你了解客户端连接的不稳定情况。如果 Aborted_clients 的值非常高,你可能需要调查为什么这么多客户端连接会异常终止。这可能是由于客户端应用程序的问题、网络问题、服务器资源限制或其他原因导致的。

  • Aborted_connects

 是 MySQL 服务器中的一个状态变量,它表示尝试连接到 MySQL 服务器但失败的次数。这些失败可能是由于各种原因,比如网络问题、认证失败、达到连接限制等。

  • Authentication_ldap_sasl_supported_methods

用于指示支持哪些SASL(Simple Authentication and Security Layer)认证方法,当使用authentication_ldap_sasl插件来实现基于LDAP的SASL认证时。SASL是一种通用的认证框架,它支持多种认证机制,如PLAIN、CRAM-MD5、DIGEST-MD5、GSSAPI、SCRAM-SHA-1、SCRAM-SHA-256等。

然而,不是所有的SASL认证方法都会在所有系统上被支持,因为它们的可用性取决于主机系统的配置和安装的库。Authentication_ldap_sasl_supported_methods变量提供了当前系统上该插件所支持的SASL认证方法的列表。

Authentication_ldap_sasl_supported_methods 变量用于发现在使用 authentication_ldap_sasl 插件进行LDAP SASL认证时支持哪些认证方法。这个变量的值是一个字符串,由支持的方法名组成,方法名之间用空格分隔。

例如:"SCRAM-SHA 1 SCRAM-SHA-256 GSSAPI"表示该插件支持SCRAM-SHA-1、SCRAM-SHA-256和GSSAPI这三种SASL认证方法。

  • Binlog_cache_disk_use

表示的是那些由于超过了 binlog_cache_size 的大小限制,而不得不使用磁盘上的临时文件来存储事务中二进制日志事件的事务数量。这通常发生在事务非常大,或者并发事务量很高,导致内存中的二进制日志缓存不够用时。

另一方面,Binlog_stmt_cache_disk_use 状态变量则跟踪的是那些非事务性(即单个的 SQL 语句)由于超过了 binlog_stmt_cache_size 的大小限制,而不得不使用磁盘上的临时文件来存储的情况。

这两个状态变量是分开计数的,以帮助你更精确地了解二进制日志缓存的使用情况,并据此进行优化。如果你发现 Binlog_cache_disk_use 或 Binlog_stmt_cache_disk_use 的值很高,那么可能需要考虑增加 binlog_cache_size 或 binlog_stmt_cache_size 的值,或者优化你的事务和 SQL 语句,以减少对磁盘 I/O 的依赖,从而提高性能。

  • Acl_cache_items_count

表示当前在访问控制列表(ACL)缓存中存储的权限对象的数量。在 MySQL 的权限系统中,每个用户(或用户与其活跃角色的组合)的权限都被视为一个权限对象。

  • Binlog_cache_use 

表示使用了二进制日志(binlog)缓存的事务数量。

  • Binlog_stmt_cache_disk_use 

表示非事务性语句(即单个 SQL 语句,不是作为事务一部分的语句)使用二进制日志语句缓存(binary log statement cache)时,由于超过了 binlog_stmt_cache_size 的大小限制,而不得不使用临时文件来存储这些语句的次数。

  • Bytes_received

用于表示自 MySQL 服务器启动以来,从所有客户端接收到的字节总数。

  • Bytes_sent

用于表示自 MySQL 服务器启动以来,发送给所有客户端的字节总数。

  • Caching_sha2_password_rsa_public_key 

表示 caching_sha2_password 身份验证插件所使用的 RSA 密钥对中的公钥。这个公钥用于基于 RSA 密钥对的密码交换,以增加密码在客户端和服务器之间传输的安全性。

当 MySQL 服务器配置为使用 caching_sha2_password 身份验证插件,并且成功地在由 caching_sha2_password_private_key_path 和 caching_sha2_password_public_key_path 系统变量指定的文件中初始化了私钥和公钥时,Caching_sha2_password_rsa_public_key 的值才会是非空的。这个变量的值直接来自 caching_sha2_password_public_key_path 指定的公钥文件。

  • Com_xxx

用于跟踪各种 SQL 语句的执行次数。这些计数器变量对于监控和诊断数据库性能非常有用,因为它们可以提供关于数据库工作负载的详细信息。

在 MySQL 中,对于每种类型的 SQL 语句,都存在一个与之对应的 Com_xxx 状态变量来记录该语句被执行的次数。

例如:

  • Com_delete:记录了自 MySQL 服务器启动以来,通过 DELETE 语句从表中删除行的次数。DELETE 语句通常用于从单个表中删除一行或多行。

  • Com_update:记录了自 MySQL 服务器启动以来,通过 UPDATE 语句修改表中现有行的次数。UPDATE 语句用于更改表中的现有记录。

  • Com_delete_multi:专门用于记录使用多表语法的 DELETE 语句的执行次数。多表 DELETE 语句允许在单个查询中同时从多个表中删除行,通常是通过连接多个表并指定要删除的条件。

  • Com_update_multi:与 Com_delete_multi 类似,但它是用于记录使用多表语法的 UPDATE 语句的执行次数。多表 UPDATE 语句允许在单个查询中同时更新多个表中的行。

即使准备好的语句参数未知或在执行过程中发生错误,也会增加所有Com_stmt_xxx变量。换句话说,它们的值对应于发出的请求数,而不是成功完成的请求数。例如,由于状态变量是为每次服务器启动初始化的,并且不会在重新启动时持续存在,因此跟踪restart和shutdown语句的Com_restart和Com_shutdown变量的值通常为零,但如果restart或shutdown语句已执行但失败,则可能为非零。

Com_stmt_xxx状态变量如下所示:

  • Com_stmt_prepare:当执行 PREPARE 语句来准备预处理语句时,此变量的值会增加。

  • Com_stmt_execute:当执行已经准备好的预处理语句时(使用 EXECUTE 语句或类似的 API 调用),此变量的值会增加。

  • Com_stmt_fetch

  • Com_stmt_send_long_data

  • Com_stmt_reset

  • Com_stmt_close:当使用 DEALLOCATE PREPARE 语句释放预处理语句时,此变量的值会增加。

这些变量代表准备好的语句命令。它们的名称指的是网络层中使用的COM_xxx命令集。换句话说,每当执行诸如mysql_stmt_prepare()、mysql_stmt_execute()等准备语句API调用时,它们的值就会增加。但是,prepare、execute或DEALLOCATE prepare的Com_stmt_prepare、Com_stmt_execute和Com_stmt_close也分别增加。此外,prepare、execute和DEALLOCATE prepare语句的旧语句计数器变量Comprepare_sql、Comp_execute_sql和Comp_dealloc_sql的值也会增加。Com_stmt_fetch代表从游标中提取时发出的网络往返总数。

Com_stmt_reprepare表示服务器自动重新准备语句的次数,例如,在语句引用的表或视图的元数据更改之后。reprepare操作会增加Com_stmt_reprepare和Com_stmt_prepare。

Com_explain_other表示执行的explain FOR CONNECTION语句数。

Com_change_repl_filter表示执行的change REPLICATION filter语句数。

  • Compression

 是一个与 MySQL 客户端/服务器通信协议中的压缩功能相关的状态变量。这个状态变量已经被弃用(deprecated),意味着在未来的 MySQL 版本中,它可能会被移除。

  • Compression_algorithm

用于与服务器的当前连接的压缩算法的名称。该值可以是protocol_compression_agorithms系统变量的值中允许的任何算法。例如,如果连接不使用压缩,则该值未压缩;如果连接使用zlib算法,则为zlib。

  • Compression_level

用于与服务器的当前连接的压缩级别。对于zlib连接(默认的zlib算法压缩级别),该值为6,对于zstd连接为1到22,对于未压缩的连接为0。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值