在MySQL服务器中使用更多内存

时间:2015-04-11 17:09:49

标签: mysql

要点: 我还没有能够让MySQL使用超过1个内核的select语句,并且它不会超过10或15 GB的RAM。

机器: 我有一个使用MySQL 5.6运行MariaDB的专用数据库服务器。该机强大,48核和192GB内存。

数据: 我在一个大表中有大约2.5亿行(还有其他几个表,范围从5到1亿行)。我一直在从表中读取大量内容,有时会插入到新表中以对数据进行非规范化处理。我不是将此系统设置为事务系统,而是将其用于更少类似于具有少量连接的数据仓库。

问题: 当我查看我的服务器的统计数据时,对于运行了选择查询的一个核心,CPU看起来大约为70%,而内存大约为5-8%。没有IO等待,所以我确信我的MySQL内存分配有问题。在搜索了如何增加MySQL内存使用量后,我注意到配置文件可能是增加内存使用量的方法。

我根据在线搜索尝试的解决方案: 我已将表更改为MyISAM引擎并添加了许多索引。这有助于提高性能,但查询这些表仍然非常缓慢。使用加载数据infile的写入速度非常快,但运行温和复杂的选择查询需要数小时甚至数天。

我也尝试调整以下配置:

key-buffer-size                = 64G
read_buffer_size              = 1M
join_buffer_size               = 4294967295
read_rnd_buffer_size           = 2M
key_cache_age_threshold        = 400
key_cache_block_size          = 800
myisam_data_pointer_size       = 7
preload_buffer_size            = 2M
sort_buffer_size               = 2M
myisam_sort_buffer_size        = 10G
bulk_insert_buffer_size        = 2M
myisam_repair_threads          = 8
myisam_max_sort_file_size      = 30G
max-allowed-packet             = 256M
tmp-table-size                 = 32M
max-heap-table-size            = 32M
query-cache-type               = 0
query-cache-size               = 0
max-connections                = 500
thread-cache-size              = 150
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 2048

这些配置更改略微改善了使用的内存量,但我希望能够使用80%的内存......或者尽可能地获得最大性能。关于如何增加MySQL内存分配的任何想法?

2 个答案:

答案 0 :(得分:0)

由于您已经没有IO等待,因此您正在使用大量内存。你的缓冲区看起来也很大。因此,我怀疑使用额外内存可以节省大量CPU。您受到单核的CPU功率的限制。

两种策略可能有所帮助:

  1. 使用EXPLAIN或查询分析器查明是否可以优化查询以节省CPU时间。添加缺失的索引可能会有很大帮助。有时您也可能需要组合索引。

  2. 评估更适合分析查询的备用存储引擎(甚至数据库),并且可以使用所有核心。 MariaDB支持InfiniDB,但也有其他存储引擎和数据库,如Infobright,MonetDB。

答案 1 :(得分:0)

使用显示全局变量,例如"%thread%"你可能会得到一些关于启用线程并发选项的线索。

在2M测试的read_rnd_buffer_size(16384),您的数据可能会大大缩短完成查询所需的时间。