thread_cache_sizeのどの値を使用すればよいですか?


25

Asp.NetとMySQLを併用しています。.Net接続文字列で、Max Pool Sizeを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の場合、150 thread_cache_size+ に設定するのが適切だと思いますか?これはCPUとメモリに大きな影響を与えますか?

回答:


43

MySQLのドキュメント内の情報に基づいて次の操作を行う必要があります。同時接続のmysqldの最大数は、使用してきたかを調べるの接続をThreads_created、およびMax_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を2回書いた)
Alekc

1
このdev.mysql.com/doc/refman/5.7/en/を参照して追加したいだけです…thread_cache_size値のMax_used_connectionsに8を追加する必要があります(100を超えない)
CME64

1
実際、マニュアルでは、デフォルトの(mac_used_connectionsの1%)+ 8 ....または100 ...のいずれか小さい方を推奨しています。
クリストファー

私にとって#は264/103134であり、0.0026になります。これは0.01未満です。しかし、MaxUsedConnectionsは72であるため、最後の文はひどく矛盾しています
-boatcoder

11

MySQLのドキュメントによると、thread_cache_sizeほとんどの新しい接続では、新しく作成されたスレッドではなくキャッシュのスレッドを使用するように設定する必要があります。これにより、スレッド作成のオーバーヘッドがいくらか節約されますが、通常はパフォーマンスが大幅に向上することはありません。

スレッドの要求は、可能であればキャッシュから取得したスレッドを再利用することで満たされ、キャッシュが空の場合にのみ新しいスレッドが作成されます。多くの新しい接続がある場合、パフォーマンスを向上させるためにこの変数を増やすことができます。通常、これは、適切なスレッド実装がある場合、顕著なパフォーマンスの改善を提供しません。ただし、サーバーが毎秒数百の接続を認識する場合、通常、ほとんどの新しい接続がキャッシュされたスレッドを使用するようにthread_cache_sizeを十分に高く設定する必要があります。(ソース)

これはthread_cache_sizeThreads_created / Connections(新しいスレッドの作成につながる接続の割合)がかなり低くなるように設定する必要があることを意味します。MySQLドキュメントを文字通り(「ほとんど」)取得する場合、値は50%未満である必要があります。RolandoMySQLDBAの答えは1%未満です。誰が真実に近いのか分かりません。

より大きい値に設定しないでください。RolandoMySQLDBAの答えの最後の文(「少なくとも、thread_cache_sizeはMax_used_connectionsよりも大きい必要があります」)は、サーバー使用するよりも多くのスレッドをキャッシュに保持する必要があると言っているため、賢明ではありません。MySQLはとにかく多くのスレッドをキャッシュに入れることはありません-スレッドをプリエンプティブにキャッシュに入れることはありません- クライアントがスレッドを作成して切断した後にスレッドを置くだけです。Xクライアントが同時に接続することがない場合、キャッシュにXスレッドはありません。thread_cache_sizeMax_used_connections

クライアントが切断すると、thread_cache_sizeスレッドよりも少ないスレッドがある場合、クライアントのスレッドがキャッシュに配置されます。(ソース)

Michaelによるこの回答も参照してください。

thread_cache_sizeをmax_connectionsよりも大きい値に設定すると、非常に役に立たないアドバイスのように思えます。 ...これは、行儀の良いアプリケーションでは当てはまりません。

/dba//a/28701


私はそう思う!この構成をテストした後、「thread_cache_sizeはMax_used_connectionsより大きくなければなりません」とは言えません。
CK。グエン

-2

一般的な営業日に、「新入社員」に接続が必要になる可能性はありますか?ほとんどの魔術師は、今後数日間で何人の人を雇うことができるかを知りません。MySQLのV 8は、max_used_connectionsに関係なく過負荷を防ぐために、CAP thread_cache_sizeを100にすることを推奨しています。私にとって、100は良いCAPです。

こちらのリンクをご覧ください。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.