MySQL 服务器状态变量

MySQL 服务器状态变量

查看和重置状态变量

查看状态变量

SHOW [GLOBAL | SESSION] STATUS
  • 全局值
  • 会话值

重置状态变量

FLUSH STATUS

状态变量列表

官方文档:https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html

连接状态

  • 中止连接的状态
    mysql> show status like 'abort%';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | Aborted_clients  | 17    |
    | Aborted_connects | 22    |
    +------------------+-------+
    
    • Aborted_clients
      • 强制中止的连接数量。
      • 由于客户端在未正确关闭连接的情况下死亡而中止的连接数
    • Aborted_connects
      • 连接到 MySQL 服务器的失败尝试次数
      • 其他相关信息
        • 系统变量
          • Connection_errors_xxx
            • 达到失败次数之后将拒绝此账户连接,可以使用 flush logs 清除主机缓存来解锁
        • 系统表
          • performance_schema.host_cache
            • 主机缓存的账户信息
  • 连接插件相关
    • Authentication_ldap_sasl_supported_methods
      • SASL LDAP 身份验证插件 authentication_ldap_sasl 支持所支持的验证方法
        • 此插件支持多种身份验证方法,但是取决于主机系统配置,它们可能并非全部可用
      • 多个方法之间用空格分隔,例如,”SCRAM-SHA 1 SCRAM-SHA-256 GSSAPI”

      • 必须安装此插件,才会显示此状态
    • Caching_sha2_password_rsa_public_key

      • caching_sha2_password 身份验证插件用于基于 RSA 密钥对的密码交换的公钥
        mysql> show status like 'caching%'\G
        *************************** 1. row ***************************
        Variable_name: Caching_sha2_password_rsa_public_key
                Value: -----BEGIN PUBLIC KEY-----
        MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqViqXN6DtuwfWrhzJOQA
        CRLSxx3byVIyLMnDfWcGUjaxIBoeQ5fSsyQbsI8/h2cBeaG8ItKi7mqVmhxlRyFO
        qCbvO525pqDDcVDRBjCwkZrphz/R6RhLswfXN9X6pVJWfvFjCzKiqpT1tNTFD2re
        qsIp3kKovzztIIrFeMw+9jUjqX9ku4rVptL9ZxXgciOPehRFjDQLmV3i/D/wY9yn
        NZwqqcMjCdeGhdGeDOEkXsFlnxew32K1l9F/pLMrrf3PcU10UqPsscn6D4Xump0h
        BeLlW1VNUdQ6uPQgMR6HX456XfabPZb0SL4Z70HS3GiZPQRppPdfZy4TC2Pk3IfK
        1wIDAQAB
        -----END PUBLIC KEY-----
        
        
      • 系统变量
        mysql> show variables like 'caching%path';
        +----------------------------------------+-----------------+
        | Variable_name                          | Value           |
        +----------------------------------------+-----------------+
        | caching_sha2_password_private_key_path | private_key.pem |
        | caching_sha2_password_public_key_path  | public_key.pem  |
        +----------------------------------------+-----------------+
        
        • caching_sha2_password_private_key_path
          • 指定私钥
        • caching_sha2_password_public_key_path
          • 指定公钥
    • Rsa_public_key
      • 此变量的值是 sha256_password 身份验证插件用于基于 RSA 密钥对的密码交换所使用的公钥
      • 系统变量
        • sha256_password_private_key_path
        • sha256_password_public_key_path
  • 连接压缩状态
    mysql> show status like 'compress%';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | Compression           | ON    |
    | Compression_algorithm | zstd  |
    | Compression_level     | 3     |
    +-----------------------+-------+
    
    • Compression

      已弃用,将来会删除。

      • 客户端连接是否在客户端/服务器协议中使用压缩
    • Compression_algorithm
      • 当前与服务器的连接所使用的压缩算法
      • 系统变量
        • protocol_compression_algorithms
          • 允许用于连接的压缩算法列表
    • Compression_level
      • 当前到服务器的连接使用的压缩级别
      • 对于 zlib 连接,默认为6;对于 zstd 连接,该值范围是 1-22,默认为3;对于未压缩的连接,该值为0。
  • 连接次数
    • Connections
      • 与 MySQL 服务器的连接尝试次数 (成功或失败)
    • Locked_connects
      • 尝试连接到锁定的用户帐户的次数
    • Max_used_connections
      • 自服务器启动以来已同时使用的最大连接数
    • Max_used_connections_time
      • Max_used_connections 达到其当前值的时间
  • 连接错误的次数

    这些变量提供有关在客户端连接过程中发生的错误的信息。

    • Connection_errors_accept
      • 在侦听端口上调用 accept() 期间发生的错误数
    • Connection_errors_internal
      • 由于服务器内部错误 (例如,无法启动新线程或内存不足情况) 而被拒绝的连接数
    • Connection_errors_max_connections
      • 由于达到服务器 max_connections 限制,拒绝的连接数
    • Connection_errors_peer_address
      • 搜索连接客户端 IP 地址时发生的错误数
    • Connection_errors_select
      • 在侦听端口上调用 select() 或 poll() 期间发生的错误数。
      • 此操作失败不一定表示客户端连接被拒绝。
    • Connection_errors_tcpwrap
      • libwrap 库拒绝的连接数
  • Current_tls_xxx

    与 TLS 相关的状态变量。

    Current_tls_xxx 状态变量值也可以通过 Performance_Schema.tls_channel_status 表获得。

    • Current_tls_ca
      • 服务器用于新连接的 SSL 上下文中的活动 ssl_ca 值
      • 如果更改了系统变量,但是随后未执行 ALTER INSTANCE RELOAD TLS 重新加载 SSL 配置,则该值可能与当前 ssl_ca 系统变量值不同
    • Current_tls_capath
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_capath 值
    • Current_tls_cert
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_cert 值
    • Current_tls_cipher
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_cipher 值
    • Current_tls_ciphersuites
      • 服务器用于新连接的 TSL 上下文中的活动 tls_ciphersuites 值
    • Current_tls_crl
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_crl 值
    • Current_tls_crlpath
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_crlpath 值
    • Current_tls_key
      • 服务器用于新连接的 TSL 上下文中的活动 ssl_key 值
    • Current_tls_version
      • 服务器用于新连接的 TSL 上下文中的活动 tls_version 值

