6

この質問は、以前の質問の続きのようなものです: InnoDb は MyISAM よりも頻繁な同時更新と挿入に適しているというのは正しいですか?

しかし、今回は具体的な質問があります。
多くの同時更新 (挿入) がない場合、MyISAM は InnoDb よりも高速であることがわかっています。多くの同時更新があると、MyISAM テーブルがロックされ、他のすべてのクライアントが待機する必要があります。

1) しかし、いつ MyISAM から InnoDb に変更するのですか? 毎秒1更新?毎秒10回更新?毎秒100回の更新?
2) 具体的な例として、(異なるセッションから) 通常は 1 分あたり数回の更新がある私の Web サイトのテーブルの 1 つを InnoDb に変更した方がよいでしょうか?

4

2 に答える 2

3

あなたの質問は、あなたが言及した前の質問でほとんど答えられたと思います。

1) テーブルを作成するとき。InnoDB には、単なる行レベルのロックよりも多くの利点があります。複数の SQL クライアントが更新を行っている場合の速度の向上、データの損失/破損のリスクの軽減、参照整合性など... 1 秒あたりのトランザクション数 (TPS) が少ない場合、パフォーマンスの違いはわかりませんが、InnoDBより信頼性が高く、より適切にスケーリングされます。

2) TPS が 2 ~ 3 しかない場合、InnoDB と MyISAM の間に大きな違いは見られません。半古代のハードウェアでも。

参考までに、最新のディスク ドライブは、1 秒あたり少なくとも ~200 の更新トランザクションを処理できるはずです。

InnoDBMVCC、およびACIDを読むことをお勧めします。

于 2009-11-13T16:20:34.943 に答える
1

可能であれば、一度に 1 つのテーブルを変更しないでください。

サーバー全体を変更します。そうすれば、myisam ワークロードではなく、innodb のみのワークロードに合わせてサーバーを調整できます。この 2 つは相互に互換性がありません (メモリ バッファは特定のエンジンに割り当てられます。メモリを共有することはできません)。

16G の RAM があるとします。MyISAM テーブルがない場合、おそらく innodb バッファー プールに約 12G を使用する必要があります。

同様に、MyISAM テーブルしかない場合は、おそらく innodb を完全にオフにして、myisam キー キャッシュに半分弱 (たとえば 6G) を割り当てます。

myisam と innodb が混在するサーバーでは、メモリ チューニングをトレードオフする必要があります。

また、パフォーマンス テストは、テーブルを変更するたびに行うのではなく、1 回だけ行いたいと考えています。

「MyISAM が InnoDb よりも高速であることはわかっている」と言うのは、場合によっては大幅な単純化です。

サーバーに合わせて InnoDB を適切に調整し、適切なサーバー グレードのハードウェアを実行している場合、InnoDB はほとんどのクエリで MyISAM と競合できるはずです (完全なテーブル スキャンは除きますが、それらの多くは実行していません)。

つまり、データが「些細な冗談」サイズでない限りです。

innodb の挿入/更新がはるかに遅いことがわかった場合は、耐久性がはるかに優れていることに注意してください。MyISAM とほぼ同じ耐久性になるように調整すると、パフォーマンスが向上することが期待できます。

于 2009-11-13T16:29:38.547 に答える