Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 最好的查询缓存大小/内存比是多少_Mysql_Performance_Ubuntu_Caching_Ram - Fatal编程技术网

Mysql 最好的查询缓存大小/内存比是多少

Mysql 最好的查询缓存大小/内存比是多少,mysql,performance,ubuntu,caching,ram,Mysql,Performance,Ubuntu,Caching,Ram,嗨,我想更改我的/etc/my.cnf文件(mysql的配置文件) 为了在我的查询中获得更好的性能,应该使用以下值 query_cache_type = 1 query_cache_limit = 1M query_cache_size = 16M 是否存在缓存大小/RAM的最佳比率?我的ubuntu机器上有8GB的ram。如果有一个定义良好的优化,就不需要配置选项。默认情况下,MySQL将使用该最佳值。仅在非常特定的情况下(从表中读取的内容比写入的内容多得多)才有用,因为每次向表中写入任何内

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

为了在我的查询中获得更好的性能,应该使用以下值

query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

是否存在缓存大小/RAM的最佳比率?我的ubuntu机器上有8GB的ram。

如果有一个定义良好的优化,就不需要配置选项。默认情况下,MySQL将使用该最佳值。仅在非常特定的情况下(从表中读取的内容比写入的内容多得多)才有用,因为每次向表中写入任何内容时,缓存都会在每个表的基础上清空。它也只有在您反复使用相同的参数声明完全相同的查询时才有效

您的最佳价值需要衡量出来,这在很大程度上取决于您的用例。如果您有很多InnoDB表,那么您将从:
InnoDB\u buffer\u pool\u size
中得到更多的使用。将该变量设置得尽可能高(在仅MySQL、仅InnoDB的机器上,这可能意味着可用RAM的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

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

由此推论,拥有过大的QC可能会“缓慢”。我建议查询缓存大小不超过50M


我希望这可以解释为什么我没有回答您关于RAM百分比的标题问题。

这取决于查询结果的大小。如果您的查询缓存限制为5M,查询缓存大小为256M,那么最坏的情况是,您的缓存中会有55个5M的查询结果

根据您运行最多的查询类型,最好设置较小的查询缓存限制(64k),使缓存中的查询结果总数4096。除此之外,缓存中的结果更小,并且不会在需要时锁定查询缓存更长的时间


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

您可以测量数据库的使用情况,并相应地调整缓存。没有“最佳”价值。如果有,默认情况下MySQL将随附。那么如果RAM=64G,我们可以将每个值乘以8吗?在生产服务器上进行设置是否很好?不,没有一套设置适合所有人。你必须衡量你的工作量,找出最适合你的方法。最好只在服务器上运行MySQL。然后,您应该将重点放在将innodb_buffer_pool_大小设置为尽可能大。如果我有一个只运行MySQL的64GB服务器,我会将innodb_buffer_pool_size设置为62GB或类似的大小。我的例子是一个服务器,它也需要RAM来连接其他东西,比如web服务器。