次の仕様の専用DBサーバーがあります。」
現在ハイパースレッディングを行っているため、24の論理コアがあります。現在、2k〜4kトランザクション/秒で実行されています。
私は以下を設定しました:
innodb_thread_concurrency = 48
innodb_read_io_threads = 24
innodb_write_io_threads = 24
これは厳密にOLTPロード(70%読み取り)です。クエリは比較的高速です(ミリ秒)。クエリキャッシュはオンですが、あまり使用されていません。一時ディスクテーブルは頻繁に作成されません。InnoDBバッファプールデータセット全体をカバーする48GBに設定されます(60 GBデータ+インデックス)。
どのようにCPUスレッドをより適切に調整し、MySQLがこれらのスレッドを使用するか?誰かがinnodb_thread_concurrency
でベンチマークを行ったかどうかをお知らせください。
私はどんな提案もいただければ幸いです。
[〜#〜]更新[〜#〜]
innodb_thread_concurrency = 48
から次のように更新した後:
innodb_thread_concurrency = 0
ピーク時(4〜5kトランザクション/秒)の運用システムで動作を確認するには、次のようにします。
innodb_thread_concurrency
をゼロ以外の値に設定すると、CPUが過剰にならないようにCPUが抑制されます。 innodb_thread_concurrency=48
に戻し、CPU使用率を減らしました。
これらの結果についてのご意見をいただければ幸いです。
デフォルトでは、 innodb_thread_concurrency は0です。これが実際に最適な設定です。それは無限の並行性を意味します。これにより、InnoDBストレージエンジンは 同時実行チケットの最適な数 を決定して起動およびアドレス指定できます。これをゼロ以外の値に設定すると、実際にはInnoDBが抑制されるか、適切に設定されていない場合はOSが抑制される可能性があります。
私はDBA StackExchangeで この設定 について多くの投稿を書いています。
May 26, 2011
: シングルスレッドデータベースとマルチスレッドデータベースのパフォーマンスについてAug 16, 2011
: クエリキャッシュが無効になっていると、MySQLスレッドが「アイテムの解放」ステータスを表示することが多いのはなぜですか?Sep 12, 2011
: MySQLで複数のコアを使用することは可能ですか?Sep 20, 2011
: マルチコアとMySQLパフォーマンスApr 26, 2012
: CPUパフォーマンスはデータベースサーバーに関連していますか?Aug 03, 2012
: solrインデックス作成のためのmysql innodbテーブルでの挿入パフォーマンスが遅い追加ロック を引き起こす可能性があるクエリキャッシュをオフにしてください。