InnoDBに移行する必要がある、または移行できるテーブルと、MyISAMのままにする必要があるテーブルはどれですか。


10

タイトルどおり:InnoDBに移行するテーブルの候補のクイックリストはありますか?そしてMyISAMのままにしておくべきもの。

いくつかの追加情報

  • サイトの読み取り負荷はかなり重いですが、タグなどを含めて、1時間あたり約10ノードが挿入されます。
  • CCK(の形式の正規化された大量のテーブルcontent_field%)を多用しています。
  • また、すべてのブロックとページにビューを使用しています。しかし、それらの多くはカスタムモジュールでの置換の候補です(データベースクエリとそれらのクエリの重さを減らすため)。
  • ユーザーはすべて匿名です。いくつかのログインした編集者とウェブマスターを除いて。

インターネット全体がこの質問に実際に答える方法がわからないのは陽気です。どのDrupalテーブルがほとんどの書き込みを受け取り、ロックされますか。
JMベッカー

回答:


8

テーブルロックの問題を防ぐために、すべてのデータをInnoDBに変換する必要があります。ただし、次の点を考慮してください。

フルテキストインデックス

現在、MyISAMのみがFULLTEXTインデックスをサポートしています。InnoDBのFULLTEXTインデックス作成は現在MySQL 5.6で機能していますが、本番環境では使用できません。FULLTEXTインデックスを持つDrupalテーブルがある場合、現時点ではそれらをInnoDBに変換できません。

フルテキストインデックス作成時の更新

MySQL 5.6がGAになりました(本番用には使用できません)。InnoDBでFULLTEXTインデックスを試してください。

FULLTEXTインデックスを持つテーブルを見つけるには、次のクエリを実行します。

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

行が返されない場合は、すべてのInnoDBテーブルを心ゆくまで変換してください。mysqlのみを使用してすべてのMyISAMテーブルをInnoDBに変換する方法についての以前の投稿を書きました

MySQLレプリケーション

読み取りが多い環境の場合、次の操作を行うと、MyISAMで読み取りが速くなります。

  • マスター/スレーブレプリケーションのセットアップ
  • マスターの下に1つ以上の読み取りスレーブを作成する
  • --skip-innodbすべてのスレーブに/etc/my.cnfを追加します(データをスレーブにロードするときにテーブルをMyISAMに変換します)
  • 次のコマンドで、すべてのスレーブのすべてのMyISAMテーブルの行形式をFIXEDに変更します。 ALTER TABLE tblname ROW_FORMAT=FIXED;
  • 私はDBA StackExchangeでこれに何かを投稿しました
  • MySQLデータベースの設計とチューニングの本は、ROW_FORMAT=FIXED72、73ページでの使用を推奨しています。これにより、すべてのVARCHARフィールドが内部的にCHARに変換されます。MyISAMテーブルは大きくなりますが、それに対して実行されたSELECTははるかに高速になります。私はこれを個人的に証明することができます。私はかつて1.9GBのテーブルを持っていました。でフォーマットを変更しましたALTER TABLE tblname ROW_FORMAT=FIXED。テーブルは最終的に3.7GBになりました。それに対するSELECTの速度は、他のものを改善または変更することなく、20〜25%速くなりました。

これに関する唯一の問題は、アプリケーションに個別の読み取りスレーブを認識させることです。

エピローグ

各ストレージエンジンのその他の利点については、DBA StackExchangeを確認してください。


4

あなたのウェブサイトは読み取りが多いので、すべてのテーブルをInnoDBに変換します。その後、InnoDBバッファープールとクエリキャッシュのサイズを適切に設定することで、読み取りパフォーマンスを最適化できます。このようにして、Drupalホスティングインフラストラクチャの専用データベースサーバーで1秒あたり数千のクエリを達成しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.