什么是最好的query_cache_size / Ram比率

时间:2015-10-02 10:15:01

标签: mysql performance ubuntu caching ram

嗨我想更改我的/etc/my.cnf文件(mysql的配置文件)。

以下值应该在我的查询中获得更好的效果。

query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

cache_size / RAM有最佳比例吗?我的ubuntu机器上有8GB的内存。

3 个答案:

答案 0 :(得分:5)

如果有明确定义的最佳值,则不需要配置选项。默认情况下,MySQL会使用该最佳值。 query cache仅对非常特殊的情况有用(您从表中读取的内容比写入的内容多得多),因为每次向表中写入内容时,缓存都会按表进行清空。只有当您使用相同的参数一遍又一遍地声明完全相同的查询时,它才有效。

您的最佳价值需要衡量,并且很大程度上取决于您的使用案例。如果您有很多InnoDB表格,您将从InnoDB buffer poolinnodb_buffer_pool_size中获得更多用途。将此变量设置得尽可能高(并且在仅限MySQL的InnoDB机器上,这可能意味着高达可用内存的80%)。

我们在8GB RAM服务器上托管了数百个小型网站,该服务器在同一机器上运行数据库和Web服务器,混合使用MyISAM和InnoDB表。以下是我们的比较配置:

innodb_file_per_table=1
open_files_limit=50000
max_allowed_packet=268435456

innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_old_blocks_time=1000
innodb_open_files=5000

key_buffer_size=16M
read_buffer_size=256K
read_rnd_buffer_size=256K
query_cache_size=256M
query_cache_limit=5M
join_buffer_size=4M
sort_buffer_size=4M
max_heap_table_size=64M
tmp_table_size=64M
table_open_cache=4500
table_definition_cache=4000
thread_cache_size=50

答案 1 :(得分:2)

如果您的计算机有大量写入,请完全关闭查询缓存(type = 0,size = 0)。这是因为对表的每次写入都会导致QC中的所有条目被删除。

作为一个必然结果,不得不加大质量控制可以“慢慢地”#34;我建议query_cache_size不超过50M。

我希望这能解释为什么我没有解决有关RAM百分比的标题问题。

答案 2 :(得分:2)

这取决于查询结果的大小。如果您的查询缓存限制为5M,query_cache_size为256M,则最糟糕的情况是,您最终会在缓存中获得55个55M的查询结果。

根据您运行最多的查询类型,您最好设置较小的query_cache_limit( 64k ),在缓存中总共提供 4096 较小的查询结果。除此之外,缓存中的结果更小,并且不会将查询缓存锁定得更长。

MySQL的查询缓存使用单个线程来锁定每个请求的缓存。如果许多请求连接到查询缓存,则整体性能将下降。