8

私のプロジェクトの1つはMySQLのMyISAMエンジンを使用していますが、あちこちでトランザクションサポートが必要なため、InnoDBに変更することを検討しています。

  • これを行う前に、何を確認または検討する必要がありますか?
  • エンジンを変更するだけでいいですか、それともデータを準備する必要がありますか?
4

6 に答える 6

8

はい、もちろんです。多くのことがあります。アプリケーションを非常に徹底的にテストする必要があります。

  • トランザクションはデッドロックする可能性があり、繰り返す必要があります。これは、(状況によっては)1行のみを挿入する自動コミットトランザクションの場合でも当てはまります。
  • ディスク使用量はほぼ確実に増加します
  • 書き込み中のI/O負荷はほぼ確実に増加します
  • InnoDBはクラスター化インデックスを使用するため、インデックス作成の動作が変更されます。これは、場合によっては有益な効果になる可能性があります。
  • バックアップ戦略が影響を受けます。これを慎重に検討してください。

大量のデータがある場合は時間がかかるため、移行プロセス自体は慎重に計画する必要があります(その間、データは読み取り専用になるか、完全に利用できなくなります。確認してください)。

于 2008-10-22T10:31:11.353 に答える
5

その他の注意事項:

テーブル/データベースを削除した後、またはレコードを削除した後、InnoDBはファイルシステムの空き領域を再割り当てしません。これは、「ダンプとインポート」またはinnodb_file_per_table=1my.cnfでの設定によって解決できます。

大きなInnoDBテーブルでのインデックスの追加/削除は、現在のテーブルをロックし、変更されたインデックスを使用して一時的なテーブルを作成し、データを行ごとに挿入するため、非常に面倒な場合があります。Innobaseのプラグインがありますが、 MySQL5.1でのみ機能します。

InnoDBはまた、はるかに多くinnodb_buffer_pool_sizeのメモリを消費します。サーバーのメモリが許す限り大きな変数を使用することをお勧めします(70〜80%が安全な方法です)。サーバーがUNIX/Linuxの場合は、sysctl変数vm.swappinessを0に減らし、innodb_flush_method=O_DIRECT二重バッファリングを回避するために使用することを検討してください。これらの値を切り替えるときにスワップを押すかどうかを常にテストします。Perconaブログでいつでも詳細を読むことができます。これはすばらしいことです。

また、バックアップの開始中にテーブルロックを使用して実行mysqlbackupしたり、テーブルロックを使用したりすることはできません。--single-transaction --skip-lock-tables

いずれにせよ、InnoDBは素晴らしいので、いくつかの落とし穴に落胆させないでください。

于 2008-10-23T08:28:30.743 に答える
3

テーブルを変更してエンジンを設定するだけで問題ありません。

  • 注意すべき大きな問題の 1 つは、MyISAM よりも InnoDB の方select count(*) from MyTableはるかに遅いことです。
  • auto_increment 値は、サーバーの再起動後にテーブル内の最大値 +1 にリセットされます。これは、いくつかの削除を含む乱雑なデータベースがある場合に、おかしな問題を引き起こす可能性があります。
  • 最適なサーバー設定は、主に MyISAM データベースとは異なります。
  • innodb ファイルのサイズがすべてのデータを保持するのに十分な大きさであることを確認してください。そうしないと、テーブルのエンジンを変更するときに、一定の再割り当てによって十字架につけられます。
于 2008-10-22T15:55:00.267 に答える
1

同時クエリを取得する方法としてInnoDBを使用する場合は、innodb_file_trx_commit=1パフォーマンスをある程度回復できるように設定する必要があります。OTOH、トランザクション対応になるようにアプリケーションを再コーディングしようとしている場合、この設定を決定することは、InnoDB設定に必要な一般的なパフォーマンスレビューの一部になります。

注意すべきもう1つの重要な点は、InnoDBがFullTextインデックスも、INSERTDELAYEDもサポートしていないことです。ただし、MyISAMは参照整合性をサポートしていません。:-)

ただし、トランザクション対応が必要なテーブルのみを移動できます。私はこれをしました。小さなテーブル(最大数千行)は、偶然にもオンザフライで変更されることがよくあります。

于 2008-10-28T05:53:23.933 に答える
0

パフォーマンス特性は異なる可能性があるため、負荷を監視する必要がある場合があります。

データは問題ありません。

于 2008-10-22T10:26:17.933 に答える