检查内存使用情况

要在performance_schema中启用内存监测,请启用 memory 类的插桩。启用后就可以查看MySQL内部结构如何使用内存的详细信息。

UPDATE setup_instruments
SET enabled = 'YES'
WHERE name LIKE 'memory/%'
  AND enabled = 'NO';

直接使用performance schema

Performance Schema将内存使用统计信息存储在摘要表中,摘要表的名称以 memory_summary_ 前缀开头。内存使用聚合统计,其参数如下表所示:

聚合表描述

memory_summary_global_by_event_name

按事件名全局聚合

memory_summary_by_thread_by_event_name

按线程聚合:包括后台线程和用户线程

memory_summary_by_account_by_event_name

按用户账号聚合

memory_summary_by_host_by_event_name

按主机聚合

memory_summary_by_user_by_event_name

按用户名聚合

例如,要找到占用大部分内存的 InnoDB 结构,可以执行以下查询:

SELECT
    event_name,
    current_number_of_bytes_used / 1024 / 1024 AS current_mb,
    high_number_of_bytes_used / 1024 / 1024    AS high_mb
FROM memory_summary_global_by_event_name
WHERE event_name LIKE 'memory/innodb/%'
ORDER BY current_number_of_bytes_used DESC
LIMIT 10;

使用sys schema

使用sys schema中的视图可以更好地获取内存统计信息,可以按 host、user、thread 或 global 进行聚合。

SHOW TABLES FROM sys LIKE 'memory_%';

+---------------------------------+
|Tables_in_sys (memory_%)         |
+---------------------------------+
|memory_by_host_by_current_bytes  |
|memory_by_thread_by_current_bytes|
|memory_by_user_by_current_bytes  |
|memory_global_by_current_bytes   |
|memory_global_total              |
+---------------------------------+

memory_global_total 视图包含一个单独的值,显示被监测内存的总量:

SELECT * FROM sys.memory_global_total;

+---------------+
|total_allocated|
+---------------+
|143.44 MiB     |
+---------------+

最后更新于