web-dev-qa-db-ja.com

MyISAMからInnoDBにいつ切り替えるのですか?

すべてのテーブルをMyISAMとして実行しているMySQL 5.0サーバーがあります。先月、MySQL 5.5にアップグレードした2つのスレーブがあります。彼らのテーブルもMyISAMのままです。

私の最初の計画は、5.0マスターを5.5にアップグレードしてから、InnoDBに変換することでした。今、私は疑問に思っています、アップグレードの前に開始する方が理にかなっていますか? 5.5でのInnoDBは5.0でのInnoDBよりもはるかに高速であると聞いたので、私は警戒してきました。これは根拠がないのですか、今すぐ始めますか?

7
Andrew

重いUPDATEとINSERTの同時実行性が必要な場合は、InnoDBが必要です。

デッドロックの解決が必要な場合は、InnoDBが必要です。

データとインデックスの両方をキャッシュするストレージエンジンが必要な場合は、InnoDBが必要です。

複数のCPUに効率的にアクセスしたい場合は、InnoDBが必要です( そしてそれを調整する )。

InnoDBに関する過去の記事を参照してください。

あなたは、MySQL 5.5がMySQL 5.0より速いと聞いたそうです。箱から出して、それは本当ではありません。 優れたパフォーマンスを発揮させるには、MySQL 5.5をチューニングする必要があります!!!以下は、この件に関する過去の記事です。

MyISAMはInnoDBよりも高速だとおっしゃっていましたね。 MyISAMにデフォルトのROW_FORMAT = Dynamic(デフォルト)のワイドVARCHAR列が多数ある場合、MyISAMのパフォーマンスが低下する可能性があります。 1つのストレージエンジンが他のストレージエンジンよりも高速であると言うのは、アプリケーション、読み取り/書き込みI/O比、ストレージエンジンのチューニングによって異なります。

この主題に関する私の投稿を参照してください

今すぐ変換するか後でInnoDBに変換するかという問題に対処します。

私が提供した5番目のリンク( 最初に:mysqlバージョンをアップグレードするか、ストレージエンジンを変換するか? )では、最初に変換することをお勧めします。ただし、特定のケースでは、後で変換することをお勧めします。理由は簡単です。データを別のサーバーに移動しています。 MyISAMテーブルは移植が非常に簡単です。/var/lib/mysqlのrsyncまたはscpを実行することは、InnoDBとして存在する場合にデータがわずかに(場合によっては大幅に)大きくなるため、InnoDBへの変換よりも便利(高速)です。

次の2つのことを行う必要があります。

必要#1

Rysnc/scp /var/lib/mysql/var/lib/mysql/mysqlを上書きします。したがって、次のようにデータを移動することをお勧めします。

必要#2

MyISAMをInnoDBに変換する簡単なスクリプトが必要です。 MySQL 5.5 DBサーバーで以下を実行してください:

echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
MYSQL_CONN="-u... -p..."
mysql ${MYSQL_CONN} -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql
less /root/ConvertMyISAMToInnoDB.sql

変換スクリプトに満足したら、MySQL 5.5のmysqlにログインして実行します。

mysql> source /root/ConvertMyISAMToInnoDB.sql

試してみる !!!

9
RolandoMySQLDBA