テーブルロックの問題を防ぐために、すべてのデータを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=FIXED
72、73ページでの使用を推奨しています。これにより、すべてのVARCHARフィールドが内部的にCHARに変換されます。MyISAMテーブルは大きくなりますが、それに対して実行されたSELECTははるかに高速になります。私はこれを個人的に証明することができます。私はかつて1.9GBのテーブルを持っていました。でフォーマットを変更しましたALTER TABLE tblname ROW_FORMAT=FIXED
。テーブルは最終的に3.7GBになりました。それに対するSELECTの速度は、他のものを改善または変更することなく、20〜25%速くなりました。
これに関する唯一の問題は、アプリケーションに個別の読み取りスレーブを認識させることです。
エピローグ
各ストレージエンジンのその他の利点については、DBA StackExchangeを確認してください。