Performance Schema 维护文件 I/O 汇总表,这些表汇总了有关 I/O 操作的信息。
文件 I/O 事件汇总信息示例
mysql> SELECT * FROM performance_schema.file_summary_by_event_name\G
...
*************************** 2. row ***************************
EVENT_NAME: wait/io/file/sql/binlog
COUNT_STAR: 31
SUM_TIMER_WAIT: 8243784888
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 265928484
MAX_TIMER_WAIT: 6490658832
...
mysql> SELECT * FROM performance_schema.file_summary_by_instance\G
...
*************************** 2. row ***************************
FILE_NAME: /var/mysql/share/english/errmsg.sys
EVENT_NAME: wait/io/file/sql/ERRMSG
EVENT_NAME: wait/io/file/sql/ERRMSG
OBJECT_INSTANCE_BEGIN: 4686193384
COUNT_STAR: 5
SUM_TIMER_WAIT: 13990154448
MIN_TIMER_WAIT: 26349624
AVG_TIMER_WAIT: 2798030607
MAX_TIMER_WAIT: 8150662536
...
每个文件 I/O 汇总表都有一个或多个分组列,用于指示表如何汇总事件。事件名称指的是 setup_instruments
表中事件检测器的名称。
file_summary_by_event_name
有一个EVENT_NAME
列。每行汇总了给定事件名称的事件。file_summary_by_instance
有FILE_NAME
、EVENT_NAME
和OBJECT_INSTANCE_BEGIN
列。每行汇总了给定文件和事件名称的事件。
每个文件 I/O 汇总表都有以下汇总列,其中包含汇总值。有些列更通用,其值与更细粒度列的值之和相同。这样,可以直接在更高级别上进行汇总,而无需使用对低级别列求和的用户定义视图。
COUNT_STAR
、SUM_TIMER_WAIT
、MIN_TIMER_WAIT
、AVG_TIMER_WAIT
、MAX_TIMER_WAIT
这些列汇总了所有 I/O 操作。
COUNT_READ
、SUM_TIMER_READ
、MIN_TIMER_READ
、AVG_TIMER_READ
、MAX_TIMER_READ
、SUM_NUMBER_OF_BYTES_READ
这些列汇总了所有读取操作,包括
FGETS
、FGETC
、FREAD
和READ
。COUNT_WRITE
、SUM_TIMER_WRITE
、MIN_TIMER_WRITE
、AVG_TIMER_WRITE
、MAX_TIMER_WRITE
、SUM_NUMBER_OF_BYTES_WRITE
这些列汇总了所有写入操作,包括
FPUTS
、FPUTC
、FPRINTF
、VFPRINTF
、FWRITE
和PWRITE
。COUNT_MISC
、SUM_TIMER_MISC
、MIN_TIMER_MISC
、AVG_TIMER_MISC
、MAX_TIMER_MISC
这些列汇总了所有其他 I/O 操作,包括
CREATE
、DELETE
、OPEN
、CLOSE
、STREAM_OPEN
、STREAM_CLOSE
、SEEK
、TELL
、FLUSH
、STAT
、FSTAT
、CHSIZE
、RENAME
和SYNC
。这些操作没有字节计数。
文件 I/O 汇总表具有以下索引:
-
主键为 (
EVENT_NAME
)
-
主键为 (
OBJECT_INSTANCE_BEGIN
)索引为 (
FILE_NAME
)索引为 (
EVENT_NAME
)
允许对文件 I/O 汇总表执行 TRUNCATE TABLE
操作。它会将汇总列重置为零,而不是删除行。
MySQL 服务器使用多种技术通过缓存从文件中读取的信息来避免 I/O 操作,因此您可能期望会导致 I/O 事件的语句实际上并没有这样做。您可以通过刷新缓存或重新启动服务器以重置其状态来确保 I/O 的发生。