MySQL占用内存的计算方法
Posted 幸福丶如此
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL占用内存的计算方法相关的知识,希望对你有一定的参考价值。
结合官方文档 https://dev.mysql.com/doc/refman/5.7/en/memory-use.html 和 percona文档 https://www.percona.com/blog/2018/06/28/what-to-do-when-mysql-runs-out-of-memory-troubleshooting-guide/
得出以下MySQL占用内存的计算方法
--查看每个线程占用多少内存,然后乘以正在运行的线程(也就是排查sleep的)。
SELECT ( ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@max_allowed_packet
+ @@net_buffer_length )
) / (1024*1024) AS MEMORY_MB;
--查看MySQL全局占用多少内存
select (@@innodb_buffer_pool_size
+@@innodb_log_buffer_size
+@@key_buffer_size) / 1024 /1024 AS MEMORY_MB;
--查看performance_schema占用多少内存
SELECT SUBSTRING_INDEX(event_name,'/',2) AS
code_area, sys.format_bytes(SUM(current_alloc))
AS current_alloc
FROM sys.x$memory_global_by_current_bytes
GROUP BY SUBSTRING_INDEX(event_name,'/',2)
ORDER BY SUM(current_alloc) DESC;
--查看 memory 存储引擎占用多少内存
select sum(max_data_length)/1024/1024 as MEMORY_MB from tables where engine='memory';
--查看innodb_buffer_pool情况
select sum(POOL_SIZE),sum(free_buffers),sum(DATABASE_PAGES) from INNODB_BUFFER_POOL_STATS;
--根据thread的个数,计算内存
select count(*) from information_schema.processlist where db="db_name" ;
扩展:如果出现MySQL内存过高,一般需要优化数据库的参数
performance_schema_max_table_instances=150
table_definition_cache=150
table_open_cache=64
performance_schema = off
innodb_buffer_pool_size = 6144M #这个参数值生产环境一般是物理内存的 3/4 ,其他环境可以根据情况调整
以上是关于MySQL占用内存的计算方法的主要内容,如果未能解决你的问题,请参考以下文章