二进制日志的事务数量

mysql> show status like 'binlog%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Binlog_cache_disk_use      | 7     |
| Binlog_cache_use           | 6265  |
| Binlog_stmt_cache_disk_use | 0     |
| Binlog_stmt_cache_use      | 5     |
+----------------------------+-------+
  • 缓存的事务数
    • Binlog_cache_use
      • 使用二进制日志缓存的事务数。
    • Binlog_stmt_cache_use
      • 使用二进制日志语句高速缓存的非事务性语句的数量
  • 临时文件存储的事务数
    • Binlog_cache_disk_use
      • 使用临时文件存储的临时二进制日志的事务数
        • 正常情况下,使用内存缓存临时二进制日志的事务,但是当事务大小超过 binlog_cache_size 时,超过的部分改用临时文件存储事务语句。
      • 在 Binlog_stmt_cache_disk_use 状态变量中,单独跟踪了导致二进制日志事务高速缓存写入磁盘的非事务性语句的数量

    • Binlog_stmt_cache_disk_use

      • 使用临时文件存储的非事务性语句的数量

        正常情况下,使用内存缓存临时二进制日志的非事务性语句,但是当语句大小超过 binlog_stmt_cache_size 时,超过的部分改用临时文件存储。

创建的临时表/文件的数量

服务器执行语句时,创建的临时表或临时文件的数量。

  • Created_tmp_disk_tables
    • 服务器执行语句时在磁盘上创建的内部临时表的数量
    • 可以将创建的内部磁盘临时表的数量与通过比较 Created_tmp_disk_tables 和 Created_tmp_tables 值创建的内部临时表的总数进行比较
    • 由于已知限制,此变量不计算在内存映射文件中创建的磁盘临时表。
      • 默认情况下,TempTable 存储引擎溢出机制会在内存映射文件中创建内部临时表
      • 系统变量
        • temptable_use_mmap
  • Created_tmp_files
    • mysqld 创建了多少个临时文件
  • Created_tmp_tables
    • 服务器执行语句时在缓存中创建的内部临时表的数量
    • 可以将创建的内部磁盘临时表的数量与通过比较 Created_tmp_disk_tables 和 Created_tmp_tables 值创建的内部临时表的总数进行比较
    • 每次调用 SHOW STATUS 语句都会使用一个内部临时表,并增加全局 Created_tmp_tables 值

缓存状态

  • Acl_cache_items_count
    • 缓存的权限对象的数量。
    • 每个对象都是用户及其活动角色的权限组合

接收和发送的字节数

  • Bytes_received
    • 从所有客户端接收到的字节数
  • Bytes_sent
    • 发送给所有客户端的字节数

Com_xxx

计数器变量,指示每个 xxx 语句已执行的次数。每种类型的语句都有一个状态变量。

即使准备好的语句参数未知或执行期间发生错误,所有 Com_stmt_xxx 变量也会增加。换句话说,它们的值对应于发出的请求数,而不是成功完成的请求数。

每次服务器启动,状态变量会重新初始化,而不是持续存在。

以下只是简单列举了几个:

  • Com_stmt_prepare
    • 服务器自动重新准备语句的次数
    • 调用 mysql_stmt_prepare() API 的数量
  • Com_stmt_execute
    • 调用 mysql_stmt_execute() API 的数量
  • Com_stmt_fetch
    • 从游标获取时发出的网络往返总数
  • Com_stmt_send_long_data

  • Com_stmt_reset
  • Com_stmt_close
  • Com_explain_other

    • 已执行的 EXPLAIN FOR CONNECTION 语句的数量
  • Com_change_repl_filter
    • 已执行 CHANGE REPLICATION FILTER 语句的数量

Delayed_xxx

  • Delayed_errors

    已弃用,因为不支持 DELAYED 插入,将来会删除。

  • Delayed_insert_threads

    已弃用,因为不支持 DELAYED 插入,将来会删除。

  • Delayed_writes

    已弃用,因为不支持 DELAYED 插入,将来会删除。

  • Not_flushed_delayed_rows

    已弃用,因为不支持 DELAYED 插入,将来会删除。

赋值状态

  • dragnet.Status

    • 系统变量的赋值结果
    • 系统变量
      • dragnet.log_error_filter_rules

error_log 表的状态

  • Error_log_buffered_bytes
    • performance_schema.error_log 表中当前使用的字节数
  • Error_log_buffered_events
    • performance_schema.error_log 表中当前存在的事件数 (就是表中的行数)
  • Error_log_expired_events
    • 为了给新事件腾出空间,从 performance_schema.error_log 表中丢弃的事件数
  • Error_log_latest_write
    • 上次写入 performance_schema.error_log 表的时间

组复制状态

  • group_replication_primary_member

    已弃用,将来会删除。

    • 如果是单主模式下,主节点的 UUID
    • 如果是多主模式,显示一个空字符串

刷新状态

  • Flush_commands
    • 服务器刷新表的次数 (包括用户执行的 FLUSH TABLES 和内部操作)
    • 它也通过接收 COM_REFRESH 数据包而增加
      • 这与 Com_flush 相反,后者表示已执行了多少 FLUSH 语句,包含 FLUSH TABLES,FLUSH LOGS 等

