在MySQL服务器中使用更多内存
总结: 我还没有能够让MySQL为select语句使用超过1个内核,而且它的RAM也没有超过10或15GB 机器: 我有一个使用MySQL 5.6运行MariaDB的专用数据库服务器。这台机器有48个内核和192GB的RAM,性能很强 数据: 我在一个大表中有大约2.5亿行,还有其他几个表,从5-1亿行不等。我一直在从表中进行大量的读取,有时插入到一个新表中,对数据进行一点反规范化。我并不是将这个系统设置为一个事务系统,相反,它将更类似于一个连接很少的数据仓库 问题是: 当我查看服务器的统计数据时,一个运行select查询的内核的CPU大约为70%,内存大约为5-8%。没有IO等待,所以我确信MySQL内存分配有问题。在研究了如何提高MySQL中的内存使用率后,我注意到配置文件可能是提高内存使用率的方法 我基于在线搜索尝试的解决方案: 我已将表更改为MyISAM引擎,并添加了许多索引。这有助于提高性能,但查询这些表的速度仍然非常慢。使用load data infile的写入速度非常快,但是,运行稍微复杂的select查询需要几个小时甚至几天 我还尝试调整了以下配置:在MySQL服务器中使用更多内存,mysql,Mysql,总结: 我还没有能够让MySQL为select语句使用超过1个内核,而且它的RAM也没有超过10或15GB 机器: 我有一个使用MySQL 5.6运行MariaDB的专用数据库服务器。这台机器有48个内核和192GB的RAM,性能很强 数据: 我在一个大表中有大约2.5亿行,还有其他几个表,从5-1亿行不等。我一直在从表中进行大量的读取,有时插入到一个新表中,对数据进行一点反规范化。我并不是将这个系统设置为一个事务系统,相反,它将更类似于一个连接很少的数据仓库 问题是: 当我查看服务器的统计数据
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的内存分配有什么想法吗?因为您已经没有IO等待,所以您正在使用大量的内存。你的缓冲区看起来也相当大。因此,我怀疑使用额外的内存是否能显著节省CPU。您受到单核CPU能力的限制 有两种战略可以帮助: 使用解释或查询分析器来确定是否可以优化查询以节省CPU时间。添加缺少的索引会有很大帮助。有时您可能还需要组合索引 评估一个更适合分析查询并可以使用所有核心的替代存储引擎甚至数据库。MariaDB支持InfiniDB,但也有其他可用的存储引擎和数据库,如Infobright、MonetDB
使用show全局变量,如%thread%,您可能会得到一些关于启用线程并发选项的线索
使用数据在16384测试2M的读取缓冲区大小可能会大大缩短完成查询所需的时间。一次查询不会使用多个核心。每个连接一个线程。同意,我已经意识到它不会在一次选择中使用更多的内核,这就是为什么我一直在努力让它使用更多的内存。