RAMの重要性は確立された事実ですが、MySQLによるCPUの使用に関するコアとマルチスレッドの重要性について利用できる資料ははるかに少ないです。MySQLを4コアvs 6コアvs 8コアなど。
ストレージエンジンによってCPUの使用方法は異なりますか?
MySQLに関しては、2つの基本的なカテゴリに分類されることを除いて、ストレージエンジン間の比較はありません。
MySQLはいくつかのストレージエンジンの使用を特徴としています
リストされているストレージエンジンについては、ACIDに準拠しているのはInnoDBとNDBだけです。なぜこれが重要なのですか? 2つの理由:
MySQL 5.5のInnoDB、InnoDBプラグイン)、およびPercona ServerのXtraDBには、複数のコアにアクセスするために設定できるオプションがあります(Percona Serverはこれまでよりも長く実行されています)。実際、Perconaは、MySQLソースコードの新しいGAリリースのたびにInnoDBのパフォーマンスを向上させるために、約30,000行のコードを注入しています。Oracleが独自のシンクタンクから独自の機能強化を組み込んでいることは確かです。マルチコア操作のためにInnoDB内で実行する(MySQL 5.1.38以降)。
行/ページのロックと組み合わせてデータに対して [〜#〜] mvcc [〜#〜] を実行する必要があるため、トランザクションのパフォーマンスを計測、測定、および構成できるようになりました。
複数のコアの使用について私が学んだことが1つある場合、それは そのままの状態でInnoDBに依存するのではなく、InnoDBを効果的に調整する必要がある です。
UPDATE 2011-09-20 08:03 EDT
すべてのコアから恩恵を受けるInnoDBに関して、私たちは物事を見通しのよい状態に保つ必要があります。コアは、データベースサーバーの他の問題(OS、ディスク、メモリ、アプリケーション、監視など)にも対応する必要があります。予算が控えめな人にとっては、多くの場合、データベースサーバーにもNFSを提供し、Muninからの監視、JBoss、PHPのアプリサポートなどのリストが続きます。 MySQL、より具体的にはInnoDBでより多くのコアを使用する場合は、データベースサーバーをMySQL専用にして、OS /ディスク/メモリをMySQL専用にする必要があります。この観点から、InnoDBは疑いなくより多くのコアを使用します。
InnoDBプラグインに関しては、MySQLの部分でより優れたInnoDBを使用するための初期の取り組みを示すために単に言及されました(ええと、Oracle。申し訳ありませんが、まだ舌を出してはいません)。より多くのコアアクティビティを呼び出すための新しい変数がMySQL 5.1.38から明らかになりました。
たとえば、 innodb_read_io_threads および innodb_write_io_threads (両方ともMySQL 5.1.38以降)は、指定された数のスレッドを読み取りと書き込みに割り当てます。デフォルトは4で、最大は64です。デフォルト設定と最大設定が大きく異なる(4〜64)と、InnoDBは構成した場合と同じようにマルチスレッド化され、コアに負荷がかかります!!!
InnoDBでより多くのコアにアクセスするためのMySQLコミュニティのニーズへの対応は、Perconaによって主導されました。その結果、MySQLはそれに倣い始めました。 Oracle(yuck)がより多くの中核的な活動に必要な改善を加えたことを認めなければなりません。
コアを使用するストレージエンジンについてコアの話は、初心者には誤解を招く可能性があります。プログラムが十分にマルチスレッド化されている場合、オペレーティングシステムは、できるだけ多くのコアにわたってプログラムをスケジュールします。
CPUスケーリングを制限する特定の問題は、内部ロックコード( ミューテックス )に競合があり、スレッドが同時に実行されないようにする場合です。すべてのストレージエンジンはミューテックスを必要としますが、MyISAMには確かにいくつかのホットエンジンがあります。
ミューテックスの競合を1秒間無視して、主な質問に戻ります:多くのコアを持つことはどのくらい重要ですか?-
ユーザー向けのリクエストに対応するワークロード用のコアをたくさん持つのが好きです。数が多いと、クエリ時間の差異を減らすことができます。これは、スーパーマーケットで12通路が開いているのに対して、2通路しているようなものだと考えてください。
更新:垂直方向のスケーラビリティ(マルチコア)が重要である理由について ブログ投稿 を書きました。