Handler 操作状态

  • Handler_external_lock
    • 服务器在每次调用其 external_lock() 函数时都会递增此变量,通常在访问表实例的开始和结束时发生
    • 可以使用此变量来发现访问分区表的语句在锁定发生之前修剪了多少个分区
      • 锁定的分区数 = (此变量值-2)/2
      • 对表本身进行2次调用,所以减2
  • Handler_mrr_init
    • 服务器使用存储引擎自身的多范围读取进行表访问的次数
  • Handler_prepare
    • 两阶段提交操作的准备阶段的计数器
  • 数据读取的状态
    • 索引扫描状态
      • Handler_read_first
        • 索引中第一个条目的读取次数。
        • 如果此值很高,则表明服务器正在执行很多全索引扫描
      • Handler_read_key
        • 基于键读取行的请求数
        • 如果此值很高,则表明已正确地为查询建立索引,这是一个很好的指示
      • Handler_read_last
        • 读取索引中最后一个键的请求数
        • 使用 ORDER BY,服务器发出第一键请求,然后发出多个下一键请求
        • 使用 ORDER BY DESC,服务器发出最后一键请求,然后发出多个上一键请求
      • Handler_read_next
        • 按键顺序读取下一行的请求数
        • 如果要查询具有范围约束的索引列或进行索引扫描,则此值将增加
      • Handler_read_prev
        • 按键顺序读取上一行的请求数
        • 该读取方法主要用于优化 ORDER BY … DESC
    • 全表扫描状态
      • Handler_read_rnd
        • 读取数据文件下一行的请求数
        • 如果要进行大量表扫描,则此值较高。通常,这表明表未正确建立索引,或者查询未利用索引。
  • DML 操作状态
    • Handler_delete
      • 从表中删除行的次数
    • Handler_update
      • 在表中更新行的请求数
    • Handler_write
      • 在表中插入行的请求数
  • 事务相关的状态
    • Handler_commit
      • 内部 COMMIT 语句的数量
    • Handler_rollback
      • 存储引擎执行回滚操作的请求数
    • Handler_savepoint
      • 存储引擎放置保存点的请求数
    • Handler_savepoint_rollback
      • 存储引擎回滚到保存点的请求数

InnoDB 缓冲池状态

  • 缓冲池操作进度
    • Innodb_buffer_pool_dump_status
      • 记录 InnoDB 缓冲池中保存的页面的操作进度
      • 系统变量
        • innodb_buffer_pool_dump_at_shutdown
        • innodb_buffer_pool_dump_now
    • Innodb_buffer_pool_load_status
      • 通过读取对应于较早时间点的一组页面来预热 InnoDB 缓冲池的操作进度
      • 系统变量
        • innodb_buffer_pool_load_at_startup
        • innodb_buffer_pool_load_now
      • 如果该操作带来了过多的开销,则可以通过设置 innodb_buffer_pool_load_abort 来取消预热

  • 缓冲池数据字节数

    • Innodb_buffer_pool_bytes_data
      • InnoDB 缓冲池中包含数据的字节总数
        • 数据页 = 脏页 + 干净页
      • 与 Innodb_buffer_pool_pages_data 相比,当压缩表导致缓冲池保存不同大小的页面时,可以更准确地计算内存使用量

    • Innodb_buffer_pool_bytes_dirty

      • InnoDB 缓冲池中的脏页中保留的当前字节总数
      • 与Innodb_buffer_pool_pages_dirty相比,当压缩表导致缓冲池保存不同大小的页面时,可以更准确地计算内存使用量
  • 缓冲池页面数
    mysql> show status like 'innodb_buffer%';
    +---------------------------------------+--------------------------------------------------+
    | Variable_name                         | Value                                            |
    +---------------------------------------+--------------------------------------------------+
    | Innodb_buffer_pool_dump_status        | Dumping of buffer pool not started               |
    | Innodb_buffer_pool_load_status        | Buffer pool(s) load completed at 210426 10:08:52 |
    | Innodb_buffer_pool_resize_status      |                                                  |
    | Innodb_buffer_pool_pages_data         | 6823                                             |
    | Innodb_buffer_pool_bytes_data         | 111788032                                        |
    | Innodb_buffer_pool_pages_dirty        | 0                                                |
    | Innodb_buffer_pool_bytes_dirty        | 0                                                |
    | Innodb_buffer_pool_pages_flushed      | 40427                                            |
    | Innodb_buffer_pool_pages_free         | 1347                                             |
    | Innodb_buffer_pool_pages_misc         | 22                                               |
    | Innodb_buffer_pool_pages_total        | 8192                                             |
    | Innodb_buffer_pool_read_ahead_rnd     | 0                                                |
    | Innodb_buffer_pool_read_ahead         | 185                                              |
    | Innodb_buffer_pool_read_ahead_evicted | 0                                                |
    | Innodb_buffer_pool_read_requests      | 29943328                                         |
    | Innodb_buffer_pool_reads              | 4968                                             |
    | Innodb_buffer_pool_wait_free          | 0                                                |
    | Innodb_buffer_pool_write_requests     | 4910242                                          |
    +---------------------------------------+--------------------------------------------------+
    
    • Innodb_buffer_pool_pages_total
      • InnoDB 缓冲池的总大小 (以页为单位)
      • 使用压缩表时,报告的 Innodb_buffer_pool_pages_data 值可能大于Innodb_buffer_pool_pages_total
        • Bug
    • Innodb_buffer_pool_pages_data
      • InnoDB 缓冲池中包含数据的页面数
        • 数据页 = 脏页 + 干净页
      • 使用压缩表时,报告的 Innodb_buffer_pool_pages_data 值可能大于 Innodb_buffer_pool_pages_total
        • Bug
    • Innodb_buffer_pool_pages_dirty
      • InnoDB 缓冲池中当前脏页数
    • Innodb_buffer_pool_pages_free
      • InnoDB 缓冲池中的可用页数
    • Innodb_buffer_pool_pages_misc
      • InnoDB 缓冲池中由于分配给管理开销而繁忙的页面数
        • 例如,行锁或自适应哈希索引
      • 估算方法
        • Innodb_buffer_pool_pages_total − Innodb_buffer_pool_pages_free − Innodb_buffer_pool_pages_data
          • 总页面数 = 数据页面数 + 可用页面数 + 繁忙页面数
      • 使用压缩表时,Innodb_buffer_pool_pages_misc 可能报告超出范围的值
        • Bug
    • Innodb_buffer_pool_pages_latched

      该变量的计算代价非常高,因此仅当在服务器构建时定义了 UNIV_DEBUG 系统时才可用。二进制发行版无此变量。

      • InnoDB 缓冲池中被锁定的页面数
      • 这些页面是当前正在读取或写入的页面,或者由于某些其他原因而无法刷新或删除的页面
  • 缓冲池预读状态
    • Innodb_buffer_pool_read_ahead
      • 预读后台线程读入 InnoDB 缓冲池的页面数。
    • Innodb_buffer_pool_read_ahead_evicted
      • 预读后台线程将页面读入 InnoDB 缓冲池,但是因为没有被查询访问而被驱逐的页面数
    • Innodb_buffer_pool_read_ahead_rnd
      • InnoDB 启动的随机 (random) 预读次数
      • 当查询以随机顺序扫描表的大部分时,会发生这种情况
  • 缓冲池逻辑读状态
    • Innodb_buffer_pool_read_requests
      • 逻辑读请求的数量
    • Innodb_buffer_pool_reads
      • InnoDB 无法从缓冲池满足的逻辑读数量,此时必须直接从磁盘读取
  • Innodb_buffer_pool_resize_status
    • 动态调整 InnoDB 缓冲池大小的操作状态
    • 系统变量
      • InnoDB_buffer_pool_size
  • Innodb_buffer_pool_pages_flushed
    • 从 InnoDB 缓冲池刷新页面的请求数
  • Innodb_buffer_pool_wait_free
    • InnoDB 缓冲池等待刷新脏页的次数

      通常,对 InnoDB 缓冲池的写操作在后台进行。当 InnoDB 需要读取或创建页面并且没有可用的干净页面时,InnoDB 首先刷新一些脏页面并等待该操作完成。该计数器计算这些等待的次数。

    • 如果已经正确设置了 innodb_buffer_pool_size,则此值应较小

  • Innodb_buffer_pool_write_requests

    • 对 InnoDB 缓冲池的写入次数

