MySQL 刪除大表的效能問題解決方案

來源:互聯網
上載者:User

微博上討論MySQL在刪除大表engine=innodb(30G+)時,如何減少MySQL hang的時間,現做一下簡單總結:

當buffer_pool很大的時候(30G+),由於刪除表時,會遍曆整個buffer pool來清理資料,會導致MySQL hang住,解決的辦法是:
1、當innodb_file_per_table=0的時候,以上不是問題,因為採用共用資料表空間的時候,該表所佔用的空間不會被刪除,buffer pool中的相關頁不會 被discard。
2、當innodb_file_per_table=1的時候,並且當buffer_pool比較大的時候,遍曆整個buffer pool 需要很多的時間(table_cache 會被鎖住,所有的DML操作被阻止)。

認識誤區
將innodb 表改為 myisam表,這個是沒有效果的,該操作會刪除舊錶,建立新表,依然會遍曆整個buffer_pool。

解決思路
1、採用指令碼形式,大量刪除部分記錄
2、可以再slave上進行操作,進行主備切換(成本高)
3、Percona 5.1.58以上版本都支援innodb_lazy_drop_table(bug不少,慎用)
4、與buffer pool無關,但是可以加快 刪除資料檔案的速度,同樣能減少MySQL hang住的時間。即:對資料檔案建立永久連結,(依賴原理:OS HARD LINK 當多個檔案名稱同時指向同一個INODE時,這個INODE的引用數N>1, 刪除其中任何一個檔案名稱只是刪除了一個指標而已,不會刪除資料檔案。當INODE的引用數N=1時, 刪除檔案需要去把這個檔案相關的所有資料區塊清除,所以會比較耗時)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.