嗨我想更改我的/etc/my.cnf文件(mysql的配置文件)。
以下值应该在我的查询中获得更好的效果。
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M
cache_size / RAM有最佳比例吗?我的ubuntu机器上有8GB的内存。
答案 0 :(得分:5)
如果有明确定义的最佳值,则不需要配置选项。默认情况下,MySQL会使用该最佳值。 query cache仅对非常特殊的情况有用(您从表中读取的内容比写入的内容多得多),因为每次向表中写入内容时,缓存都会按表进行清空。只有当您使用相同的参数一遍又一遍地声明完全相同的查询时,它才有效。
您的最佳价值需要衡量,并且很大程度上取决于您的使用案例。如果您有很多InnoDB表格,您将从InnoDB buffer pool:innodb_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的查询缓存使用单个线程来锁定每个请求的缓存。如果许多请求连接到查询缓存,则整体性能将下降。