InnoDB 数据处理状态

mysql> show status like 'innodb_data%';
+----------------------------+-----------+
| Variable_name              | Value     |
+----------------------------+-----------+
| Innodb_data_fsyncs         | 28579     |
| Innodb_data_pending_fsyncs | 0         |
| Innodb_data_pending_reads  | 0         |
| Innodb_data_pending_writes | 0         |
| Innodb_data_read           | 84628480  |
| Innodb_data_reads          | 5346      |
| Innodb_data_writes         | 212107    |
| Innodb_data_written        | 935897600 |
+----------------------------+-----------+
  • 数据同步状态
    • Innodb_data_fsyncs
      • 到目前为止,fsync() 操作的数量
      • 系统变量
        • innodb_flush_method
    • Innodb_data_pending_fsyncs
      • 当前待处理的 fsync() 操作数
      • 系统变量
        • innodb_flush_method
  • 数据挂起状态
    • Innodb_data_pending_reads
      • 当前等待 (挂起) 的读取数
    • Innodb_data_pending_writes
      • 当前等待 (挂起) 的写入数
  • 数据读取状态
    • Innodb_data_reads
      • 读取的数据总数 (读取 OS 文件)
    • Innodb_data_read
      • 自服务器启动以来读取的数据量 (以字节为单位)
  • 数据写入状态
    • Innodb_data_writes
      • 数据写入总数
    • Innodb_data_written
      • 到目前为止已写入的数据量 (以字节为单位)

redo 日志状态

mysql> show status like 'innodb%log%';
+------------------------------+-----------+
| Variable_name                | Value     |
+------------------------------+-----------+
| Innodb_log_waits             | 0         |
| Innodb_log_write_requests    | 4059329   |
| Innodb_log_writes            | 160376    |
| Innodb_os_log_fsyncs         | 11459     |
| Innodb_os_log_pending_fsyncs | 0         |
| Innodb_os_log_pending_writes | 0         |
| Innodb_os_log_written        | 202065920 |
| Innodb_redo_log_enabled      | ON        |
+------------------------------+-----------+
  • Innodb_redo_log_enabled
    • 是启用还是禁用 redo 日志记录
  • Innodb_log_waits
    • 由于日志缓冲区过小,需要等待的次数

      如果日志缓冲区过小,需要等待一段时间才能刷新日志缓冲区,然后再继续。

  • Innodb_log_write_requests

    • InnoDB redo 日志的写请求数
  • Innodb_log_writes
    • 物理写入 InnoDB redo 日志文件的次数
  • redo log 等待状态
    • Innodb_os_log_pending_fsyncs
      • 等待 (挂起) 对 InnoDB redo 日志文件的 fsync() 写入次数
    • Innodb_os_log_pending_writes
      • 等待 (挂起) 写入 InnoDB redo 日志文件的次数
  • redo log 完成状态
    • Innodb_os_log_fsyncs
      • 完成对 InnoDB redo 日志文件的 fsync() 写入次数
    • Innodb_os_log_written
      • 写入 InnoDB redo 日志文件的字节数

InnoDB 页面状态

mysql> show status like 'innodb_page%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Innodb_page_size     | 16384 |
| Innodb_pages_created | 9251  |
| Innodb_pages_read    | 5164  |
| Innodb_pages_written | 43069 |
+----------------------+-------+
  • Innodb_page_size
    • InnoDB 页面大小 (默认为 16KB)
    • 页面中包含许多值;页面大小使它们可以轻松转换为字节
  • Innodb_pages_created
    • 由于 InnoDB 表上的操作而创建的页面数
  • Innodb_pages_read
    • 由于 InnoDB 表上的操作而读取的页面数
  • Innodb_pages_written
    • 由于 InnoDB 表上的操作而写入的页面数

InnoDB 行级锁状态

mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0     |
| Innodb_row_lock_time          | 0     |
| Innodb_row_lock_time_avg      | 0     |
| Innodb_row_lock_time_max      | 0     |
| Innodb_row_lock_waits         | 0     |
+-------------------------------+-------+
  • Innodb_row_lock_current_waits
    • 由于 InnoDB 表上的操作,当前正在等待的行锁数
  • Innodb_row_lock_time
    • 获取 InnoDB 表的行锁所花费的总时间 (以毫秒为单位)
  • Innodb_row_lock_time_avg
    • 获取 InnoDB 表的行锁的平均时间,以毫秒为单位
  • Innodb_row_lock_time_max
    • 获取 InnoDB 表的行锁的最长时间,以毫秒为单位
  • Innodb_row_lock_waits
    • InnoDB 表上的操作必须等待行锁定的次数

InnoDB 行更新的状态

mysql> show status like 'innodb_rows_%';
+----------------------+----------+
| Variable_name        | Value    |
+----------------------+----------+
| Innodb_rows_deleted  | 0        |
| Innodb_rows_inserted | 1309244  |
| Innodb_rows_read     | 20023644 |
| Innodb_rows_updated  | 0        |
+----------------------+----------+
  • Innodb_rows_deleted
    • InnoDB 表中删除的行数
  • Innodb_rows_inserted
    • InnoDB 表中插入的行数
  • Innodb_rows_read
    • InnoDB 表读取的行数
  • Innodb_rows_updated
    • InnoDB 表中更新的行数

系统库中 InnoDB 表的行更新状态

mysql> show status like 'innodb_system_rows_%';
+-----------------------------+---------+
| Variable_name               | Value   |
+-----------------------------+---------+
| Innodb_system_rows_deleted  | 2444    |
| Innodb_system_rows_inserted | 140002  |
| Innodb_system_rows_read     | 4324450 |
| Innodb_system_rows_updated  | 2457    |
+-----------------------------+---------+
  • Innodb_system_rows_deleted
    • 在属于系统库的 InnoDB 表中,删除的行数
  • Innodb_system_rows_inserted
    • 在属于系统库的 InnoDB 表中,插入的行数
  • Innodb_system_rows_read
    • 在属于系统库的 InnoDB 表中,读取的行数

InnoDB undo 表空间的状态

mysql> show status like 'innodb_undo%';
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| Innodb_undo_tablespaces_total    | 2     |
| Innodb_undo_tablespaces_implicit | 2     |
| Innodb_undo_tablespaces_explicit | 0     |
| Innodb_undo_tablespaces_active   | 2     |
+----------------------------------+-------+
  • Innodb_undo_tablespaces_active
    • 活动的 undo 表空间的数量
    • 包括隐式 (InnoDB 创建) 和显式 (用户创建) undo 表空间
  • Innodb_undo_tablespaces_explicit
    • 显式 (用户创建) 的 undo 表空间的数量
  • Innodb_undo_tablespaces_implicit
    • 隐式 (InnoDB 创建) 的 undo 表空间的数量。

    • 初始化 MySQL 实例时,InnoDB 创建两个默认的 undo 表空间。

      [root@yingzai_23 data]$ ls undo*
      undo_001  undo_002
      
  • Innodb_undo_tablespaces_total
    • undo 表空间的总数。
    • 包括隐式 (InnoDB 创建) 和显式 (用户创建) undo 表空间 (活动和非活动)

InnoDB 双写缓冲区状态

mysql> show status like 'innodb_dblwr%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Innodb_dblwr_pages_written | 15173 |
| Innodb_dblwr_writes        | 3907  |
+----------------------------+-------+
  • Innodb_dblwr_pages_written
    • 已写入双写缓冲区的页面数
  • Innodb_dblwr_writes
    • 已执行的双写操作的数量

InnoDB 其它状态

  • Innodb_have_atomic_builtins

    二进制发行版中无此变量。

    • 指示服务器是否使用原子指令构建
  • Innodb_num_open_files
    • InnoDB 当前保持打开状态的文件数
  • Innodb_truncated_status_writes
    • SHOW ENGINE INNODB STATUS 语句的输出已被截断的次数
      • 此语句最多输出180个字符,多余的会被截断

MyISAM 键缓存状态

mysql> show status like 'key%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Key_blocks_not_flushed | 0     |
| Key_blocks_unused      | 6698  |
| Key_blocks_used        | 0     |
| Key_read_requests      | 0     |
| Key_reads              | 0     |
| Key_write_requests     | 0     |
| Key_writes             | 0     |
+------------------------+-------+

Note: 由于 MySQL 8.0 版本默认存储引擎是 InnoDB,所以 MyISAM 的键缓存没有用到。

  • 键缓存的块数
    • Key_blocks_not_flushed
      • MyISAM 键缓存中已更改但尚未刷新到磁盘的键块数
    • Key_blocks_unused
      • MyISAM 键缓存中未使用的块数。
      • 可以使用此值来确定正在使用多少键缓存
    • Key_blocks_used
      • MyISAM 键缓存中使用的块数。
      • 此值是高水位线,指示一次曾经使用的最大块数。
  • 键缓存的读取数
    • Key_read_requests
      • 从 MyISAM 键缓存读取键块的请求数
    • Key_reads
      • 从磁盘到 MyISAM 键高速缓存中的键块的物理读取数
      • 如果 Key_reads 很大,则 key_buffer_size 值可能太小。
        • 缓存未命中率 = Key_reads/Key_read_requests。
  • 键缓存的写入数
    • Key_write_requests
      • 将键块写入 MyISAM 键缓存的请求数
    • Key_writes
      • 从 MyISAM 键缓存到磁盘的键块的物理写入次数

上个查询的状态

mysql> select count(*) from test.t3;
+----------+
| count(*) |
+----------+
|   525313 |
+----------+
1 row in set (0.41 sec)

mysql> show status like 'last%';
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| Last_query_cost          | 0.349000 |
| Last_query_partial_plans | 1        |
+--------------------------+----------+
  • Last_query_cost
    • 由查询优化器计算的上一次编译查询的总成本
    • 这对于比较同一查询的不同查询计划的成本非常有用
    • 默认值为0,表示尚未编译任何查询
    • 此变量属于会话范围
  • Last_query_partial_plans
    • 查询优化器在上一个查询的执行计划构建中进行的迭代次数
    • 此变量属于会话范围

