MySQL 5.7のマニュアルで、スレッドキャッシュのサイズはthread_cache_size
システム変数。
デフォルト値は0(キャッシュなし)で、新しい接続ごとにスレッドがセットアップされ、接続が終了するとスレッドが破棄されます。
しかし、正確には「スレッド」とは何でしょうか。
接続スレッドは、関連付けられたクライアント接続が終了すると非アクティブになります。
繰り返しますが、私が読んでいる「スレッド」とは何なのか理解できません。
Threads_created
:接続を処理するために作成されたスレッドの数。
この場合、「スレッド」という言葉は何を指しますか?
Threads_cached
:スレッドキャッシュ内のスレッドの数。
このWordも「スレッド」です。
Threads_connected
:現在開いている接続の数。
スレッドとは何なのかわかりません。それは私が推測する接続ではありません...
しかし、それは何ですか?多分それは私の言語での翻訳の問題だけかもしれませんが、私は「スレッド」とは何かを理解することを決心することができません
私はあなたが「スレッド」という言葉に言及するすべての場合において、たとえば Wikipediaの記事 でよく説明されている意味で、単に計算スレッドを意味すると信じています。
キャッシュを残して0接続から開始すると、新しい接続ごとに、その接続専用に新しい処理スレッドが作成されます。スレッドは、この特定の接続されたクライアントに対してすべてのSQL処理とネットワーク通信を実行します。各スレッドはオペレーティングシステムによって独立してスケジュールされるため、複数のプロセッサコアが使用可能な場合は、同時に実行されているように見えます(実際には、複数のプロセッサコアが使用可能な場合はそうなります)。
スレッドの作成にはある程度の待ち時間があるため、事前にスレッドのプールを作成しておくと便利な場合があります。各スレッドは引き続き接続に排他的に割り当てられますが、接続が閉じられると、スレッドは破棄されず、プールに戻されて別の着信接続を待機します。
MySQLスレッド管理の詳細な説明は この本 にあります。
* nixでは、MySQLスレッドは比較的重い「プロセス」です。 「プロセス」はtop
またはps
で確認できます。
Windowsの場合、thread_cache_size = 0
で問題ありません。これは、スレッド化の方法が異なるためです。
* nixでは、thread_cache_size
は控えめな数値、たとえば20にする必要があります。これは、開いたままにしておく未使用のプロセスの最大数です。アクティビティのバーストがあり、実行中の30スレッド(Threads_connected
)で一時的にピークに達し、その後7が切断したとします。 23は接続されたままで、7つの「プロセス」のキャッシュはまだ終了していません(Threads_cached
)。別の18の切断を考えてみましょう。 5つまで実行され、20(キャッシュサイズ)が予約されています。
「thread_pool」は何か違うものです。さらに、OracleとMariaDBはここで異なるものを実装しました。
Threads_cached/connected/created/running
のSTATUS
値は、VARIABLE
thread_cache_size
がチューニングを必要とするかどうかのピークを示します。
Threads_created/Uptime
は、キャッシュが小さすぎるために新しいプロセスが作成される速度です。これを3秒未満に保つことをお勧めします。