理解MySQL如何使用内存是调优内存以获得最佳性能以及排除意外内存使用情况的关键,例如,当您使用MySQL Server的数量远远超过基于配置设置的预期数量时。本篇文章分享如何通过MySQL语句查看MySQL内存使用情况。
在MySQL历史的早期,了解内存使用情况的细节很困难,并且包含很多猜测。是否有可能某些正在运行的查询需要一个大的临时表或为存储的用户变量分配了很多内存?是否有任何存储过程占用了意外的大量内存?可能是MySQL内存使用过多的原因,但是您不容易发现情况是否如此。
MySQL 5.7(在Performance Schema中添加了内存检测)和MySQL 8.0中,所有这些更改都是默认情况下启用的,因此您几乎可以从任何正在运行的实例中获取此数据。
如果您正在查找当前的内存使用详细信息,则Sys模式可提供出色的视图:
mysql> select event_name,current_alloc from sys.memory_global_by_current_bytes limit 10;
+---------------------------------------------------------------+---------------+
| event_name | current_alloc |
+---------------------------------------------------------------+---------------+
| memory/innodb/buf_buf_pool | 262.12 MiB |
| memory/temptable/physical_ram | 64.00 MiB |
| memory/performance_schema/events_statements_summary_by_digest | 39.67 MiB |
| memory/sql/TABLE | 33.32 MiB |
| memory/innodb/ut0link_buf | 24.00 MiB |
| memory/innodb/lock0lock | 20.51 MiB |
| memory/innodb/memory | 17.79 MiB |
| memory/innodb/buf0dblwr | 17.08 MiB |
| memory/innodb/ut0new | 16.08 MiB |
| memory/performance_schema/events_statements_history_long | 13.89 MiB |
+-------------------------------------
该视图显示了整体上当前分配的内存。您还可以通过查看来自不同主机的连接分配的内存来进一步深入研究:
mysql> select host,current_allocated from memory_by_host_by_current_bytes;
+-------------------------------+-------------------+
| host | current_allocated |
+-------------------------------+-------------------+
| localhost | 1.19 GiB |
| background | 101.28 MiB |
| li1317-164.members.linode.com | 49.61 MiB |
| li1319-234.members.linode.com | 27.90 MiB |
| li1316-24.members.linode.com | 27.00 MiB |
+-------------------------------+-------------------+
5 rows in set (0.02 sec)
甚至通过给定的thread_id检查分配,这对于诊断内存密集型事务或查询非常有帮助:
mysql> select thread_id,user,current_allocated from memory_by_thread_by_current_bytes limit 5;
+-----------+------------------------------------+-------------------+
| thread_id | user | current_allocated |
+-----------+------------------------------------+-------------------+
| 44 | innodb/srv_worker_thread | 1.99 MiB |
| 48 | innodb/srv_worker_thread | 1.16 MiB |
| 54322 | root@localhost | 1.10 MiB |
| 46 | innodb/srv_worker_thread | 777.29 KiB |
| 43881 | app1@li1317-164.members.linode.com | 274.84 KiB |
+-----------+------------------------------------+-------------------+
5 rows in set (0.43 sec)
以上就是如何通过MySQL语句查看MySQL内存使用情况全部内容。