我应该使用thread_cache_size的哪个值?


25

我正在将Asp.Net和MySQL一起使用。在.Net连接字符串中,我将“最大池大小”设置为150。

如果运行以下命令,则会得到以下值:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474

这给出了Threads_created / Connections = 0,1392。

因此,看来我需要增加thread_cache_size

但是,如果我运行,SHOW PROCESSLIST我总是会看到由于.Net创建的池,我打开了很多连接(其中大多数处于睡眠状态)。我仍然需要设置,thread_cache_size因为我仍然会重用连接池中的连接吗?如果“池大小”为150,您认为将值设置thread_cache_size为150+ 是一个不错的选择吗?这会严重影响CPU和内存吗?

Answers:


43

基于MySQL的文档中的信息,你应该做到以下几点:找出并发连接mysqld的最高数量已经使用过的连接由Threads_createdMax_used_connections

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

尝试计算以下内容

Threads_created / Connections:如果超过0.01,则增加thread_cache_size。至少thread_cache_size应大于Max_used_connections


感谢您的好评!我更新了我的问题。
马丁

我认为您打算使用mysql> SHOW GLOBAL STATUS LIKE'connections'; (您已两次编写max_used_connections)
Alekc 2012年

1
我只想补充一点,参照本dev.mysql.com/doc/refman/5.7/en/...你应该增加8 Max_used_connections为thread_cache_size的值(不超过100)
CME64

1
实际上,该手册建议使用默认值(mac_used_connections的1%)+ 8 ....或100 ...以较小者为准。
Christopher McGowan

对我来说,#是264/103134,得出的结果是0.0026,比0.01小得多,但是我的MaxUsedConnections是72,所以最后一句话非常矛盾
boatcoder

11

根据MySQL文档,您应该进行设置,thread_cache_size以便大多数新连接使用缓存中的线程,而不是新创建的线程。尽管通常不会显着提高性能,但这可以节省一些线程创建开销:

通过尽可能地重用从缓存中获取的线程来满足线程请求,并且仅当缓存为空时才创建新线程。如果您有很多新连接,则可以增加此变量以提高性能。通常,如果您具有良好的线程实现,则这不会显着提高性能。但是,如果您的服务器每秒看到数百个连接,则通常应将thread_cache_size设置得足够高,以便大多数新连接使用缓存的线程(资源)

这意味着你应该设置你的thread_cache_size,这样Threads_created / Connections(导致创建新线程的连接%)相当低。如果从字面上看是MySQL文档(“最多”),则该值应<50%。RolandoMySQLDBA的回答说<1%。我不知道谁更接近真相。

您不应将其设置为thread_cache_size高于Max_used_connections。RolandoMySQLDBA的答案的最后一句话(“至少,thread_cache_size应该大于Max_used_connections”)似乎并不明智,因为它说您应在缓存中保留比服务器曾经使用的线程更多的线程。MySQL永远不会将那么多线程放入缓存中-它不会抢先将线程放入缓存中-它仅客户端创建线程并断开连接后才将它们放入缓存中。如果您永远不会同时连接X个客户端,则缓存中将永远不会有X个线程:

当客户端断开连接时,如果那里的线程少于thread_cache_size,则将客户端的线程放入缓存中。(资源)

另请参阅Michael的以下答案

将thread_cache_size设置为大于max_connections的值似乎是非常无益的建议...高速缓存可能不会大于max_connections,甚至在接近该大小的任何地方的高速缓存都只有在线程上有大量搅动时才有意义...在一个行为良好的应用程序中,情况并非如此。

/dba//a/28701


我认同!我测试此配置后,“ thread_cache_size应大于Max_used_connections”没有帮助。
阮阮

-2

在日常工作中,“新员工”可能需要联系吗?大多数魔术师都不知道未来几天会雇用多少人。MySQL的V 8建议将CAP thread_cache_size设置为100,以防止过载,而不管max_used_connections如何。对我来说,100是一个不错的上限。

请查看此链接。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.