1

「テーブルが壊れているとマークされているため、修復する必要があります」などのエラーが表示されることがあります。その DB (テーブル) は MyISAM を使用しています。最近、それが続いています。原因は何ですか?最近、私はバッチ挿入を実行しています

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

そしてハングしただけです。または完了するのに非常に時間がかかりました。翌日、テーブルを確認すると、再び破損しているとマークされていました。mysqlcheck -r を使用しようとすると、その「破損した」テーブルに到達すると、すべてのテーブルが正常であると表示され、再びハングしました...

だから、これを防ぐために私は何ができるでしょうか。そして、何が原因である可能性があります。DB はサードパーティでホストされています。これをデバッグするにはどうすればよいですか?

InnoDB は、使用するより信頼性の高いエンジンですか? MyISAM の方が速いと聞きましたが、InnoDB も高速であると言う人もいますが、最適化にはもう少し時間がかかります。InnoDB の方が信頼性は高いが、最適化を行っても全体的に少し遅いと結論付けることができますか?

4

3 に答える 3

3

テーブルが破損した場合は、repair table コマンドを使用して修正できます。

 REPAIR TABLE table;

サーバーがまだ稼働しているときに (そして挿入/選択がテーブルにヒットしているときに) myisamchk を実行すると、テーブルが破損している可能性があります。私が遭遇する破損の問題のほとんどは、サーバーがまだ実行されている間にサーバーの外部で何かをしようとしたとき (ファイルのコピーなど) にあります。

InnoDB は、MyISAM が除外している機能 (ACID 準拠、行レベルのロック) を備えているため、読み取り専用データベースの場合は遅くなります。ただし、読み取りと書き込みの混合を行っている場合は、混合に応じて、InnoDB は書き込みを行うためにテーブル全体をロックする必要がないため、パフォーマンスを大幅に向上させることができます。また、破損の問題にも遭遇しません。

于 2009-06-13T15:05:50.440 に答える
1

InnoDB を使用します。

于 2009-06-13T20:16:06.527 に答える
0

問題は、会社のデータベースがホスティング会社によって許可されているストレージ容量を超えていたことです。どうやら、誰も会社に使用量を超えたとは言いませんでした...お粗末なホストだと思います。

ところで、mysqlがこれを知る方法はありませんか?

于 2009-09-05T03:44:19.143 に答える