web-dev-qa-db-ja.com

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

MySQLと一緒にAsp.Netを使用しています。 .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とメモリに大きな影響を与えますか?

25
Martin

MySQLドキュメントの情報に基づいて、次のことを実行する必要があります。mysqldが Connectionsを使用して同時接続した最大数を確認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_sizeMax_used_connectionsより大きくなければなりません。

43
RolandoMySQLDBA

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

スレッドの要求は、可能であればキャッシュから取得したスレッドを再利用することで満たされ、キャッシュが空の場合にのみ新しいスレッドが作成されます。新しい接続が多数ある場合は、この変数を増やしてパフォーマンスを向上させることができます。 通常、これは顕著なパフォーマンスの向上を提供しませんスレッドの実装が適切な場合。ただし、サーバーが1秒あたり数百の接続を検出する場合は、通常、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より大きくする必要があります」)は、サーバーよりも多くのスレッドをキャッシュに保持する必要があると述べているため、賢明ではないようですever使用。 MySQLは、とにかくそれほど多くのスレッドをキャッシュに入れません-それは先制的にスレッドをキャッシュに入れません-それをそこに入れるだけですafterクライアントはスレッドを作成して切断します。 Xクライアントが同時に接続することがない場合、キャッシュにXスレッドはありません。

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

参照 この答え Michaelによる:

Thread_cache_sizeをmax_connectionsより大きい値に設定することは、非常に役に立たないアドバイスのように思われます...キャッシュはmax_connectionsより大きくできない可能性があり、そのサイズに近いキャッシュであっても、スレッドに大量のチャーンがある場合にのみ意味があります...これは、正常に動作するアプリケーションでは当てはまりません。

https://dba.stackexchange.com/a/28701

11