执行超时状态

mysql> show status like 'max_execution%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Max_execution_time_exceeded   | 0     |
| Max_execution_time_set        | 0     |
| Max_execution_time_set_failed | 0     |
+-------------------------------+-------+
  • Max_execution_time_exceeded
    • 执行超时的 SELECT 语句数
  • Max_execution_time_set
    • 设置了非零超时时间的 SELECT 语句数
    • 这包括包含非零 MAX_EXECUTION_TIME 优化器提示的语句,以及不包含此类提示但在 max_execution_time 系统变量指定超时时间的语句
    • 系统变量
      • max_execution_time
  • Max_execution_time_set_failed
    • 尝试设置执行超时的 SELECT 语句失败数

打开的文件和表的状态

mysql> show status like 'open%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| Open_files               | 10    |
| Open_streams             | 0     |
| Open_table_definitions   | 89    |
| Open_tables              | 256   |
| Opened_files             | 10    |
| Opened_table_definitions | 1     |
| Opened_tables            | 8     |
+--------------------------+-------+
  • 打开的文件数
    • Open_files
      • 打开的文件数 (包括常规文件)
      • 不包括
        • 其他类型的文件,例如,socket 或 pipe
        • 存储引擎使用其自身内部函数打开的文件
    • Opened_files
      • 使用 my_open() (mysys 库函数) 打开的文件数
      • 不使用此函数打开文件的服务器部分不会增加计数。
  • 缓存的表定义数
    • Open_table_definitions
      • 高速缓存的表定义数
    • Opened_table_definitions
      • 已缓存的表定义数。
  • 打开的表数
    • Open_tables
      • 打开的表数
    • Opened_tables
      • 已打开的表数
      • 如果 Opened_tables 大,则 table_open_cache 值可能太小
  • Open_streams
    • 打开的流的数量 (主要用于记录)

匿名事务状态

  • Ongoing_anonymous_transaction_count
    • 显示已标记为匿名的正在进行的事务数
    • 这可以用来确保没有其他事务正在等待处理。
  • Ongoing_anonymous_gtid_violating_transaction_count

    仅用于调试。

    • 显示使用 gtid_next = ANONYMOUS 并且违反 GTID 一致性的正在进行的事务数

准备或执行的语句数量

mysql> select * from performance_schema.session_status where variable_name in ('queries', 'questions', 'prepared_stmt_count');
+---------------------+----------------+
| VARIABLE_NAME       | VARIABLE_VALUE |
+---------------------+----------------+
| Prepared_stmt_count | 0              |
| Queries             | 1736637        |
| Questions           | 74             |
+---------------------+----------------+

Note: 也可以查询全局状态变量表 performance_schema.global_status。

  • Prepared_stmt_count
    • 当前准备好的语句数
    • 系统变量
      • max_prepared_stmt_count
        • 准备的语句的最大数量
  • Queries
    • 服务器执行的语句数
    • 它不计算 COM_PING 或 COM_STATISTICS 命令。
    • Queries 和 Questions 对比
      • Queries:包括在存储的程序中执行的语句
      • Questions:仅包括客户端发送给服务器的语句,而不包括在存储的程序中执行的语句
  • Questions
    • 服务器执行的语句数
    • 此变量不计算 COM_PING,COM_STATISTICS,COM_STMT_PREPARE,COM_STMT_CLOSE 或 COM_STMT_RESET 命令

半同步状态

需要安装半同步插件才会显示相关变量。

  • Rpl_semi_sync_master_clients
    • 半同步副本的数量
  • Rpl_semi_sync_master_net_avg_wait_time

    已弃用,将来会删除。

    • 源等待副本回复的平均时间 (以微秒为单位)
  • Rpl_semi_sync_master_net_wait_time

    已弃用,将来会删除。

    • 源等待副本回复的总时间 (以微秒为单位)
  • Rpl_semi_sync_master_net_waits
    • 源等待副本回复的总次数
  • Rpl_semi_sync_master_no_times
    • 源关闭半同步复制的次数
  • Rpl_semi_sync_master_no_tx
    • 副本未成功确认的提交数
  • Rpl_semi_sync_master_status
    • 半同步复制当前是否可在源上运行
    • 如果已启用插件并且发生了提交确认,则该值为 ON。如果未启用该插件或源由于提交确认超时而退回到异步复制,则为 OFF。
  • Rpl_semi_sync_master_timefunc_failures
    • 调用诸如 gettimeofday() 之类的时间函数时,源失败的次数
  • Rpl_semi_sync_master_tx_avg_wait_time
    • 源等待每个事务的平均时间 (以微秒为单位)
  • Rpl_semi_sync_master_tx_wait_time
    • 源等待事务的总时间 (以微秒为单位)
  • Rpl_semi_sync_master_tx_waits
    • 源等待事务的总次数
  • Rpl_semi_sync_master_wait_pos_backtraverse
    • 源等待事件的二进制坐标比以前等待的事件低的总次数
    • 当事务开始等待答复的顺序与写入其二进制日志事件的顺序不同时,可能会发生这种情况。
  • Rpl_semi_sync_master_wait_sessions
    • 当前等待副本回复的会话数
  • Rpl_semi_sync_master_yes_tx
    • 副本成功确认的提交数
  • Rpl_semi_sync_slave_status
    • 半同步复制当前是否可在副本上运行
    • 如果已启用插件并且复制 I/O 线程正在运行,则此选项为 ON;否则为 OFF。

表联接 (join) 状态

