最近、MySQL サーバーが CPU を大量に使用しています (100% に達することが数回あり、しばらくその状態が続きます)。CPU 負荷がすべて 1 つの CPU の 1 つのコアに集中していることに気付きました。これをサーバーの 4 つすべてに分散させたいと考えています。
私は MySQL 設定を調整して、より多くの RAM とより少ない CPU を使用するようにしていますが、それでも時々 CPU 使用率が非常に高くなります。
このトピックに関するすべての内容は thread_concurrency に関するものであるようです (これは Solaris のみの設定であると読みました)。Linux では何ができるでしょうか?
ありがとう。
答え1
おっしゃる通り、thread_concurrency は Solaris 専用であり、MySQL 5.6 以降では非推奨です。MyISAM ではマルチコア/CPU は使用できないと思います。ハードウェアを最大限に活用するには、InnoDB を使用してください。
これ物事をよりよく理解するのに役立つかもしれません。
答え2
この変数の正しい値は、環境とワークロードによって異なります。アプリケーションに適した値を決定するには、さまざまな値を試す必要があります。推奨値は、CPU の数とディスクの数の 2 倍です。
この変数の範囲は 0 から 1000 です。MySQL 5.0.19 より前では、20 以上の値は無制限の同時実行として解釈されます。5.0.19 以降では、値を 0 に設定することでスレッド同時実行チェックを無効にすることができます。スレッド同時実行チェックを無効にすると、InnoDB は必要な数のスレッドを作成できるようになります。
http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_thread_concurrency
答え3
簡単に言えば、MySQL で実行される各クエリは、InnoDB エンジンのマルチコア数に関係なく、1 つの CPU コアのみを使用します。
MySQL 内のすべてのマルチコア最適化は、同時に実行され、CPU とデータに負荷がかかるさまざまなクエリがある場合に役立ちますが、完了するまでに数分または数時間かかる大きなクエリがある場合は、常に 1 つの CPU コアのみが使用されます。(このようなクエリを実行する必要がある場合は、CPU 速度が速く、コア数が少ないサーバーを購入する必要があります。)