2012-01-26 11 views
2

ロックを使用しないようにmysqlテーブルを最適化するにはどうすればよいですか?常にロックを解除するようにテーブルを変更できますか?ロックを避けるためにmysqlテーブルを最適化する

状況:
15Mレコードのデータベースを使用するアプリがあります。 1週間のスクリプトが20時間、何らかのタスク(挿入/更新/削除)を実行し、フロントエンド(Webサーバー)にデータを送信するアプリケーションサーバーで、それは問題ありません。

問題:月に1回、テーブルを最適化する必要があります。膨大な数のレコードがあるため、このタスクを完了するまでに1〜2時間かかります(mysqlコマンドラインまたはphpMyAdminからの最適化を開始します)。期間のMySQLは、フロントエンドにデータを提供していない(私はそれが最適化のためのテーブルをロックする程度であると仮定)

質問:
だけそう(データのない挿入または更新を読んでいないがあるので、ロックを避けるためにテーブルをoptmizeする方法)ので、私は最適化しながら、このケースでは何のダメージを与えることができないロックを解除すると思いますか?

+0

それはInnodb/MySAMテーブルですか?大きな影響を与えるでしょう – Madhu

答えて

0

テーブルエンジンがInnoDBで、MySQLバージョンが> 5.6.17の場合、ロックは発生しません。実際にはロックされますが、非常に短期間です。

Mysql 5.6.17より前のOPTIMIZE TABLEでは、オンラインDDLは使用されません。 したがって、OPTIMIZE TABLEが実行されている間に並行DML(INSERT、UPDATE、DELETE)は許可されません。 は効率的に作成されません。

MySQL 5.6.17以降、OPTIMIZE TABLEは、パーティション化されたInnoDBテーブル のオンラインDDLを使用します。 OPTIMIZE TABLEによってトリガーされ、ALTER TABLE ... FORCEによって表の下で実行された表の再構築では、 が実行され、短時間の間だけ表がロックされます。 これにより、同時DML操作の停止時間が短縮されます。

Optimize Tables Official Ref.
ただ、より良いインデックスの再構築のためにテーブル全体のコピーが発生する可能性があるため、現在ご使用の表が占めるスペースよりも>ある空きスペースを用意。

関連する問題