mysql> show status like 'select%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Select_full_join       | 0     |
| Select_full_range_join | 0     |
| Select_range           | 3     |
| Select_range_check     | 0     |
| Select_scan            | 13    |
+------------------------+-------+
  • Select_full_join
    • 由于不使用索引而执行表扫描的联接数
    • 如果该值不为0,则应仔细检查表的索引。
  • Select_range
    • 在第一个表上使用范围的联接数
    • 即使值很大,这通常也不是关键问题。
  • Select_range_check
    • 每行之后不检查键联接的联接数 (join)
    • 如果不为0,则应仔细检查表的索引。
  • Select_scan
    • 完全扫描第一个表的联接数

复制状态

  • Slave_open_temp_tables
    • 复制 SQL 线程当前已打开的临时表的数量
    • 如果该值大于零,则关闭副本是不安全的
    • 此变量是所有复制通道打开临时表的总数
  • Slave_rows_last_search_algorithm_used

    仅用于调试。

    • 此副本最近使用的搜索算法,用于定位行以进行基于行的复制
    • 结果显示副本是否使用索引,表扫描或哈希作为在任何通道上执行的最后一个事务的搜索算法
    • 系统变量
      • slave_rows_search_algorithms

慢查询状态

  • Slow_launch_threads
    • 创建时间超过 slow_launch_time 秒的线程数
  • Slow_queries
    • 耗时超过 long_query_time 秒的查询数
    • 无论是否启用慢查询日志,此计数器都会递增

排序状态

mysql> show global status like 'sort%';
+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| Sort_merge_passes | 0      |
| Sort_range        | 0      |
| Sort_rows         | 227493 |
| Sort_scan         | 16333  |
+-------------------+--------+
  • Sort_merge_passes
    • 排序算法必须执行的合并通过次数
    • 如果该值很大,则应考虑增加 sort_buffer_size 系统变量的值。
  • Sort_range
    • 使用范围完成的排序数量
  • Sort_rows
    • 排序的行数
  • Sort_scan
    • 通过扫描表完成的排序数

Ssl 连接状态

mysql> show global status like 'ssl%';
+--------------------------------+--------------------------+
| Variable_name                  | Value                    |
+--------------------------------+--------------------------+
| Ssl_accept_renegotiates        | 0                        |
| Ssl_accepts                    | 612                      |
| Ssl_callback_cache_hits        | 0                        |
| Ssl_cipher                     |                          |
| Ssl_cipher_list                |                          |
| Ssl_client_connects            | 0                        |
| Ssl_connect_renegotiates       | 0                        |
| Ssl_ctx_verify_depth           | 18446744073709551615     |
| Ssl_ctx_verify_mode            | 5                        |
| Ssl_default_timeout            | 0                        |
| Ssl_finished_accepts           | 612                      |
| Ssl_finished_connects          | 0                        |
| Ssl_server_not_after           | Feb 24 14:37:41 2031 GMT |
| Ssl_server_not_before          | Feb 26 14:37:41 2021 GMT |
| Ssl_session_cache_hits         | 0                        |
| Ssl_session_cache_misses       | 0                        |
| Ssl_session_cache_mode         | SERVER                   |
| Ssl_session_cache_overflows    | 0                        |
| Ssl_session_cache_size         | 128                      |
| Ssl_session_cache_timeouts     | 0                        |
| Ssl_sessions_reused            | 0                        |
| Ssl_used_session_cache_entries | 0                        |
| Ssl_verify_depth               | 0                        |
| Ssl_verify_mode                | 0                        |
| Ssl_version                    |                          |
+--------------------------------+--------------------------+
  • ssl 连接的协商数量
    • Ssl_accept_renegotiates
      • 建立连接所需的协商数量
    • Ssl_connect_renegotiates
      • 与复制源服务器建立连接所需的协商数量
  • ssl 加密密码
    • Ssl_cipher
      • 当前的加密密码 (对于未加密的连接为空)
    • Ssl_cipher_list
      • 可能的 SSL 密码列表 (非 SSL 连接为空)
  • ssl 连接数
    • Ssl_accepts
      • 接受的 SSL 的连接数
    • Ssl_client_connects
      • 与复制源服务器的 SSL 连接尝试次数
    • Ssl_finished_accepts
      • 到服务器的成功 SSL 连接数
    • Ssl_finished_connects
      • 副本成功连接到复制源服务器 (已启用 SSL) 的成功数量
  • ssl 证书有效日期
    • Ssl_server_not_after
      • SSL 证书的最后有效日期

      • 检查 SSL 证书到期信息

        mysql> SHOW STATUS LIKE 'Ssl_server_not%';
        +-----------------------+--------------------------+
        | Variable_name         | Value                    |
        +-----------------------+--------------------------+
        | Ssl_server_not_after  | Apr 28 14:16:39 2025 GMT |
        | Ssl_server_not_before | May  1 14:16:39 2015 GMT |
        +-----------------------+--------------------------+
        
    • Ssl_server_not_before
      • SSL 证书的第一个有效日期
  • ssl 会话缓存状态
    • Ssl_session_cache_hits
      • SSL 会话缓存命中数
    • Ssl_session_cache_misses
      • SSL 会话高速缓存未命中数
    • Ssl_session_cache_mode
      • SSL 会话缓存模式
    • Ssl_session_cache_overflows
      • SSL 会话高速缓存溢出的数量
    • Ssl_session_cache_size
      • SSL 会话缓存大小
    • Ssl_session_cache_timeouts
      • SSL 会话缓存超时的数量
    • Ssl_sessions_reused
      • 从缓存中重复使用了多少 SSL 连接
    • Ssl_used_session_cache_entries
      • 使用了多少个 SSL 会话缓存条目
  • ssl 连接验证
    • Ssl_ctx_verify_depth
      • SSL 上下文验证深度 (测试了链中的多少个证书)
    • Ssl_ctx_verify_mode
      • SSL 上下文验证模式
    • Ssl_verify_depth
      • 复制 SSL 连接的验证深度
    • Ssl_verify_mode
      • 服务器用于 SSL 连接的验证模式

      • 该值是一个位掩码;位在 openssl/ssl.h 头文件中定义

        # define SSL_VERIFY_NONE                 0x00
        # define SSL_VERIFY_PEER                 0x01
        # define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02
        # define SSL_VERIFY_CLIENT_ONCE          0x04
        
        • SSL_VERIFY_PEER
          • 指示服务器要求提供客户端证书。如果客户端提供了一个,则服务器执行验证,并且仅在验证成功的情况下继续进行
        • SSL_VERIFY_CLIENT_ONCE
          • 指示仅在初始握手中执行对客户端证书的请求
  • Ssl_default_timeout
    • 默认的 SSL 超时时间
  • Ssl_version
    • 连接的 SSL 协议版本
    • 如果连接未加密,则该值为空。
  • Ssl_callback_cache_hits
    • 回调缓存命中数

