7

すべてのメンバーの行動 (他のメンバーのページへの訪問を含む) を記録するソーシャル ネットワーキング サイトを運営しています。これには、データベースへの多くの書き込みが含まれます。これらのアクションは MyISAM テーブルに保存され、何かが CPU に負担をかけ始めているため、CPU にこのストレスを引き起こしているのは MyISAM のテーブル ロックであると最初に考えました。

  • 読み取りと書き込みのみがあり、このテーブルへの更新はありません。このテーブルの読み取りと書き込みのバランスは約 50/50 だと思います。したがって、InnoDB の方が良い選択肢でしょうか?
  • テーブルを InnoDB に変更したいが、外部キー制約、トランザクション、またはフルテキスト インデックスを使用しない場合、何か心配する必要はありますか?
4

4 に答える 4

7

他のスレッド ( MyISAM と InnoDB ) で議論されているその使用の利点/欠点にもかかわらず、移行は重要なプロセスです。

検討

  • 可能であれば、データベースと対話するすべてのコンポーネントの機能をテストします - 異なるエンジンには異なるセマンティクスがあります
  • できるだけ多くのパフォーマンス テストを実行してください。改善されるものもあれば、さらに悪化するものもあります。よく知られている例は、大きなテーブルに対する SELECT COUNT(*) です。
  • すべてのコードがデッドロックを正常に処理することを確認する - トランザクションを明示的に使用しなくてもデッドロックを取得できます
  • 変換によって得られるスペース使用量を見積もります。これを非実稼働環境でテストしてください。

大規模なソフトウェア プラットフォームでは、変更が必要になることは間違いありません。これは問題ありませんが、(願わくば) 多くの自動テスト カバレッジがあることを考えると、変更は受け入れられるはずです。

PS: 「何かが CPU に負担をかけ始めている」場合は、a) 非実稼働環境で何を調べるか、b) 非実稼働環境でそれを減らすためにさまざまなオプションを試す必要があります。問題を完全に分析していないのに、やみくもにデータベース エンジンの変更などの主要な作業を開始するべきではありません。

すべてのパフォーマンス テストは、本番環境と同様のデータを使用し、本番グレードのハードウェアを使用して、非本番環境で実行する必要があります。そうしないと、結果を正しく解釈することが難しくなります。

于 2010-01-05T13:43:42.920 に答える
4

その他の潜在的な移行の問題に関して:

1) スペース - InnoDB テーブルは多くの場合、より多くのディスク スペースを必要としますが、InnoDB の新しいバージョンの Barracuda ファイル形式では、その差が縮小されています。これは、テーブルの最近のバックアップを変換してサイズを比較することで理解できます。データ長を比較するには、「show table status」を使用します。

2) 全文検索 - MyISAM のみ

3) GIS/空間データ型 - MyISAM のみ

パフォーマンスについては、他の回答と参照されている回答が示すように、ワークロードによって異なります。MyISAM は、完全なテーブル スキャンではるかに高速です。InnoDB は、高度な同時アクセスに対してはるかに高速になる傾向があります。ルックアップが主キーに基づいている場合、InnoDB もはるかに高速になります。

もう 1 つのパフォーマンスの問題は、テーブル レベルのロックのみを行うため、MyISAM が常に行数を保持できることです。そのため、非常に大きなテーブルの行数を頻繁に取得しようとする場合、InnoDB を使用すると非常に遅くなる可能性があります。これに対する回避策が必要な場合は、インターネットで検索してください。いくつか提案されているのを見てきました。

テーブルのサイズによっては、MySQL 構成ファイルも更新する必要がある場合があります。少なくとも、バイトを key_buffer から innodb_buffer_pool_size にシフトしたい場合があります。データベースを MyISAM 用に最適化したままにしておくと、公平な比較はできません。すべての innodb_* 構成プロパティを読んでください。

于 2010-01-29T17:59:38.983 に答える
0

私の経験から、MyISAM テーブルは、大きなテキストの検索で優れたパフォーマンスが必要なテキスト インデックス作成にのみ役立ちますが、Solr や ElasticSearch のような本格的な検索エンジンは必要ありません。

InnoDB に切り替えたいが、MyISAM テーブルでテキストのインデックス作成を続けたい場合は、これを参照することをお勧めします: http://blog.lavoie.sl/2013/05/converting-myisam-to-innodb- keep-fulltext.html

また: InnoDB は、Percona の innobackupex を使用したライブ アトミック バックアップをサポートしています。これは、実稼働サーバーを扱う場合に非常に役立ちます。

于 2013-09-02T01:25:02.867 に答える