MySQLのドキュメントによると、thread_cache_size
ほとんどの新しい接続では、新しく作成されたスレッドではなくキャッシュのスレッドを使用するように設定する必要があります。これにより、スレッド作成のオーバーヘッドがいくらか節約されますが、通常はパフォーマンスが大幅に向上することはありません。
スレッドの要求は、可能であればキャッシュから取得したスレッドを再利用することで満たされ、キャッシュが空の場合にのみ新しいスレッドが作成されます。多くの新しい接続がある場合、パフォーマンスを向上させるためにこの変数を増やすことができます。通常、これは、適切なスレッド実装がある場合、顕著なパフォーマンスの改善を提供しません。ただし、サーバーが毎秒数百の接続を認識する場合、通常、ほとんどの新しい接続がキャッシュされたスレッドを使用するようにthread_cache_sizeを十分に高く設定する必要があります。(ソース)
これはthread_cache_size
、Threads_created / Connections
(新しいスレッドの作成につながる接続の割合)がかなり低くなるように設定する必要があることを意味します。MySQLドキュメントを文字通り(「ほとんど」)取得する場合、値は50%未満である必要があります。RolandoMySQLDBAの答えは1%未満です。誰が真実に近いのか分かりません。
より大きい値に設定しないでください。RolandoMySQLDBAの答えの最後の文(「少なくとも、thread_cache_sizeはMax_used_connectionsよりも大きい必要があります」)は、サーバーが使用するよりも多くのスレッドをキャッシュに保持する必要があると言っているため、賢明ではありません。MySQLはとにかく多くのスレッドをキャッシュに入れることはありません-スレッドをプリエンプティブにキャッシュに入れることはありません- クライアントがスレッドを作成して切断した後にスレッドを置くだけです。Xクライアントが同時に接続することがない場合、キャッシュにXスレッドはありません。thread_cache_size
Max_used_connections
クライアントが切断すると、thread_cache_sizeスレッドよりも少ないスレッドがある場合、クライアントのスレッドがキャッシュに配置されます。(ソース)
Michaelによるこの回答も参照してください。
thread_cache_sizeをmax_connectionsよりも大きい値に設定すると、非常に役に立たないアドバイスのように思えます。 ...これは、行儀の良いアプリケーションでは当てはまりません。
/dba//a/28701