2012-01-26 64 views
2

如何優化mysql表以不使用鎖定?我可以將表格變更爲「關閉」始終鎖定狀態。優化mysql表以避免鎖定

情況:
我有使用15M記錄數據庫的應用程序。一個腳本每週執行一些任務(插入/更新/刪除)20個小時,以及將數據提供給前端(Web服務器)的應用程序服務器,這很好,我在這段時間看到的性能損失非常小。

問題:
每月一次我需要優化表,因爲記錄的數量龐大的在那裏它需要1-2個小時才能完成這個任務(從啓動mysql命令行或phpMyAdmin的,同樣的優化),並在該期間MySQL不會將資料提供給前端(我想這是有關鎖定爲優化表)

問:
那麼如何來最佳表以避免鎖定,因爲只有數據的讀取(沒有插入或更新),所以我想在優化時「解鎖」,在這種情況下不能造成任何損害?

+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使用在線DDL進行分區的InnoDB表的定期和 。由OPTIMIZE TABLE觸發並在ALTER TABLE ... FORCE的封面下執行的表重建爲 ,並且只鎖定該表一小段時間, 可減少併發DML操作的停機時間。

Optimize Tables Official Ref.
只是更好地準備自由空間是>比目前你的表所佔用的空間,因爲整個表副本可能發生的索引重建。