《Mysql實(shí)例MySQL 刪除大表的性能問題解決方案》要點(diǎn):
本文介紹了Mysql實(shí)例MySQL 刪除大表的性能問題解決方案,希望對您有用。如果有疑問,可以聯(lián)系我們。
微博上討論MySQL在刪除大表engine=innodb(30G+)時(shí),如何減少M(fèi)ySQL hang的時(shí)間,現(xiàn)做一下簡單總結(jié):
當(dāng)buffer_pool很大的時(shí)候(30G+),由于刪除表時(shí),會遍歷整個(gè)buffer pool來清理數(shù)據(jù),會導(dǎo)致MySQL hang住,解決的辦法是:
1、當(dāng)innodb_file_per_table=0的時(shí)候,以上不是問題,因?yàn)椴捎霉蚕肀砜臻g的時(shí)候,該表所占用的空間不會被刪除,buffer pool中的相關(guān)頁不會 被discard.
2、當(dāng)innodb_file_per_table=1的時(shí)候,并且當(dāng)buffer_pool比較大的時(shí)候,遍歷整個(gè)buffer pool 需要很多的時(shí)間(table_cache 會被鎖住,所有的DML操作被阻止).
認(rèn)識誤區(qū):
將innodb 表改為 myisam表,這個(gè)是沒有效果的,該操作會刪除舊表,建立新表,依然會遍歷整個(gè)buffer_pool.
解決思路:
1、采用腳本形式,批量刪除部分記錄
2、可以再slave上進(jìn)行操作,進(jìn)行主備切換(成本高)
3、Percona 5.1.58以上版本都支持innodb_lazy_drop_table(bug不少,慎用)
4、與buffer pool無關(guān),但是可以加快 刪除數(shù)據(jù)文件的速度,同樣能減少M(fèi)ySQL hang住的時(shí)間.即:對數(shù)據(jù)文件建立硬鏈接,(依賴原理:OS HARD LINK 當(dāng)多個(gè)文件名同時(shí)指向同一個(gè)INODE時(shí),這個(gè)INODE的引用數(shù)N>1, 刪除其中任何一個(gè)文件名只是刪除了一個(gè)指針而已,不會刪除數(shù)據(jù)文件.當(dāng)INODE的引用數(shù)N=1時(shí), 刪除文件需要去把這個(gè)文件相關(guān)的所有數(shù)據(jù)塊清除,所以會比較耗時(shí))
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4925.html