获取表锁的状态

mysql> show global status like 'table_locks%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 83068 |
| Table_locks_waited    | 0     |
+-----------------------+-------+
  • Table_locks_immediate
    • 可以立即授予对表锁定的请求的次数
  • Table_locks_waited
    • 无法立即授予对表锁的请求并需要等待的次数
    • 如果这很高并且有性能问题,则应首先优化查询,然后拆分一个或多个表或使用复制

打开表缓存的状态

mysql> show global status like 'table_open%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| Table_open_cache_hits      | 705735 |
| Table_open_cache_misses    | 8732   |
| Table_open_cache_overflows | 37     |
+----------------------------+--------+
  • Table_open_cache_hits
    • 打开表缓存查找的命中数
  • Table_open_cache_misses
    • 打开表缓存查找的未命中数
  • Table_open_cache_overflows
    • 打开表缓存的溢出次数
    • 这是打开或关闭表之后,高速缓存实例具有未使用的条目且实例的大小大于 table_open_cache/table_open_cache_instances 的次数

恢复日志的状态

mysql> show global status like 'tc_log%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Tc_log_max_pages_used | 0     |
| Tc_log_page_size      | 0     |
| Tc_log_page_waits     | 0     |
+-----------------------+-------+
  • Tc_log_max_pages_used

    此变量未使用。

    • 此变量指示自服务器启动以来用于日志的最大页面数。

      mysqld 恢复内部 XA 事务的事务协调器时,使用日志的内存映射实现。

    • 如果 Tc_log_max_pages_used*Tc_log_page_size 始终显着小于日志,则该大小可以减小

      • 选项
        • –log-tc-size
  • Tc_log_page_size

    此变量未使用。

    • 用于 XA 恢复日志的内存映射的页面大小
    • 默认值是使用 getpagesize() 确定的
  • Tc_log_page_waits
    • 对于恢复日志的内存映射,每次服务器无法提交事务且必须等待日志中的空闲页面时,此变量都会增加
    • 如果此值很大,则可能要增加日志大小
      • 选项
        • –log-tc-size
    • 对于基于二进制日志的恢复,由于存在两阶段提交,因此每次无法关闭二进制日志时,此变量都会增加。

线程状态

  • Threads_cached

    • 线程缓存中的线程数
  • Threads_connected
    • 当前打开的连接数
      • 一个会话分配一个连接线程
  • Threads_created
    • 创建的用于处理连接的线程数
    • 如果此变量值大,则可能要增加 thread_cache_size 的值
    • 高速缓存未命中率 = Threads_created/Connections
  • Threads_running
    • 未休眠的线程数

计时状态

mysql> show global status like 'uptime%';
+---------------------------+---------+
| Variable_name             | Value   |
+---------------------------+---------+
| Uptime                    | 1768257 |
| Uptime_since_flush_status | 1768257 |
+---------------------------+---------+
  • Uptime
    • 服务器启动的秒数
  • Uptime_since_flush_status
    • 自最近的 FLUSH STATUS 语句以来的秒数

性能模式状态

mysql> show global status like 'performance%';
+-------------------------------------------------------+-------+
| Variable_name                                         | Value |
+-------------------------------------------------------+-------+
| Performance_schema_accounts_lost                      | 0     |
| Performance_schema_cond_classes_lost                  | 0     |
| Performance_schema_cond_instances_lost                | 0     |
| Performance_schema_digest_lost                        | 0     |
| Performance_schema_file_classes_lost                  | 0     |
| Performance_schema_file_handles_lost                  | 0     |
| Performance_schema_file_instances_lost                | 0     |
| Performance_schema_hosts_lost                         | 0     |
| Performance_schema_index_stat_lost                    | 0     |
| Performance_schema_locker_lost                        | 0     |
| Performance_schema_memory_classes_lost                | 0     |
| Performance_schema_metadata_lock_lost                 | 0     |
| Performance_schema_mutex_classes_lost                 | 0     |
| Performance_schema_mutex_instances_lost               | 0     |
| Performance_schema_nested_statement_lost              | 0     |
| Performance_schema_prepared_statements_lost           | 0     |
| Performance_schema_program_lost                       | 0     |
| Performance_schema_rwlock_classes_lost                | 0     |
| Performance_schema_rwlock_instances_lost              | 0     |
| Performance_schema_session_connect_attrs_longest_seen | 146   |
| Performance_schema_session_connect_attrs_lost         | 0     |
| Performance_schema_socket_classes_lost                | 0     |
| Performance_schema_socket_instances_lost              | 0     |
| Performance_schema_stage_classes_lost                 | 0     |
| Performance_schema_statement_classes_lost             | 0     |
| Performance_schema_table_handles_lost                 | 0     |
| Performance_schema_table_instances_lost               | 0     |
| Performance_schema_table_lock_stat_lost               | 0     |
| Performance_schema_thread_classes_lost                | 0     |
| Performance_schema_thread_instances_lost              | 0     |
| Performance_schema_users_lost                         | 0     |
+-------------------------------------------------------+-------+
  • Performance_schema_xxx
    • 性能模式状态变量,提供有关由于内存限制而无法加载或创建的检测的信息

其它状态

  • mecab_charset
    • MeCab 全文分析器插件当前使用的字符集
    • 需要安装相应插件才能显示此变量
  • Secondary_engine_execution_count
    • 分载到辅助引擎的查询数

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注