マルチコアとMySQLパフォーマンス


38

RAMの重要性は確立された事実ですが、MySQLによるCPUの使用に関しては、コアとマルチスレッドの重要性に関する資料はほとんどありません。MySQLを4コア対6コア対8コアなどで実行することの違いについて話しています。

ストレージエンジンによってCPUの使用方法は異なりますか?



その関連性はありますが、マルチコアCPUに対するさまざまなストレージエンジンの動作に対処しません。
リックジェームズ

1
確かに。これが「重複として近い」投票がない理由です...
gbn

これは素晴らしいコミュニティです。私はまだこのサイトの使い方を学んでいます。
リックジェームズ

こんにちはバディここを見て:mysql-cluster-blog.comあなたは、少なくとも何かを見つける

回答:


30

MySQLに関しては、2つの基本的なカテゴリに分類されることを除いて、ストレージエンジン間の比較はありません。

  • トランザクション(ACID準拠
  • 非トランザクション

MySQLは複数のストレージエンジンの使用を特徴としています

リストされているストレージエンジンに関しては、ACID準拠のエンジンはInnoDBとNDBのみです。なぜこれが重要なのですか?2つの理由:

  • 他のストレージエンジンは、基本的なディスクI / O、CPU使用率、および全体的なスループット以外のコアが存在するため、単に恩恵を受けません。
  • ストレージエンジンに関係なく基本的に14の内部操作を指示する各非トランザクションストレージエンジンのコードは、複数のコアのアクセスを活用するように設計されていません。

MySQL 5.5のInnoDB、InnoDBプラグイン)、およびPercona ServerのXtraDBには、複数のコアにアクセスするために設定できるオプションがあります(Percona Serverはこれまでよりも長く行っています)。実際、Perconaは、MySQLソースコードの新しいGAリリースごとに、特にInnoDBのパフォーマンス強化のために約30,000行のコードを挿入します。(MySQL 5.1.38以降)マルチコア操作のためにInnoDB内で実行するために、Oracleが独自のシンクタンクから独自の拡張機能を組み込んだことは確かです。

行/ページのロックと連動してデータに対してMVCCを実行する必要があるため、トランザクションパフォーマンスを計測、測定、および構成できるようになりました。

複数のコアの使用について学んだことが1つあるとすれば、InnoDBをすぐに使用するだけでなく、InnoDBを効果的に調整する必要があるということです

更新2011-09-20 08:03 EDT

すべてのコアから恩恵を受けるInnoDBに関しては、物事を永続的に保つ必要があります。コアは、データベースサーバーの他の問題(OS、ディスク、メモリ、アプリケーション、監視など)にも対応する必要があります。予算が控えめな人のために、多くの場合、データベースサーバーがNFS、Muninからの監視、JBoss、PHPのアプリサポートを提供する傾向があります。MySQL、より具体的にはInnoDBでより多くのコアを使用する場合は、データベースサーバーをMySQL専用にし、OS /ディスク/メモリはMySQLのみに対応する必要があります。このような観点から、InnoDBは疑いなくより多くのコアに関与します。

InnoDB Pluginについては、MySQLでより良いInnoDBを使用するための初期のイニシアチブを示すために言及されました(ええ、Oracle。申し訳ありませんが、まだ舌を出していない)。より多くのコアアクティビティを呼び出す新しい変数がMySQL 5.1.38から明らかになりました。

たとえば、innodb_read_io_threadsおよびinnodb_write_io_threads(両方ともMySQL 5.1.38以降)は、指定された数のスレッドを読み取りおよび書き込みに割り当てます。デフォルトは4で、最大は(4から64)が異なっている64デフォルトおよび最大の設定であることを示している、あなたがそれを設定するようInnoDBがマルチスレッドと集中的なコアの通りです

InnoDBでより多くのコアにアクセスするためのMySQLコミュニティのニーズへの対応は、Perconaが主導しました。その結果、MySQLはそれに追従し始めました。Oracle(yuck)がより多くのコアアクティビティに必要な改善を行ったことを認めなければなりません。


上記で提案したように調整されたMySQL 5.5でのInnoDBは、すべてのコアから利益を得ることができますか?{InnoDBプラグインについて少し混乱している}
リックジェームズ

@Rick -また、私の答えにあなたのコメントを取り上げた
RolandoMySQLDBA

ここではまったく異なる話のようで、MyISAMはマルチコアを利用することに関しては面白く見えますが、反対側はdba.stackexchange.com/questions/5974/best-of-myisam-and-innodbにあります利点。だから、どちらに行くかを決めるのはネクタイのようです。
リックジェームズ

2
それはすべて、MyISAMまたはInnoDBを使用する目的に依存します。どのくらい、どれだけキャッシュしますか?データ取得のために、MySQLまたは他のキャッシュメカニズム(ニスやmemcachedなど)に依存していますか?ハードウェアはInnoDB用に適切にスケールアップされていますか?SQLの98%はSELECTですか?テーブルは高速読み取りに最適な形式ですか?事前にこれらの質問に答えることで、ストレージエンジンの選択、適切な構成、ハードウェアの選択、さらには高可用性、DBトポロジ、読み取り/書き込み分割などのより深い情報に到達することができます。
RolandoMySQLDBA

9

コアを使用したストレージエンジンの話は、初心者にとって誤解を招く可能性があります。プログラムが十分にマルチスレッド化されている場合、オペレーティングシステムは可能な限り多くのコアにわたってプログラムをスケジュールします。

CPUスケーリングを制限する特定の問題は、内部ロックコード(mutexes)に競合があり、スレッドが同時に実行されるのをブロックする場合です。すべてのストレージエンジンにはミューテックスが必要になりますが、MyISAMには確かにいくつかのホットエンジンがあります。

ミューテックスの競合を1秒間無視して、メインの質問に戻ります。多くのコアを持つことはどれほど重要ですか?-

ユーザーが直面するリクエストに応えるワークロード用のコアがたくさんあるのが好きです。多数あると、クエリ時間のばらつきを減らすことができます。これは、スーパーマーケットに12の通路が開いているのに対して、ちょうど2つ並んでいるようなものだと考えてください。

更新:垂直スケーラビリティ(マルチコア)が重要である理由に関するブログ記事を書きました。


5
部屋の象に言及するための+1:ミューテックスの競合
14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.