mysqld内存消耗的连续上升

时间:2016-03-10 09:12:53

标签: mysql memory

Mysqld内存消耗永远上升,似乎永远不会被释放。它开始大约6GB,但在几周内逐渐上升到大约10GB,而在检查innodb状态时,缓冲池和字典分别只使用了10GB和10GB的10GB。

这是在具有12GB内存的服务器上使用MySQL 5.6.16。一些表是分区的,大约有8000个idb文件。每天还会创建一个表格。

我试过FLUSH TABLES没有成功。表已关闭,但内存根本没有释放。实际上,消耗了更多的内存。

为什么要消耗内存? 在使用分区表时,是否存在未释放内存的已知问题?

的my.cnf

query_cache_size = 512M
query_cache_limit = 16M
max_allowed_packet = 16M
table_open_cache = 1024
sort_buffer_size = 2M
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 2MB
myisam_sort_buffer_size = 1M
max_connections = 1024
thread_cache = 1024
tmp_table_size = 16M
max_heap_table_size = 16M
wait_timeout = 20
join_buffer_size = 256KB
thread_cache_size = 50
table_definition_cache = 400
key_buffer_size = 256M

1 个答案:

答案 0 :(得分:0)

首先,您应该知道MySQL一旦使用了内存,就永远不会释放内存。下次查询时会保留它。

这是我的查询,用于确定InnoDB数据库将使用的最大内存量:

SELECT ( @@key_buffer_size
       + @@query_cache_size
       + @@innodb_buffer_pool_size
       + @@innodb_log_buffer_size
       + @@max_allowed_packet
       + @@max_connections * ( @@read_buffer_size
       + @@read_rnd_buffer_size
       + @@sort_buffer_size
       + @@join_buffer_size
       + @@binlog_cache_size
       + 2*@@net_buffer_length
       + @@thread_stack
       + @@tmp_table_size )
) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;

查看用于不同事物的内存量的细分:

-- To see a breakdown of what's using how much memory:
SELECT @@key_buffer_size/(1024*1024) as `key_buffer_size_IN_MB`,
       @@query_cache_size/(1024*1024) as 'query_cache_size_IN_MB',
       @@innodb_buffer_pool_size/(1024*1024) as 'innodb_buffer_pool_size_IN_MB',
       @@innodb_log_buffer_size/(1024*1024) as 'innodb_log_buffer_size_IN_MB',
       @@max_connections*@@read_buffer_size/(1024*1024) as '@@read_buffer_size_IN_MB',
       @@max_connections*@@read_rnd_buffer_size/(1024*1024) as 'read_rnd_buffer_size_IN_MB',
       @@max_connections*@@sort_buffer_size/(1024*1024) as 'sort_buffer_size_IN_MB',
       @@max_connections*@@join_buffer_size/(1024*1024) as 'join_buffer_size_IN_MB',
       @@max_connections*@@binlog_cache_size/(1024*1024) as 'binlog_cache_size_IN_MB',
       @@max_connections*@@thread_stack/(1024*1024) as 'thread_stack_IN_MB',
       @@max_connections*@@tmp_table_size/(1024*1024) as 'tmp_table_size_IN_MB',
       @@max_connections*@@net_buffer_length*2/(1024*1024) as 'net_buffer_size_IN_MB'
       ;