2017-09-23 6 views
1

私は自分のMySQL DBから(Amazon移行サービスを使用して)RDS MariaDBに移行した何百もの大きなテーブルを持っています。すべてのストレージエンジンはMyISAMからInnoDBに移行しました。これはパフォーマンスに致命的な影響を与えます。要するに、デフォルトのストレージエンジンをMyISAMに変更してから、すべてのテーブルを再移行したいと考えています。私は、これをどのように行うかについての他のアイデア(移行ツールで何らかの設定を使用するなど)を公開しています。私は本当にそれらを変更するためのスクリプトを作成する必要はありません、これは私がデータをインポートするたびにこれを行う必要があるためです。デフォルトのストレージエンジンを変更するAmazon RDS MariaDB

ParameterGroup default_storage_engineを変更しようとしましたが、実行中のインスタンスのParameterGroupに入ると、デフォルトのストレージエンジンが読み取り専用として表示されます。 AWS Console Screenshot

私は新しいパラメルグループを作成しようとしましたが、同じことが起こります。値は「変更可能:偽」と表示されます。

ご迷惑をおかけして申し訳ございません。私は他の回答を見回しましたが、my.cnfの変更はRDSに関連しているとは思いません。そうなら、私に知らせてください。

答えて

2

明らかにRDSでは、このパラメータを変更できません。

一度のMyISAM、1にあなたのテーブルのそれぞれを変更することができます。

ALTER TABLE MyTable ENGINE=MyISAM; 

あなたは変更する必要があなたのテーブルのリストを取得することができます将来のテーブルの場合

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='InnoDB'; 

を、デフォルトのエンジンに依存しないでください。 CREATE TABLEステートメントで明示的に指定されたエンジンを使用してテーブルを作成します。

ただし、MyISAMはMySQLによって段階的に廃止されています。並行書き込み、行レベルのロック、トランザクション、またはアトミックな変更はサポートしていません。 InnoDBは無視できるほど少数の場合を除き、MyISAMテーブルに、性能に優れていることが何度も示されています:

  • SELECT COUNT(*) FROM MyTable;は、MyISAMテーブルは各テーブルに組み込まれたこのSTATを保持しているため。これは、InnoDBやMVCCアーキテクチャの大きな弱点であることは間違いありません。
  • テーブルスキャン。しかし、とにかくテーブルスキャンを行うべきではありません。インデックスルックアップを実行する必要があります。 InnoDBに対する最適化されたクエリは、一般にMyISAMに対するテーブルスキャンよりもパフォーマンスが優れています。

私はあなたのクエリの最適化を把握し、InnoDBを利用することをお勧めします。

+2

MyISAMはまた、RDSスナップショットバックアップとポイントインタイムリカバリの根底にあるメカニズムと基本的に互換性がないように見えるので、RDSドキュメントには強く推奨されません。これらは、InnoDBの能力に少なくとも部分的に基づいているようですディスクスナップショットによって作成されたバックアップからリストアされた後、MySQLが最初に起動したときのクラッシュ状の状態から復旧します。これはMyISAMテーブルではうまく処理されません。 (事例の観察によれば、RDSの特定時点およびスナップショット修復は起動時にクラッシュリカバリを実行するように見えます)。 –

0

突然InnoDBに切り替えるときの一般的なパフォーマンスの問題は、「トランザクション」と関係します。

おそらく、すべてのクエリがautocommit = ONのために独自のトランザクションになったとします。 (悪い方の問題につながること、それOFFをオンにしないでください。)あなたが取引を理解する必要があり、少なくとも十分な

BEGIN; 
multiple statements, usually more than one, but not a huge number 
COMMIT; 

のようなブロックで一緒に文を組み合わせるために、この(多くの場合)の束を取り戻します失われたパフォーマンス。

さらに詳しい説明はhereです。

関連する問題