web-dev-qa-db-ja.com

ハイパースレッディングとMySQL InnoDBスレッドの同時実行パフォーマンス

次の仕様の専用DBサーバーがあります。」

  • Ubuntu 12.04 LTSサーバー
  • Intel(R)Xeon(R)CPU X5670
    • @ 2.93 GHz
    • 12コア
  • MySQL 5.5.29
  • 64 GBのRAM
  • RAID10

現在ハイパースレッディングを行っているため、24の論理コアがあります。現在、2k〜4kトランザクション/秒で実行されています。

私は以下を設定しました:

  • innodb_thread_concurrency = 48
  • innodb_read_io_threads = 24
  • innodb_write_io_threads = 24

これは厳密にOLTPロード(70%読み取り)です。クエリは比較的高速です(ミリ秒)。クエリキャッシュはオンですが、あまり使用されていません。一時ディスクテーブルは頻繁に作成されません。InnoDBバッファプールデータセット全体をカバーする48GBに設定されます(60 GBデータ+インデックス)。

  • トランザクションの負荷は2倍になり、4k〜8kトランザクション/秒になります。現在のCPU負荷は約1000%なので、これがボトルネックになると予想しています。

どのようにCPUスレッドをより適切に調整し、MySQLがこれらのスレッドを使用するか?誰かがinnodb_thread_concurrencyでベンチマークを行ったかどうかをお知らせください。

私はどんな提案もいただければ幸いです。


[〜#〜]更新[〜#〜]

innodb_thread_concurrency = 48から次のように更新した後:

  • innodb_thread_concurrency = 0

ピーク時(4〜5kトランザクション/秒)の運用システムで動作を確認するには、次のようにします。

  • 負荷平均の増加
  • mysqldプロセスのCPU使用率が400%-1000%から400%-1400%になりました
  • 他の14-20 CPUが約70%-90%である間、約4-10 CPUはアイドルです
  • %waはCPUごとに0%-0.1%なので、ここではI/Oは問題になりません。 (Linuxトップ出力から)

innodb_thread_concurrencyをゼロ以外の値に設定すると、CPUが過剰にならないようにCPUが抑制されます。 innodb_thread_concurrency=48に戻し、CPU使用率を減らしました。

これらの結果についてのご意見をいただければ幸いです。

5
MYoussef

デフォルトでは、 innodb_thread_concurrency は0です。これが実際に最適な設定です。それは無限の並行性を意味します。これにより、InnoDBストレージエンジンは 同時実行チケットの最適な数 を決定して起動およびアドレス指定できます。これをゼロ以外の値に設定すると、実際にはInnoDBが抑制されるか、適切に設定されていない場合はOSが抑制される可能性があります。

私はDBA StackExchangeで この設定 について多くの投稿を書いています。

2
RolandoMySQLDBA

追加ロック を引き起こす可能性があるクエリキャッシュをオフにしてください。

0
Gea-Suan Lin