千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

9.7 查询表的增、删、改、查数据量和I/O耗时统计信息

使用schema_table_statistics_with_buffer视图可以查询表的增、删、改、查数据量,I/O耗时,以及在InnoDB缓冲池中占用情况等统计信息,在默认情况下按照增、删、改、查操作的总表I/O延迟时间(执行时间,也可以理解为存在最多I/O争用的表)降序排列。数据来源:performance_schema.table_io_waits_summary_by_table、sys.x$ps_schema_table_statistics_ io、sys.x$innodb_buffer_stats_by_table。另外,该视图在内部使用了辅助视图sys.x$ps_schema_table_statistics_io。

下面是使用schema_table_statistics_with_buffer视图查询的结果集(请自行创建库表,并执行一些DML语句进行造数)。

mysql> select * from schema_table_statistics_with_buffer limit 1\G
*************************** 1. row ***************************
              table_schema: xiaoboluo   # 包含table_name字段的表所在的schema名称
                table_name: test   # 表名
              rows_fetched: 1561   # 表读取操作的总数据行数,针对表查询操作
            fetch_latency: 2.08 m  #  select 操作的 I/O 事件的总延迟时间执行时间,针对表查询操作
            rows_inserted: 1159    # 表插入操作的总数据行数,针对表插入操作
            insert_latency: 865.33 ms# 表插入操作的I/O事件的延迟时间执行时间,针对表插入操作
              rows_updated: 0      # 表更新操作的总数据行数,针对表更新操作
            update_latency: 0 ps   # 表更新操作的I/O事件的总延迟时间执行时间,针对表更新操作
              rows_deleted: 0      # 表删除操作的总数据行数,针对表删除操作
            delete_latency: 0 ps   # 表删除操作的I/O事件的总延迟时间执行时间,针对表删除操作
          io_read_requests: 48     # 表读取操作的总请求次数,针对表.ibd.frm文件的读I/O操作
                  io_read: 179.29 KiB   # 与表读操作相关的所有文件读取操作的总字节数,针对表.ibd.frm文件的读I/O操作
          io_read_latency: 15.02 ms # 与表读操作相关的所有文件读取操作的总延迟时间执行时间,针对表.ibd.frm文件的读I/O操作
        io_write_requests: 10      # 表写操作的总请求次数,针对表.ibd.frm文件的写I/O操作
                  io_write: 160.00 KiB  # 与表写操作相关的所有文件写操作的总字节数,针对表.ibd.frm文件的写I/O操作
          io_write_latency: 76.24 us   # 与表写操作相关的所有文件写操作的总延迟时间执行时间,针对表.ibd.frm文件的写I/O操作
          io_misc_requests: 47          # 与表其他各种混杂操作相关的所有文件的 I/O 请求总次数,针对表.ibd.frm文件的其他混杂I/O操作
          io_misc_latency: 9.47 ms      # 与表其他各种混杂操作相关的所有文件的I/O请求的总延迟时间执行时间,针对表.ibd.frm文件的其他混杂I/O操作
  innodb_buffer_allocated: 112.00 KiB  # 当前已分配给表的缓冲池总字节数
        innodb_buffer_data: 48.75 KiB  # 当前已分配给表的数据部分使用的缓冲池字节总数
        innodb_buffer_free: 63.25 KiB  # 当前已分配给表的非数据部分使用的缓冲池字节总数即空闲页所在的字节数,计算公式:innodb_buffer_allocated - innodb_buffer_data)
      innodb_buffer_pages: 7            # 当前已分配给表的缓冲池总页数
innodb_buffer_pages_hashed: 0          # 当前已分配给表的自适应hash索引页总数
  innodb_buffer_pages_old: 0           # 当前已分配给表的旧页总数(位于LRU列表中的旧块子列表中的页数)
innodb_buffer_rows_cached: 1162        # 在缓冲池中为表缓存的总数据行数(table_name字段显示的表在缓冲池中缓存了多少行数据)
1 row in set(2.21 sec)