免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實戰(zhàn)洞察。

MySQL海量數(shù)據(jù)批量刪除:5種方案與實戰(zhàn)踩坑指南

MySQL海量數(shù)據(jù)批量刪除:5種方案與實戰(zhàn)踩坑指南 咱們搞MySQL的十有八九都撞上過這么個需求線上有個幾千萬行的大表要刪掉其中大部分?jǐn)?shù)據(jù)。可能是一批歷史日志、一批過期訂單或者按某個業(yè)務(wù)維度清理無效數(shù)據(jù)。我見過太多新手上來就是一條DELETE FROM big_table WHERE create_time 2023-01-01然后執(zhí)行進(jìn)去數(shù)據(jù)庫瞬間卡死主庫連接打滿從庫延遲一路飆升最后鬧到要重啟實例。這篇文章就專門聊這個——MySQL里批量刪除海量數(shù)據(jù)到底有哪些靠譜路子各種方案適合什么場景實際操作中又會踩到什么坑。先說清楚一個核心認(rèn)知刪除海量數(shù)據(jù)的難點(diǎn)從來不在“刪除”本身而在刪除動作引發(fā)的一連串連鎖反應(yīng)。你要刪1000萬行MySQL要逐行標(biāo)記刪除、記錄binlog、維護(hù)二級索引、寫入undo log供事務(wù)回滾和MVCC使用。這些操作都會落在磁盤和內(nèi)存上加上行鎖、間隙鎖互相爭搶最終表現(xiàn)為數(shù)據(jù)庫性能斷崖式下跌。理解了這一層你就能理解為什么所有人都說“大表不能直接DELETE”了。這篇文章覆蓋的分批刪除、按主鍵范圍分段刪除、分區(qū)表清空、建新表切換、pt-archiver工具歸檔這幾類主流方案都是我實際用過的。我會把每個方案的原理講明白給出可以直接抄的SQL和腳本再把我踩過的坑一并列出來。適合正在為清理大表發(fā)愁的DBA、后端開發(fā)以及所有被慢查詢?nèi)罩緡樀竭^的同學(xué)。1. 先搞明白為什么直接DELETE會“刪崩”數(shù)據(jù)庫1.1 你刪的不只是數(shù)據(jù)還有一堆“隱形成本”很多人以為DELETE就是把磁盤上那幾行數(shù)據(jù)劃掉但實際上在InnoDB存儲引擎里一次DELETE消耗的資源遠(yuǎn)超你想象。咱們一條條拆。第一行鎖和間隙鎖的覆蓋范圍。一條不帶精確條件的DELETE比如DELETE FROM orders WHERE status expired在RR隔離級別下InnoDB會掃描所有匹配到的記錄并對它們加鎖。如果這個條件沒走索引那就是全表掃描加鎖等于把整張表鎖了個遍。就算走了索引大量行同時加鎖鎖沖突的概率也急劇上升直接影響同一張表所有其他讀寫請求。第二undo log膨脹帶來的連鎖反應(yīng)。InnoDB的事務(wù)隔離靠MVCCMVCC靠undo log保存歷史版本。你刪除多少行就要往undo log里寫多少條反向操作記錄。1000萬行的DELETEundo log隨便就是好幾GB。這還不是最要命的更要命的是這些undo log在事務(wù)結(jié)束前不能清理它們對應(yīng)的舊版本數(shù)據(jù)還會被其他事務(wù)讀到于是在repeatable read隔離級別下長事務(wù)大刪除組合會讓undo表空間暴漲到撐爆磁盤。第三binlog的傳輸放大。MySQL主從同步依賴binlog默認(rèn)情況下DELETE產(chǎn)生的binlog是statement格式一條SQL在主庫刷一遍、在從庫也要刷一遍。但如果你開了row格式很多生產(chǎn)環(huán)境為了數(shù)據(jù)安全都會開那么1000萬行就會生成1000萬條binlog記錄事件主從同步的網(wǎng)絡(luò)開銷、從庫應(yīng)用日志的CPU開銷立刻拉滿。我見過一個案例主庫刪了500萬行用了8分鐘從庫追了2個小時沒追上。1.2 二級索引和碎片刪完之后表反而“變大”了InnoDB的二級索引和聚簇索引是分開存儲的。刪除數(shù)據(jù)時聚簇索引里的記錄被標(biāo)記刪除但二級索引里對應(yīng)的索引條目不一定能及時回收。大量刪除之后索引B樹的葉子節(jié)點(diǎn)出現(xiàn)大量空位索引掃描效率下降物理文件.ibd不會自動縮小。結(jié)果就是你辛辛苦苦刪了5000萬行SELECT COUNT(*)確實變少了但磁盤占用一點(diǎn)沒降查詢速度和刪除前幾乎沒區(qū)別。后面我講“重建表”方案時你會看到這才是徹底清理物理空間的唯一出路。1.3 看清楚場景再選方案既然直接刪不行那就得找替代方案。但替代方案不是一根筋走到黑得看你具體什么場景。我把實際工作中常見的場景歸成三類你可以對號入座場景特征典型例子推薦方案刪少量數(shù)據(jù)幾萬行以內(nèi)清理一批用戶標(biāo)記的錯誤數(shù)據(jù)直接DELETE加上合適索引刪大量數(shù)據(jù)但希望保留表結(jié)構(gòu)、保留在線服務(wù)清理過期日志、過期訂單但表還要繼續(xù)使用分批DELETE、按主鍵分段刪除、pt-archiver刪掉大部分?jǐn)?shù)據(jù)、或要徹底釋放磁盤表內(nèi)數(shù)據(jù)基本都沒用了只留最近一小部分新建表切換、分區(qū)表清空這里頭的關(guān)鍵區(qū)別在于你要“溫和地刪”還是“徹底地?fù)Q”。如果是前一種重點(diǎn)是控制每次刪除的量、控制鎖和主從延遲如果是后一種重點(diǎn)是讓MySQL在極短時間內(nèi)完成“無痕切換”靠的是DDL級別的原子操作和元數(shù)據(jù)替換。2. 最通用的方案分批循環(huán)DELETE把大事務(wù)拆成小事務(wù)2.1 核心思路與SQL寫法分批DELETE的本質(zhì)是把一個大事務(wù)拆成N個小事務(wù)。每刪幾千行就提交一次鎖持有時間短、undo log及時釋放、binlog分批傳輸對在線業(yè)務(wù)的影響被壓縮到最小。這個方案不挑表結(jié)構(gòu)、不挑數(shù)據(jù)分布適用面最廣我建議所有場景都先從這個方案起步。最基礎(chǔ)的寫法是靠著主鍵ID范圍來分批DELETE FROM big_table WHERE id BETWEEN 1 AND 10000;執(zhí)行完后繼續(xù)刪下一批:DELETE FROM big_table WHERE id BETWEEN 10001 AND 20000;如果你不想手動算范圍可以選擇每次取一批要刪的主鍵ID然后用主鍵IN去刪除DELETE FROM big_table WHERE id IN ( SELECT id FROM ( SELECT id FROM big_table WHERE create_time 2023-01-01 LIMIT 5000 ) t );注意這里為什么套了一層子查詢MySQL不允許直接在DELETE的WHERE里SELECT同一張表的子查詢錯誤碼1093包一層派生表就能繞過這個限制。外層每次觸發(fā)會掃描到滿足條件的5000個ID然后刪除。這種方式不依賴ID連續(xù)比BETWEEN方式更通用。但它的缺點(diǎn)是子查詢本身也要掃描如果篩選條件沒走索引性能同樣會很差。2.2 批次大小怎么定別拍腦袋看三個指標(biāo)分批大小的選擇直接決定方案的成敗。批次太大會退化成大事務(wù)太小則刪除效率低下循環(huán)幾萬次能把人急死。我從實際操作經(jīng)驗里總結(jié)了三個參考指標(biāo)。一是看主庫的鎖等待和活躍會話數(shù)。單批次DELETE執(zhí)行期間SHOW ENGINE INNODB STATUS里面的History list length不能持續(xù)暴漲活躍會話也不能長時間趴滿。如果單批次5000行執(zhí)行時間超過2秒就要減小批次。二是看從庫的延遲情況。設(shè)置定時任務(wù)循環(huán)刪除的場景每次循環(huán)之間SLEEP幾秒鐘。用SHOW SLAVE STATUS觀察Seconds_Behind_Master如果延遲在增長說明刪除速度超過從庫應(yīng)用binlog的速度必須加大間隔或減小批次。三是看undo表空間增長速度。一次性刪太多可用SHOW GLOBAL STATUS LIKE Innodb_history_list_length觀察這個值代表未清理的undo日志量如果它持續(xù)高位不下降說明系統(tǒng)里有長事務(wù)或者刪除太快來不清理這種時候加大SLEEP時間。以一個線上案例說某張2億行的用戶行為日志表按天清理60天前的數(shù)據(jù)每次刪8000行刪除耗時約1.2秒循環(huán)之間SLEEP 20秒。整體算下來每秒約刪除400行左右主庫負(fù)載穩(wěn)定在20%以內(nèi)從庫延遲控制在5秒內(nèi)。如果按每次50000行去刪單次執(zhí)行時間就飆到8秒從庫延遲直接漲到兩分鐘以上這就不行了。2.3 循環(huán)腳本的完整寫法生產(chǎn)環(huán)境里我更推薦用存儲過程來做一來避免應(yīng)用層頻繁發(fā)起連接二來可以在數(shù)據(jù)庫端精確控制循環(huán)邏輯。下面這個存儲過程是我經(jīng)常用的模板你按自己的表結(jié)構(gòu)調(diào)整下就能用DELIMITER $$ CREATE PROCEDURE batch_delete_big_data(IN p_batch_size INT, IN p_sleep_seconds INT) BEGIN DECLARE v_rows INT DEFAULT 1; WHILE v_rows 0 DO DELETE FROM big_table WHERE create_time DATE_SUB(NOW(), INTERVAL 90 DAY) ORDER BY id LIMIT p_batch_size; SET v_rows ROW_COUNT(); COMMIT; IF v_rows 0 THEN DO SLEEP(p_sleep_seconds); END IF; END WHILE; END$$ DELIMITER ;這個存儲過程有兩個核心設(shè)計值得說說。第一用了ORDER BY id LIMIT ?的形式保證每次刪除的都是最老的一批數(shù)據(jù)而且走主鍵有序掃描效率高。第二每刪完一批就COMMIT一次讓事務(wù)及時結(jié)束undo log和行鎖都在每個批次結(jié)束后立即釋放。還有一個細(xì)節(jié)很多人在循環(huán)里糾結(jié)要不要commitMySQL默認(rèn)是自動提交的但存儲過程的事務(wù)控制最好還是顯式寫清楚防止將來修改隔離級別時行為變化。調(diào)用方式很簡單CALL batch_delete_big_data(5000, 5);這里我解釋一下參數(shù)怎么配p_batch_size從5000起步往上調(diào)p_sleep_seconds從5起步往上加。每次加參數(shù)跑一小段觀察主庫負(fù)載和從庫延遲找到當(dāng)前機(jī)器配置下的最優(yōu)組合。內(nèi)存大、磁盤快SSD、從庫延遲容錯高的環(huán)境可以把批次加大到10000。我自己的經(jīng)驗是寧肯稍保守一點(diǎn)別追求一次刪太多導(dǎo)致業(yè)務(wù)抖動。2.4 分批DELETE的兩個主要局限這個方案雖然通用但有兩個短板你得知道。第一它只解決了“刪除動作”對數(shù)據(jù)庫的壓力沒解決“物理文件不釋放”的問題。分批刪完數(shù)據(jù)后表空間依然是滿的.ibd文件大小不會縮。如果你清理數(shù)據(jù)的目的是為了騰出磁盤空間那分批DELETE并不能直接滿足你需要配合后面說的重建表。第二如果業(yè)務(wù)高峰期刪數(shù)據(jù)即使每批只有幾千行依然可能影響性能。這個方案更適合業(yè)務(wù)低峰期執(zhí)行比如凌晨1點(diǎn)到5點(diǎn)盡量不要在白天大流量時段跑。3. 主鍵有序場景下的高效方案按主鍵范圍分段刪除3.1 原理順序掃描遠(yuǎn)比隨機(jī)掃描劃算如果說分批DELETE是“小步快跑”那按主鍵范圍分段刪除就是“化整為零分區(qū)塊推平”。它的思路是先把要刪除的數(shù)據(jù)主鍵范圍劃分成若干連續(xù)的區(qū)間然后逐個區(qū)間刪除。比如你要刪掉id從1到1億之間的部分?jǐn)?shù)據(jù)就可以分成1000個區(qū)間每個區(qū)間10萬行按順序依次刪。為什么這樣更快因為InnoDB聚簇索引本身是按主鍵組織的B樹以主鍵范圍刪除時掃描和刪除都是順序的充分利用了磁盤預(yù)讀和內(nèi)存緩存。相反如果按create_time等條件去隨機(jī)找數(shù)據(jù)每一次定位都要走二級索引再回表頻繁的隨機(jī)IO會大大拉低速度。這個方案比較適合那些主鍵和業(yè)務(wù)刪除條件高度相關(guān)的場景。比如說訂單表主鍵就是訂單自增ID而你要刪的都是半年前的訂單那這些訂單的ID一定集中在一個相對靠前的區(qū)間按ID范圍分段就非常合適。如果主鍵是UUID或者完全無序的字符串這個方案優(yōu)勢就不明顯了。3.2 怎么找分段邊界MAX/MIN查詢代替COUNT(*)很多人在分段前習(xí)慣先執(zhí)行一次SELECT COUNT(*) FROM big_table WHERE create_time xxx想確認(rèn)總共有多少數(shù)據(jù)要刪。我勸你不要這么做。大表上COUNT(*)是全表掃描或大范圍索引掃描光這一下就能把數(shù)據(jù)庫拖垮。正確做法是直接用MIN(id)和MAX(id)定位邊界然后按固定步長推進(jìn)SELECT MIN(id), MAX(id) FROM big_table WHERE create_time 2023-01-01;比如查出來要刪的數(shù)據(jù)id分布在 1000000 到 58000000 之間那你就可以從1000000開始每100000為一個區(qū)間依次刪除DELETE FROM big_table WHERE id 1000000 AND id 1100000; DELETE FROM big_table WHERE id 1100000 AND id 1200000;如果你希望全流程自動化也可以寫一個存儲過程按主鍵游標(biāo)推進(jìn)。但要注意分段刪除的每個區(qū)間刪除量并不均勻——有些區(qū)間可能恰好有大量要刪的行有些區(qū)間則很少。所以單個區(qū)間執(zhí)行時間可能有波動批次間SLEEP仍然不能省。3.3 一個重要優(yōu)化在刪除期間暫停二級索引更新這個技巧我在實踐中覺得非常好用但知道的人不多。如果你那張表有多個二級索引每次DELETE都要同時維護(hù)這些索引。索引多了刪除一行要更新的索引條目也多代價翻好幾倍。有一種做法是先拿到要刪除數(shù)據(jù)的id集合存到一張臨時表然后刪除原表上的二級索引刪完數(shù)據(jù)再重建索引。這里有一個典型Trade-off刪除索引期間查原表會變慢因為少了索引但刪除數(shù)據(jù)的整體速度會顯著提升。如果你清理的是“要刪除大比例歷史數(shù)據(jù)、但近期數(shù)據(jù)仍然要被業(yè)務(wù)頻繁查詢”的表二級索引的維護(hù)成本占了刪除總開銷的大頭這個優(yōu)化效果會非常明顯。但它也有風(fēng)險刪除索引和重建索引都是大操作重建索引期間表上所有依賴這個索引的查詢都會受影響。因此這個技巧我建議只在“刪除后要重建索引”的前提下使用并且放在低峰期配合后面的“刪除后重建表”一起做。3.4 分段刪除的邊界與最佳實踐這個方案最大的坑是刪除的區(qū)間里如果混著“不該刪”的數(shù)據(jù)你有多大概率誤刪所以分段必須建立在“主鍵范圍和業(yè)務(wù)條件強(qiáng)相關(guān)”的基礎(chǔ)上。如果兩者的相關(guān)性弱你得在DELETE的WHERE里同時加上業(yè)務(wù)條件比如DELETE FROM orders WHERE id BETWEEN 1000000 AND 1100000 AND status expired;這樣寫會稍微降低刪除效率因為多了條件判斷但安全性高很多。我自己一般會在條件里保守一點(diǎn)寧可多掃一點(diǎn)數(shù)據(jù)也不冒誤刪的險。原因很簡單海量刪除一旦誤刪恢復(fù)成本比多跑幾分鐘高得多。4. 表結(jié)構(gòu)允許時的最優(yōu)解用分區(qū)表刪數(shù)據(jù)就是刪文件4.1 為什么分區(qū)表能“秒刪千萬行”如果你的表本身做了分區(qū)那海量刪除的問題幾乎被降維化解了。MySQL 8.0支持的分區(qū)類型主要是RANGE、LIST、HASH、KEY對時間維度的歷史數(shù)據(jù)清理來說最常用的是RANGE分區(qū)。比如訂單表按月份做RANGE分區(qū)每個分區(qū)存一個月的數(shù)據(jù)。要刪除某個月之前的數(shù)據(jù)直接ALTER TABLE orders DROP PARTITION p202301;注意這個操作是DDL不是DML。InnoDB在DROP PARTITION時做的本質(zhì)是刪除分區(qū)對應(yīng)的物理文件整個操作不產(chǎn)生逐行刪除的行為所以速度極快——一個1億行的分區(qū)DROP它可能也就幾秒鐘。這是所有DELETE方案都比不了的。如果你的業(yè)務(wù)周期劃分不是按月也可以按季度、按年。只要你在分區(qū)創(chuàng)建時預(yù)留好未來分區(qū)的余量也就是提前建好后面幾個月的分區(qū)清理數(shù)據(jù)的時候直接drop掉過期分區(qū)根本不用寫任何DELETE語句。4.2 分區(qū)表改造的步驟與注意事項如果你現(xiàn)在這個表還沒分區(qū)想改成分區(qū)表那就要謹(jǐn)慎了。對已有大數(shù)據(jù)量的表執(zhí)行分區(qū)操作有幾種方式最穩(wěn)妥的是“新建分區(qū)表導(dǎo)入數(shù)據(jù)切換”的方式-- 1. 創(chuàng)建帶分區(qū)的目標(biāo)表 CREATE TABLE orders_partitioned ( id BIGINT NOT NULL, order_no VARCHAR(64), create_time DATETIME, ... PRIMARY KEY (id, create_time) ) ENGINEInnoDB PARTITION BY RANGE (YEAR(create_time) * 100 MONTH(create_time)) ( PARTITION p202301 VALUES LESS THAN (202302), PARTITION p202302 VALUES LESS THAN (202303), PARTITION p202303 VALUES LESS THAN (202304), PARTITION p202304 VALUES LESS THAN (202305), PARTITION pMax VALUES LESS THAN MAXVALUE );注意分區(qū)表要求分區(qū)字段必須包含在主鍵和唯一索引中。這是MySQL的一條硬性規(guī)定“every unique key on the partitioned table must include every column in the partitioning expression”。比如上面我把id和create_time放一起做了聯(lián)合主鍵才滿足要求。這個規(guī)定非??尤撕芏啾斫Y(jié)構(gòu)改分區(qū)失敗都是栽在這里。如果你的業(yè)務(wù)主鍵是單列id又想按create_time分區(qū)那要么改主鍵為聯(lián)合主鍵對現(xiàn)有業(yè)務(wù)有影響要么放棄分區(qū)方案。-- 2. 將歷史數(shù)據(jù)按分區(qū)規(guī)則插入 INSERT INTO orders_partitioned SELECT * FROM orders WHERE create_time 2023-04-01; -- 3. 業(yè)務(wù)停寫或低峰期切換表名 RENAME TABLE orders TO orders_old, orders_partitioned TO orders;4.3 沒有提前規(guī)劃那就用在線DDL工具做分區(qū)如果你的表已經(jīng)幾千萬行了尺寸巨大直接在線上執(zhí)行ALTER語句分區(qū)的耗時和風(fēng)險都讓人望而卻步。可以考慮使用gh-ost或者pt-online-schema-change這類在線DDL工具來執(zhí)行分區(qū)操作。它們通過觸發(fā)器或者binlog復(fù)制的方式在目標(biāo)表上重建新結(jié)構(gòu)切換過程幾乎不影響讀寫。但因為涉及復(fù)雜的表結(jié)構(gòu)轉(zhuǎn)換我只建議有一定經(jīng)驗的同學(xué)操作并且一定要在測試環(huán)境完整演練一遍再上生產(chǎn)。4.4 分區(qū)的維護(hù)成本別把“分區(qū)”當(dāng)萬能藥講了分區(qū)這么多好處我也要潑一盆冷水。分區(qū)表不是沒有代價的。最明顯的一點(diǎn)是某些查詢沒帶分區(qū)鍵時性能可能不升反降。比如你設(shè)置了按create_time分區(qū)但業(yè)務(wù)查詢經(jīng)常只按order_no查那MySQL會掃所有分區(qū)等于退化成了全表掃描。所以是否上分區(qū)要先梳理清楚核心查詢的WHERE條件。另外分區(qū)本身也是DDL操作每次拆分、合并、刪除分區(qū)都要小心全局元數(shù)據(jù)鎖MDL的影響。生產(chǎn)環(huán)境的表要操作分區(qū)依然建議低峰期做最好配合在線DDL工具一起用。5. 騰出磁盤空間的一勞永逸方案新建表 切換 重建5.1 核心思路數(shù)據(jù)“搬家”而不是逐行“刪除”前面說過普通DELETE不管你怎么刪物理文件都不會變小。如果你清理海量數(shù)據(jù)的最終目的是釋放磁盤空間或者讓表恢復(fù)到干凈緊湊的狀態(tài)那正確思路是“把要保留的數(shù)據(jù)復(fù)制到一張新表然后用新表替換舊表”。保留的數(shù)據(jù)越少新表就越小舊表直接DROP掉即可。這個方案的執(zhí)行流程是根據(jù)業(yè)務(wù)條件把要保留的數(shù)據(jù)導(dǎo)到新表。業(yè)務(wù)停寫或低峰期做一次數(shù)據(jù)補(bǔ)齊和表名切換。DROP掉舊表磁盤空間隨之釋放。5.2 完整操作步驟以保留近3個月數(shù)據(jù)為例第一步創(chuàng)建新表。最簡單的方式是復(fù)制舊表結(jié)構(gòu)CREATE TABLE orders_new LIKE orders;這個語法會復(fù)制表結(jié)構(gòu)、索引、自增屬性但不會復(fù)制數(shù)據(jù)非常適合用來做換表。第二步把需要保留的數(shù)據(jù)搬進(jìn)新表。INSERT INTO orders_new SELECT * FROM orders WHERE create_time DATE_SUB(NOW(), INTERVAL 3 MONTH);這里有一點(diǎn)要注意如果保留數(shù)據(jù)量也很大比如上億行INSERT不進(jìn)去那么快而且會產(chǎn)生大量binlog。可以考慮在業(yè)務(wù)低峰期執(zhí)行或者用INSERT INTO ... SELECT ... WHERE ...加上分批處理邏輯和前文的分批刪除邏輯相通。無論如何絕對不要在業(yè)務(wù)高峰期執(zhí)行這個INSERT SELECT它會對源表加鎖可能導(dǎo)致線上寫入被阻塞。第三步切換表名。這里最安全的是用兩個原子性RENAMERENAME TABLE orders TO orders_old, orders_new TO orders;MySQL的RENAME TABLE是原子操作也就是說這一步要么全部成功要么全部失敗中間不會有“表不存在”的間隙。這也是為什么推薦用兩條RENAME而不是先DROP舊表再RENAME新表。如果先DROP再RENAME中間那幾秒你線上所有訪問orders的語句都會報“table doesnt exist”。切換完成后應(yīng)用立刻開始訪問新表。新表里只有近3個月數(shù)據(jù)所有查詢都會比原來快不少。第四步驗證后DROP舊表。-- 驗證新表數(shù)據(jù)量、索引、自增值都正常 SELECT COUNT(*) FROM orders; SHOW INDEX FROM orders; -- 確認(rèn)無誤后刪除舊表釋放磁盤空間 DROP TABLE orders_old;DROP表的瞬間會釋放磁盤文件這個過程中I/O會有些波動但對業(yè)務(wù)基本無感。需要注意的是DROP一張幾十GB的大表本身也可能產(chǎn)生瞬時I/O壓力。如果表特別大比如超過100GB可以在低峰期執(zhí)行或者考慮用硬鏈接方式分批釋放文件這里不展開知道有這回事就行。5.3 這個方案有一個必須處理的臟數(shù)據(jù)問題新建表切換方案最大的隱患在于數(shù)據(jù)一致性。從“把數(shù)據(jù)復(fù)制到新表”到“切換表名”之間舊表可能又有新的寫入或修改如果你沒有完全停寫的話。這些增量數(shù)據(jù)不會自動出現(xiàn)在新表里。要規(guī)避這個問題要么在完全停寫窗口內(nèi)完成第二步和第三步適合可以接受短時間停服的場景要么利用binlog或應(yīng)用層雙寫來補(bǔ)齊增量。對于大部分互聯(lián)網(wǎng)業(yè)務(wù)來說最現(xiàn)實的是選一個業(yè)務(wù)量最低的時間窗口比如凌晨2點(diǎn)申請5到10分鐘的只讀維護(hù)窗口一口氣完成復(fù)制和切換。這個方案在架構(gòu)上是最干凈的也是我推薦你在數(shù)據(jù)量特別大、清理比例又特別高時優(yōu)先考慮的路徑。5.4 什么時候“換表”優(yōu)于“刪除”這里給個簡單的經(jīng)驗總結(jié)。假設(shè)表總行數(shù)X要保留行數(shù)Y。如果Y/X的比例低于30%換表方案的綜合效率顯著高于DELETE方案。因為這種情況下你要拷貝的數(shù)據(jù)少新表很小切換后所有查詢受益磁盤也徹底釋放。如果Y/X超過50%新建表拷貝的數(shù)據(jù)量太大反而不如分批DELETE碎片整理劃算。記住這個比例分界線你做技術(shù)選型時就不用再糾結(jié)了。6. 生產(chǎn)環(huán)境更優(yōu)雅的歸檔工具聊聊pt-archiver6.1 pt-archiver到底解決了什么問題如果你不想自己寫存儲過程、又要批量刪除歸檔數(shù)據(jù)Percona Toolkit里的pt-archiver就是為這個場景量身定做的。它是業(yè)界最常用的MySQL歸檔和清理工具核心優(yōu)勢有三點(diǎn)一是自動分批每次操作一行或一批控制鎖粒度二是可以同時把刪除的數(shù)據(jù)插入到歸檔表三是不要求你手寫循環(huán)邏輯參數(shù)化配置就行。它適合的場景包括定時清理歸檔歷史數(shù)據(jù)、大表冷熱數(shù)據(jù)分離、刪除時保留一份備份到歸檔庫比如歸檔到另一張表或者另一個實例。我自己在生產(chǎn)上用過它清理過一張幾千萬行的流水表工具平滑度非常高沒有出現(xiàn)鎖等待或從庫延遲異常。6.2 一條命令教會你用pt-archiver基本用法如下需求是把orders表里2023年之前的數(shù)據(jù)刪除同時把刪除的數(shù)據(jù)備份到orders_archive表pt-archiver \ --source h127.0.0.1,P3306,uarchive_user,pxxx,Dtest,torders \ --dest h127.0.0.1,P3306,uarchive_user,pxxx,Dtest,torders_archive \ --where create_time 2023-01-01 \ --limit 1000 \ --txn-size 1000 \ --sleep 0.5 \ --bulk-delete \ --bulk-insert \ --statistics參數(shù)含義拆解一下--source和--dest源表和目標(biāo)表。如果只做刪除不需要?dú)w檔可以省略--dest。--where刪除條件這是核心篩選條件注意這里必須走索引否則工具會提示全表掃描風(fēng)險。--limit 1000每批取多少行。--txn-size 1000多少行提交一次事務(wù)。這兩個參數(shù)配合控制鎖粒度。--sleep 0.5每批之間的休息時間單位秒用來控制刪除速率這是保護(hù)從庫不延遲的重要參數(shù)。--bulk-delete和--bulk-insert使用批量刪除、批量插入的方式比逐行操作高效得多。--statistics輸出執(zhí)行統(tǒng)計方便事后分析。在實際執(zhí)行前官方工具支持--dry-run參數(shù)只做語法檢查而不真正執(zhí)行可以拿它先驗證命令是否正確pt-archiver --source ... --where ... --dry-run6.3 使用pt-archiver的3條實踐經(jīng)驗第一連接賬號權(quán)限最小化就好只需要源表SELECT、DELETE目標(biāo)表INSERT的權(quán)限別一上來就給root。這不僅是安全習(xí)慣也能防止操作失誤時影響面擴(kuò)大。第二如果目標(biāo)歸檔表和源表結(jié)構(gòu)完全一樣--dest指定的表可以提前建好否則工具會自動嘗試創(chuàng)建但字段映射可能出錯。我建議手動先建好歸檔表不要依賴工具自動建表。第三必須確認(rèn)WHERE條件能走索引。pt-archiver執(zhí)行時會做 explain 檢查如果發(fā)現(xiàn)全表掃描它有--no-check-charset之類的參數(shù)跳過一些檢查但全表掃描刪除依然會拖垮庫。執(zhí)行前用EXPLAIN看一眼執(zhí)行計劃最穩(wěn)妥。7. 刪除之后的善后工作表空間整理與索引維護(hù)7.1 為什么刪完數(shù)據(jù)表文件還是那么大回到前面提到的那個歷史遺留問題DELETE只做邏輯刪除標(biāo)記記錄為“已刪除”物理空間不會立刻返還給操作系統(tǒng)。InnoDB表空間內(nèi)部雖然可以復(fù)用這些空間給后續(xù)INSERT但是文件大小不縮。因此如果你執(zhí)行完大批量DELETE之后用ls -lh看.ibd文件會發(fā)現(xiàn)文件大小一點(diǎn)沒變。如果你的目標(biāo)是壓縮物理文件目前通用的做法是重建表。在MySQL 5.7之后的版本里執(zhí)行ALTER TABLE big_table ENGINEInnoDB;可以重建主表數(shù)據(jù)。這個操作在MySQL 5.6以后是Online DDL允許在重建期間繼續(xù)讀寫但它仍然會消耗額外的磁盤空間因為要生成臨時表文件耗時也比較長依舊建議在低峰期操作。MySQL 8.0還有一種新姿勢用ALTER TABLE ... ALGORITHMINPLACE配合在線操作但也要看版本和表結(jié)構(gòu)具體情況。最穩(wěn)妥的仍是按前面第5節(jié)說的“建新表切換”方案徹底搬家一次物理和邏輯上都干干凈凈。7.2 清理碎片和重建二級索引另外一個容易被忽略的問題是索引碎片。大量刪除后二級索引葉子節(jié)點(diǎn)會有很多空位索引空間利用率下降查詢性能受影響。除了重建表你還可以對某個二級索引單獨(dú)做整理ALTER TABLE big_table DROP INDEX idx_create_time, ADD INDEX idx_create_time (create_time);這個操作的本質(zhì)是刪索引再重新建索引索引重建期間相關(guān)查詢會變慢。如果有多個索引需要重建建議一個一個來別批量操作避免表上長時間沒有可用索引。7.3 統(tǒng)計信息更新ANALYZE TABLE不能省大量刪除之后MySQL的優(yōu)化器基于采樣得到的統(tǒng)計信息可能已經(jīng)嚴(yán)重過時于是執(zhí)行計劃就可能出錯本該走索引的查詢走了全表掃描本該用小索引的查詢選了個大索引。高負(fù)載下你還會看到information_schema.tables里的數(shù)據(jù)行數(shù)完全對不上那里面的值是估算的不是實時的。這時候就需要主動更新統(tǒng)計信息ANALYZE TABLE big_table;這個操作在MySQL 8.0里執(zhí)行很快因為它只是重新采樣計算統(tǒng)計信息不需要重建數(shù)據(jù)。在批量刪除后的當(dāng)天夜里或第二天的低峰期執(zhí)行一次能有效避免優(yōu)化器誤判。8. 常見問題排查與踩坑實錄8.1 問題一刪著刪著從庫延遲越來越大這應(yīng)該是最常遇到的現(xiàn)象。分批DELETE本身沒問題但如果你批次太大、SLEEP太短從庫應(yīng)用binlog的速度就跟不上主庫產(chǎn)生binlog的速度。排查流程先執(zhí)行SHOW SLAVE STATUS\G看Seconds_Behind_Master確認(rèn)延遲數(shù)值和趨勢再看主庫上是不是有長事務(wù)在跑information_schema.innodb_trx里如果有TIME很大的事務(wù)優(yōu)先確認(rèn)是不是自己的刪除腳本沒提交。最終解法就是把批次調(diào)小、SLEEP調(diào)大或者在腳本里增加“延遲超過閾值自動暫?!钡倪壿嬤@個邏輯不算復(fù)雜但非常實用。8.2 問題二DELETE走了索引還是很慢很多情況下你確實給WHERE條件加了索引但執(zhí)行計劃依然選擇了全表掃描。原因多半是數(shù)據(jù)分布讓優(yōu)化器認(rèn)為走索引不如全表掃描劃算。比如要刪除的數(shù)據(jù)占了表中大部分行優(yōu)化器估算下來全表掃更快。排查方法是執(zhí)行EXPLAIN DELETE ...看type列和key列如果發(fā)現(xiàn)是ALL或者key為NULL那么要么用FORCE INDEX強(qiáng)制走索引要么換成“按主鍵分段刪除”的寫法繞開優(yōu)化器的錯誤判斷。8.3 問題三刪除過程中出現(xiàn)鎖等待超時錯誤信息一般是Lock wait timeout exceeded; try restarting transaction。這說明你的DELETE在等一把別人持有的鎖。排查方式用SHOW ENGINE INNODB STATUS查看當(dāng)前鎖等待也可以直接查sys.innodb_lock_waits視圖看誰堵了誰。通常的原因有兩個一是業(yè)務(wù)本身正在高頻更新你要刪除的數(shù)據(jù)范圍這種場景要錯峰刪除二是你的刪除批次太大單批持有大量行鎖導(dǎo)致后續(xù)刪除互相等待。解法減小批次、增加SLEEP、盡量在低峰期執(zhí)行。8.4 問題四刪除期間undo表空間暴漲刪除動作寫undo是必然的但暴漲到撐爆磁盤就有問題了。先看SHOW GLOBAL STATUS LIKE innodb_history_list_length如果這個值一直增加不降說明有老事務(wù)一直沒結(jié)束導(dǎo)致undo日志無法purge。排查information_schema.innodb_trx里是否有長時間未提交的事務(wù)尤其注意是不是有APP服務(wù)開啟了事務(wù)但沒提交。一個連接空閑但沒commit就能讓你所有的刪除產(chǎn)生的undo都清不掉。遇到這種情況先確認(rèn)沒有長事務(wù)再說刪除的事否則你刪得越快undo漲得越兇。8.5 問題五DROP舊表時磁盤I/O瞬間打滿DROP大表時操作系統(tǒng)需要釋放對應(yīng)的大文件。InnoDB刪除表空間文件的過程不是瞬間完成的但對磁盤I/O的沖擊是真實存在的。如果舊表有100GB以上建議在業(yè)務(wù)最低峰DROP或者考慮分硬鏈接釋放文件的技巧先把.ibd文件硬鏈接到另一個路徑然后通過TRUNCATE一點(diǎn)點(diǎn)截斷文件來釋放空間讓I/O壓力平滑化。這個技巧屬于進(jìn)階操作普通開發(fā)環(huán)境不需要用但生產(chǎn)上遇到“不敢DROP大表”的情況可以嘗試搜索一下官方文檔和相關(guān)文章來深入。寫在最后的經(jīng)驗聊到這兒批量刪除海量數(shù)據(jù)的幾條主流路線基本都過了一遍。我個人的體會是沒有萬能的方案只有適合當(dāng)下場景的方案。如果只是日常刪幾十萬行把分批DELETE寫好、參數(shù)調(diào)對就夠了如果刪的數(shù)據(jù)占比特別高優(yōu)先考慮新建表切換如果表結(jié)構(gòu)設(shè)計時就想清楚了數(shù)據(jù)生命周期那么分區(qū)表是最省心的長期方案如果公司有Percona Toolkit的運(yùn)維基礎(chǔ)pt-archiver能讓你的活變得非常輕松。另外還有一點(diǎn)小建議不管用哪種方案動手前先把表結(jié)構(gòu)和數(shù)據(jù)分布摸清楚備份必須做好。海量刪除不是不能做而是要在可控的節(jié)奏里做。你每一次刪除前多花十分鐘做EXPLAIN、做備份、確認(rèn)時間窗口線上就能少一次血淚教訓(xùn)。希望這篇文章能幫你把那塊壓在心口的大石頭平穩(wěn)落地。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97操操| 另类激情五月| 日韩精品AV一区二区三区| 婷婷五月成年人| 五月亭亭六月天| 日韩五月婷婷| 成人免费黄色短视频| 五月婷婷和六月| 91男女视频在线观看| 国产精品久久99| 天天久综合网永久入口18| 另类综合激情| 120分钟婬片免费看| 色婷婷狠狠| 婷婷91| 久久人妻超碰一区| 俺也去婷婷五月天第五色| 国产人妻777人伦精品HD| 五月天天丁香婷婷在线中| 婷婷D区| 婷婷5月天激情综合| 91在线资源| 狠狠色成人影片| 色噜噜狠狠色综合伊人| 99久.| 五月天激情小说网| 久久久婷婷| 婷婷六月五月天综合| 五月天色综合| 91碰碰视频| 九九热123| 久久久久久人妻| 日日天天操| 五月天丁香网站| 人人操超碰| aa久久| 超碰二区| 一区无码| 免费在线a| 色五月天综合网| 日日噜狠狠色综合久| 开心婷婷五月天电影院| 欧美色偷偷大香| 日韩av网址大全| 婷婷色五月婷婷姐妹| 超碰国产在线| 久久思思热| 色青五月天| 五月丁香啪| 久久久精品色| 色娸娸综合网| 色人久夂| 99色婷婷视频| 色色99色色| 五月停停999| 综合久久六月| 五月天大香蕉av| 欧美成人精品A片免费一区99| 99综合自拍| 大香蕉久艹| 99操逼| 高清无码入口| 99无码黄色视频| 日韩按摩二区| 丁香五月婷婷在线观看| 九九热视频在线观看| 五月激情偷拍| 婷婷九月激情| 九九热视频精品| 高清无码网址| 五月丁香婷婷色| 日本丁香五月| av一区二区电影免费在线观看| 色婷婷丁香五月| 99日本黄站| 婷婷综合五月| 99在线免费观看| 九热在线这里有精品6| 久久精品色| 综合激情网五月激情| 五月花综合网| 五月丁香六月综合激情无码软件亮点| 另类 在线| 丁香五月婷婷五月| 99热免费| 九九色播五月丁香| 亚洲综合网激情五月天| 五月天婷久精视频| 婷色五月天| 免费精品99| 成人 在线观看国产| av在线观看网站| 91狠狠色丁香婷婷综合久久精品| 另类小说五月天| 欧美在线干| 97亚洲色 torrent magnet| 国产乱码久久| 天天干天天干天天操| 日韩99视频| 国产成人网址| 日韩三及成人AV片| 丁香婷五月天| 欧美色婷婷| 中文字幕免费高清电视剧| 日本va欧美va精品发布视频| 玖玖爱资源站| 久色网址| 大香蕉在线99热| Caop在线| va婷婷在线| 激情六月日韩| 丁香五月花| 日本天堂免费99| 色色热99| 久久99久久99精品免观看粉嫩| 91九色首页| 激情婷婷丁香| 熟女激情网| 热99AV网站| 五月天成人免费视频| 九九中文色色| 久久婷婷五月丁香| 五月丁香在线| 九九热只有这里精品| 色狠狠色噜噜AV天堂五区消防| 99亚洲天堂| www.久99| 99视频在线观看视频| 九热免费视频| 五月婷婷六月丁香首页| 骚。com| 五月天开心网| 色综合偷拍| 亚洲超碰在线| 99九色视频在线观看| 伊人网欧美在线男人天堂五月丁香| 五月天久久婷婷婷| 超碰在线99| 五月丁香花激情啪啪网| 色色网站毛片| 日本99久久| 岛国AV网站| 中字幕视频在线永久在线观看免费| 亚洲蜜乳AV| 婷婷五月六月激情| 欧美碰碰碰| 日日干日日s| 日韩亚洲视频| 91操片| 99久久极情精品一区| 久久精品一区二区三区四区| www.五月婷婷久久.com| 国产亚洲色婷婷久久99精品91| www.激情五月天.con| 99久久成人| 五月婷婷激情综合| 森林影视大全,最好看的2019年视频 | 亚洲黄网AV| 婷婷五月天av| 操操啪| 天堂久热| 噜噜吧天天爱| 五月婷婷久久久| 色丁香影院| 五月天婷婷综合色| 99re思思热久久| 99视频这里有精品| 日日操,日日爽| 丁香五月天啪啪| 婷婷免费精品视频| 中字幕视频在线永久在线观看免费 | 日韩人妻无码精品| 色,激情五月天| jiZZdr| 久久婷婷色| 高清视频一区| 久久机热这里只有精品免费视频| 婷婷色网| 久久AV电影| 午夜丁香| 婷婷五月天精品| 久久五月婷综合网| 区区欧美你爱| 婷婷最新地址| 99久久9| 久久久久久久8| 4399在线观看免费高清毛片| 好大好粗嗯啊-一级黄色大片免费观看-成人AV | 99九九在线精品热动漫| 亚洲欧美婷婷五月色综合| 久久视屏这里只有久久| 五月天婷婷丁香成人网| 丁香六月激情| 丁香六月开心| 色吧网综合| 天天在线XXX| 五月亭亭开心网| 国产精品国产| 香蕉久久国产AV一区二区| 五月丁香婷婷激情久久| 欧美性猛交99久久久99| 色情五月丁香| 偷偷狠狠久久婷婷五月天| 久久五月综合| 丁香 久久| 久操b网| 狠狠婷婷综合| 日本天天操| 99性爱无码| 91九色在线观看免费| 91干| 综合五月天完整| 9l视频自拍9l九色9l成人| 99热9| 高清无码一区二区三区四区| 久久婷婷色色| 久久码久久无清| 99色婷婷视频| 婷婷激情四射网| 综合网色| 严洲天天插| 97在线/亚洲| 激情婷婷| 99热精品在线播放| 婷婷玖玖五月天| 精品色情一区二区三区四区| 亚洲字幕AV一区二区三区四区| www.五月天婷婷| 婷婷亚洲综合| 欧美日比视频| 久久婷婷综合拍| 精品国产AV色一区二区深夜久久| 男女99免费视频| 亚洲激情精品| 色婷婷丁香AV综合| 五月丁香视频在线观看| 精品思思久久| 超碰成人电影| 日韩久热| 久久久.COM| 婷婷黄色网| 日本色婷婷| 超碰com| 情久久综合五月天| 五月婷婷六月基地| 日日操,夜夜撸| 欧美成人无码一区二区三区| 久久99免费视屏| 午夜成人在线免费视频| 久久国产AV| 极品少妇高潮啪啪AV无码| 91丨九色丨国产打屁股| 天天综合五月天| 日本熟女一区二区| 好激情在线综合网| 丁香月六月| 秋霞网在线观看理论91| 五月婷婷丁香成人网| 日韩欧美成人片| 婷婷伊人视婷婷婷| 五月丁香久人妻中文| 激情丁香五月天图片| 777米奇影视第四色| 激情綜合W W W,激情五月天| 色久激情在线| 很很干夜夜干| 亚洲无码yw| 2025天天日爽| 欧洲综合视频| 来吧亚洲综合网| 激情九月婷婷| 五月丁香综合| 婷婷久久五月天| 伊人久久婷婷| 懂色av粉嫩AV蜜臀AV| 色综合99色| 色婷婷狠狠久久综合五月| 91国产精品视频播放| 久久大大香| 91色五月在线观看| 91在线操逼视频| 高清资源站日A美A欧亚…| 婷婷五月综合在线| 天天操夜夜操| 色五月开心久久网| 激情AV中文| 免费AV在线| 午夜69成人做爰视频| 性做久久久久久久免费看| 亚州美女| 久久天堂婷婷五月| 久久婷五月| 综合综合色色| 人妻久久久久久久| 久热这里只有精品6| a网站免费观看| 无码激情AAAAA片-区区| 精品网站:999WWW| 99黄色性生活| 欧美va欧美va差| 欧美丁香五月| 97干干干丁香| 大香蕉99| 狠狠狠狠狠草| 五月丁香| 五月婷婷色色网址| 亚洲久久视频| 色婷婷丁香五月| 99精品热| 精品一二三区久久AAA片| 亲子乱av一区二区三区的| 综合婷婷久久| 久热视频这里只有精品| 人人干av| 天天综合 99久久婷婷| 久青青久| 日韩啪| 狠狠精品干练久久久无码中文字幕| 婷婷五月av| 亚洲无码九九| 强辱丰满人妻HD中文字幕| 国精产品一区一区三区免费视频| 国产精品一区在线观看你懂的| 丁香五月狠狠在线观看| 欧洲永久精品| 五月婷婷狠狠干| 青青草视频免费观看| 欧美激情伊人| 性生活久久朋友人妻| 亚洲天堂爱爱| aV欲望人妻中文字幕| 丁香六月婷婷综合色| 欧州色色| 色婷婷香蕉在线| 久色88| 色噜噜97视频在线观看| 亚洲a色| 五月激情啪啪| 色婷婷丁香五月| 色 色 色综合com| 99ri精品视频在线观看| 五月丁香成年黄色| 五月天综合在线观看| 大香蕉520| 婷婷五月综合中文字幕| 婷婷性爱无码视频| 久草五月天| 超碰成人公开| 五月色婷婷AV| www久久久久久久久久久| 999热在线视频| 开心色五月天久久久久久久| 任你弄在线视频免费| 色综合中文| 夜夜夜夜夜骑撸| 97搞在线| 亚洲激情免费视频| 婷婷六久久| 任你草| 亚洲色图五月丁香| 婷久久久| 99热这里只有精品268| 26UUU欧美激情一区二区| 五月天色区| 91久久精品无码一区二区三区| 色婷婷丁香五月在线观看| 风流少妇A片一区二区蜜桃 | 人人摸人人| 日韩啪啪视品| 婷婷情色激情| www.色情五月天.com| 婷婷亚洲在线| av五月丁香婷婷网| 久久99热这里只频精品6学生| 色婷婷精| 色婷婷亚洲五月天| 久久久99婷婷久久久久久| 另类激情五月| 日日操无码| 亚洲综合丁香五月天| 成人精品视频99在线观看免费| yazhou seshipin| www.久久| 五月婷婷成人网首页| 99在线精品免费视频| 日韩欧美四五区| 国产性av| 天天日天天草| 人妖色AV色综合| 天天综合图片| 欧美色色日韩| 欧美影院婷婷| 夜夜夜夜操| 九九热99精品| 色色com| 性五月激情| 97人人干| 26uuu| 国产综合丁香五月天| 青青草原伊人网| 999婷婷综合| 99在线精品视频在线观看| 99在线er热| 欧美性生交A片免费看| 九九热视频免费的| 99日精品视频| 精品一二三区久久AAA片| 天天xxxxxx天天日| 色9999日韩国产| 日本色婷婷| 国产VA亚洲VA96| 91人人超碰在线| 色色99| 国产精品久久7777777精品无码| 色综合久久久久久久久五月| 亚洲色频| 国产在线aaa片一区二区99| 色狠狠综合网| 国产午夜精品一区二区三区四区| 涩涩涩.com| 9热在线观看| 五月婷婷69| 日日噜人人人做人| 丁香五婷婷| 色色五月天婷婷| 色999;丁香五月| 久久成人亚洲欧美电影| 亚洲色五月婷婷| 人人做天天爱| 99热这里只有精品亚洲| www.色婷婷.com| 香蕉狠狠爱视频| 欧美性丁香色色五月天| 久久这里只有精彩| 亚洲午夜一区二区| 新激情五月天| 无码人妻少妇色欲AV一区二区| 这里只有精品网| 婷婷五月天日本无码| 99久久6| 狼人久草| 久久98热re| 婷婷五月天av| 91操熟女| 五月婷久久在线| www99xxxx五月丁| 天天插天天干| 色九区| 色情五月停停丁香| 色丁香久久久| 很操日本7| 99色在线观看| 丁香花五月天激情| 日韩高清久久| 婷婷五月精品中文| 丁香五月性| 97操碰视频| 开心五月婷婷婷美女| 思思久久96热在精品国产,| 五月天婷婷色色| 开心激情站| 99热18| 五月婷婷色影院| 六月丁香婷婷综合在线| 亚洲精品大片| 大地9中文在线观看免费高清| 色色哒五月婷婷六月丁香| 五月情四婷婷| 另类激情五月| 天天干天天射综合网| 婷婷舔| 婷婷五月天成人娱乐| 狠狠香蕉| 久久久久久xxxxx| 狠狠婷婷色| 亚洲爆乳无码精品AAA片蜜桃| 无码操B| 丁香六月久久| 开心激情播播五月天| 婷婷开心综合人妻小说网址| 天天草天天日| www激情婷婷com| 五月丁香六月婷婷在线小说视频| 亚洲俩性性爱图片久久第六页| 五月久久丁香| 最新久久99视频网站| 丁香五月天婷婷大香蕉| 大香蕉人人人| 色色色色色五月丁香| 骚五月婷婷| 9热在线| 婷婷激情五月天激情小说| 天天肏视奸| 欧美大片免费观看| 另类国产欧美视频| 99啪| 四虎婷婷五月天| 都市激情久久| 亚洲丁香五月综合| 战争与艾拉电影免费观看| 夜丁香综合| 天天干天天拍| 久久九九国产精品怡红院| 六月丁AV| 久久精品人妻| 色区久久| 《蜘蛛女》梁铮1995| 婷婷五月天深爱| 国语精品探花| 精品人人操| 岛国av网站| 日日操夜夜擼| 啪啪丁香五月| 色欲日日躁| 深爱激情六月天| 亚洲乱码在线观看| 99精品偷自拍| 丁香五月六月综合激情| 激情丁香五月激情婷婷| 久色激情| 婷婷六月激情综合| 婷婷午夜| 久久综合五月| 思思热在线视频精品| av九九| 亚洲六月色婷婷| 六月丁香色色| 久操香蕉| 九九热这里有精品23| 99久久性爱| 天天操天天干天天日| 五月天色影院| 亚洲视频在线网站| 婷婷色情五月| 激情六月丁香综合| 婷婷五月骚厕所| 琪琪色五月天| 99久久婷婷五月| 欧美性二区| 99这里只有精品|v| 亚洲亚洲人成综合网络| 婷婷五月天激情综合| 久久精品婷婷五月丁香| 午夜婷婷六月天| 久9久成人精品视频| 国产偷人爽久久久久久老妇APP| 免费亚洲成人电影AV| 丁香五月婷婷色五月| 丁香六月伊人| 亚洲另类在线观看| 丁香五月天堂| 丁香五月婷婷色情综合| 人人爽网| 综合在线丁香五月| 天天综合网站| 婷婷久久久久| 91人操| 天天高潮夜夜爽| 久久98| 人妻六月天| 96性爱视频| 天天爽天天爽| 99re这里只有精品9| 精品久热69| 国产色色小草视频| 综合五月激情网| 中文幕无线码中文字蜜桃| 五月婷婷偷拍| 欧美丁香婷婷五月天| 91妻人人爽人人看片| 影音先锋xfplay资源男人网| 激情综合在线观看| 婷婷五月欧美| 丁香五月婷婷六月| 96精品国产综合久久久久久| 成人婷婷| 成人丁香婷婷五月天| 九九在线精点品| AV中文在线| 久久婷婷成人| 婷婷综合网| 色婷五月| 色欲人妻综合aaaaaaaa网| 97色婷婷成人综合在线观看| 丁香六月啪啪啪| 色域五月婷婷丁香| 日日噜狠狠| 日本三级黄色大片| www.玖玖婷婷在线| 亚洲欧洲午夜成人精品av| 日本一级淫| 99黄色| 综合另类激情| 日本美女五月天| 丁香五月色情av| 婷婷丁香五月色| 丁香五月婷婷欧美激情-中文天堂最新版在线观看| 激情伊人五月婷婷久久| 秋霞av吧| 五月在线| 色婷婷综合网| 色色激情五月天| 五月婷婷色播| 丁香五月天视频| 人人干Av| 亚洲AV无码久久精品色欲| www.色婷婷| 亚洲六月婷| www.久操| 九九99在线免费在线观看视频| 成人Av在线大片| 五月婷婷婷婷| 五月丁香婷婷成人版| 91婷婷丁香| 天天网站天天爽| 色99久草在线| 综合图片色色| XXXX岛国| 第五婷婷伊人丁香| 五月婷婷六月色| 欧美日韩aaaa| 五月丁香六月综合情在线观看 | 久久久婷婷五月亚洲97号色| 日日夜夜狠狠婷婷色| 丁香六月婷婷综合| www.五月天社区| 天天日综合| 另类激情码| 日日干夜夜干| 亚洲综合色色色| 另类亚洲视频| 538在线精品| 丁香六月婷婷| 五月丁香婷婷人体| 天天色天天射天天日| 欧美成人AAA片一区国产精品| 99色1| 任你操精品免费| 丁香五月婷婷婷桃花影院| 九九热在线精品| 97干欧美| 一本色道久久88加勒比| 五月激情五月婷婷五月天在线| 五月天色色婷婷| 成人αV视频免费观看| 五月天狠狠网站| 精品网站:999WWW| 五月综合激情图片| 这里只有精品免费视频在线观看| 国产精品99久久久久久久女警| 97人妻碰碰碰久久| 五月丁香六月婷婷无码| 欧美人人草草| www.亚洲激情| 欧美性猛交99久久久久99按摩| 丁香六月啪啪| 久久精品爱爱| 久久五月天综合| 97超碰人人操| 91久久久久久久久18| 九九十99视频| 日韩淑女人妻luan伦激情精品一区二| 综合九九久久| 天天摸天天舔天天天天爽| 人妻少妇色综合| 开心婷婷五月激情网小说| 九9九9无码| AV在线不卡网站| 俺去也在线视频| 国产精品久久久爽爽爽麻豆色哟哟 | 五月婷婷开心亚洲无| 激情五月丁香五月| 26uuu视频欧美| 操骚货在线| 久9热视频| 91丁香五月| 性色婷婷| 婷婷社区五月天| 五月丁香综合网色欲| 色五月丁香五月| 99热9| 激情五月综合亚洲另类| 狠狠久久婷五月综合色| 伊人丁香在线| 婷婷性爱五月天| 2015WWW永久免费观看播放| 亭亭玉月丁香| 日韩色色一区| 在线婷婷| 婷婷五月欧美综合| 91人妻人人操| 97操碰在线视频| www.99久| 国产精品久久久久久妇女6080| 嫩BBB槡BBBB搡BBBB视频| 免费日本aⅴ中文字幕 | 播五月丁香六月| www一起操在线观看| 激情久久久久久| 色九亚洲| 国产日韩欧美| 91人人爽久久涩噜噜噜| 色五月激情综合网| 五月天五月色婷婷综合| 精品9久| 九九热99熟女| 同性gv国产精品一区二区| 噼里啪啦在线观看免费完整版视频 | 丁香五月社区| Xx色综合| 91在线人| 久9热| 激情婷婷五月色| 婷婷综合日本| 欧美成人va| 亚洲夜五月| 大鸡巴伊人网| 99热精品在线| 直接看的AV网站| 日韩综合网络男女香蕉a片| 性无码专区无码| 欧美日韩AAAA| 精品在线| 久久一操| 国产成人网址| 99热综合| 激情www.98com| 99热天堂| 久久婷婷五月综合色区| 99操视频| www.狠狠狠.com| 激情av在线| 中文字幕网伦射乱中文| 成人网站免费在线播放| 久久午夜理论| 九九99免费视频| 熟妇国产| 九九无码| 91狠狠综合网| Www,五月天| 开心 五月 综合| 超碰伊人碰婷婷五月| 中字幕视频在线永久在线观看免费| 激情丁香五月婷婷| 五月婷婷在线网站| 色色丁香| 99久久99视频| 激情婷婷护士激情| 国产精品久久久久久久久久| 欧洲毛片基地c区| 九九热在线99| 噜噜噜精品欧美成人在线观看| 丁香五月激情啪啪| 激情视频综合| 婷婷伊人综合| 国产亚洲精品久久久久苍井松| 丁香五月激情综合| 99综合激情久久精品久久| 99超在线| 99网| 五月婷婷丁香五月| 日韩狠狠色| 99re这里只有精品国产99| 久久婷婷五月综合色奶水99啪| 亚洲影院婷婷色| 99久久户外勾搭| 色播综合| 婷婷狠狠操| 熟女激情五月天| 成人丁香婷婷五月天| 综合久色五月| 色综合天天网| 天天操天天日天天爱| 色九九九九| 丁香久久激情俄| 色九四色| 久久您您综合网| AA片在线观看视频在线播放| 99色在线观看| 五月激情综合网| 五月丁香六月欧美综合网站| 这里只精品热在线18| 99视频精品8 | 丁香五月婷婷久久久| 婷婷丁香91综合| 在线视频区| 亚洲国产精品成人午夜| 六月成人网| 亚洲精品又粗又大又爽A片 | 久久视频这里有精品99| 激情五月婷婷网| 超碰在线99| 五月综合丁香婷婷| 丁香五月情| 久草性爱| 五月婷婷基地| 热99这就是精品视频| 色色日本| 99爱爱| 深爱激情六月天| 丁香五月激情综合| 大地9中文在线观看免费高清| 桃色五月天| 无码激情AAAAA片-区区| av中文网| 青青草免费公开视频| 伊人综合网站| 日韩99无码| 综合精品啪啪| 色色色在线| 超碰99在线观看| 开心深爱五月天| 任你爽视频| 色色啊| 五月色亭丁香| 99热全是精品| 日本视频99| AV成人在线播放| 97精品欧美91久久久久久久| 日韩好吊操| 99精品视频免费观看,| 五月婷婷亞洲中文| 五月丁香基地| 强伦轩人妻一区二区电影| 中文字幕成人| 中文中文在线| 综合日本婷婷| 婷婷丁香五月综合| 五月天中文字幕在线婷婷| se99视频| 天天操夜夜操| 91九色国产| 无码日本精品XXXXXXXXX | 97婷婷丁香五月综合| 丝袜激情网| 亚洲精品乱码久久久久久综合| av人人操| 激情五月天婷婷| 人妻第九页| 欧美人人女女精品综合五月天| 丁香五月,开心五月,成人婷婷| 99热这里精| 五月婷婷,狠狠操| 嫩草AV久久伊人妇女超级A| 色色色色色日韩午夜激情 | 五月丁香狠狠| 在线成人视频免费| 69精品人人人人| chaopengdaxiangjiao| 激情亭亭五月| 五月丁香手机在线| 美女五月天婷婷| 日本色五月| 九色婷婷| 精品视频网| 俺来也综合网精品一区| 婷婷五月天手机版视频| 色婷婷9| 日韩人妻AV在线| 婷婷五月电影| 亚洲激情色色| 第四色五月天| 丁香五婷| 欧美亚洲婷婷五月| 五夜丁香| 日本美女97在线视频| 日韩无码专区| 囯产精品一品二区三区| 丁香五月婷婷色| www.久久色.com| 蜜乳.comcom| 丁香五月婷婷色| 草美女在线观看视频在线播放 | 欧美激情综合色综合啪啪五月| www.com任你艹| 五月婷丁香在线视频在线| 激情六月丁香| 亚洲一区二区 成人网站戴套| 五月综合亚洲色| 五月天激情小说网| 五月丁小婷婷激情四射| 人妻自慰在线| 日日噜狠狠色综合久久| 天天操天天操天天操天天操天天操| 中文网婷婷字幕婷| 丁香六月婷婷色XXXX| 婷婷综合五月天| 色婷婷玖玖影院| 色婷婷亚洲在线| 婷婷五月成人| 久久色9| 色情综合网| 精品欧美性爱超级爽| 色婷婷基地在线| 日韩久久视频| 97热超碰| 天天日日夜夜爽。| 五月天色小说| 六月丁香啪| 99超级碰免费视频| 亚洲无aV在线中文字幕| 婷婷五月丁香在线视频| 色域五月丁香| 色婷婷先锋| 国产精产国品一二三在观看| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 欧美色性色好| 97在线日韩| 色性日本| 欧美成人猛片AAAAAAA| 天天爽天天日人人爱| 五月天综合激情网| 大香蕉视频婷婷| 五月停停直播| 超碰AV在线| 五月婷婷开心亚洲无| 日韩性视频| 日本熟妇精品99| 日韩色五月| 色婷婷777狠狠| 日本一道久久| 久热成人| 97操操| 五月激情四射婷婷丁香| 欧美婷婷五月丁香| 操操操av| 男女啪啪做爰高潮无遮挡| 777米奇影视第四色| 久久婷婷五月草视频在线播放| 99精品久久| 天天操夜夜夜拍拍拍| 国产99久久久国产精品免费看| 伊人天天色| 久久大国产香蕉| 美女美女美女三级色天天天天天| 伊人婷婷99热精品| 日本久久爱| 狠狠草网| 99热都是精品| 天天操夜夜啊| 五月丁香婷婷色| 久久五月天激情视频| 婷婷欠久少妇| 六月天婷婷| 一本久道综合99| 丁香五月天啪啪| 色婷婷影音| 涩涩激情五月婷婷| 激情五月丁香社区| 丁香婷婷人妻| 久久综合五月天激情小说网站| 噜噜色com| 九月av| 高清无码网址| 激情都市五月天| 久久天堂加勒比| 五月丁香婷婷色| www.婷婷五月天啪啪| 婷婷综合伊人| 婷婷天堂站| 天天天添天天操| 国产操逼网站| 色5月婷婷色| 婷婷五月情色| 综合激情四射一theav| 亚洲网视屏| 99 频99热国里只有精品| 超碰色热| 欧美性爱五月天| xxx日本东京热| 九月婷婷激情| 午夜婷婷| www,欧美干干干干干干| 艹天天射| 色色综合网站| 婷婷五月丁香六月| 久久中文人妻系列| ady狠狠入| 色五月在线播放| 天天射天天射一道本日本社区| 丁香婷婷色九月| 国产肥白大熟妇BBBB视频| 狠狠色成人影片| 激情q青青草在线婷婷| 少妇2做爰HD韩国电影| 色婷婷小说网| 99热精品10| 99色五月| 97精品人人A片免费看| 99色在线| 色五月天天| 丁香六月啪啪啪| 婷婷五月丁香图片人人操| 综合色五月| 亚洲色激婷| 五月天婷综合| 91麻豆国产三级精品福利在线观看| 六月丁香中文字幕| 日日操,夜夜撸| 亚洲成人网在线观看| 牛牛澡牛牛爽| 婷婷久久免费看| 亚洲婷婷久久综合| 九九热9| 丁香六月婷| 伊人婷婷色| 久久深爱激情网| 99riAv1国产在线观看| 激情五月天婷婷播播久久综合91| 碰碰91| 99热这里只有精品5| 午夜九九电影| 第四色婷婷日本| 欧美日韩国产日本精品四虎网网站物| 超碰在线网站9| 色情婷婷五月天| 99这里有精品| 国产精品日韩十五区| 亚洲中文无码成人| 婷婷五月综合在线| 碰碰操91| 五月色丁香婷婷综合| .精品久久久麻豆国产精品| 色五月婷婷九月| 五月天玖玖狠狠色色| 欧美狠狠草| 九九九热精品| 九九综合网色全集| 亚洲另类AV| 久久久91精品| 五月日韩中文字幕| 97色干| 秋霞AV淫| 五月天激情国产综合婷婷婷| 这里只有精品69| 黄页大全十八禁| 99这里有精品免费| 都市激情久久| www婷婷| 91玖玖| 欧美啪啪9| www.久久爱.com| 亚洲av无码精品色午夜| 在线免费视频caop| 99热热热99精品丁香| 丁香六月综合激情| 99热精品免费| 亚洲va成人va成人va在线观看| 日韩九九| WWW,五月| 丁香激情综合| 26uuu激情五月天| 亚洲色情久久| 青青草轻轻操| 丁香六月欧美| 男人的天堂99| 青青草Avb在线| 97婷婷丁香五月综合| 国产超碰av| 亚洲综合欧美色丁香婷婷888月图片| 免费V片在线| 色色色五月天激情资源| 婷婷五月天丁香激情| 六月色婷婷综合影视| 五月亭亭色| 日本视频欧美观看免费| 99狠狠色| 在线观看的av| 在线国产精品色| 另类五月婷婷| www.久久爱| 丁香婷婷五月天校园春色| 狠狠色婷婷在线| 婷婷综合五月激情| 伊人丁香婷婷东京| 五月丁六月香| 婷婷激情综合| 91婷婷丁香| 亚洲日日日| 蜜桃成语时李时珍 免费| 538在线精品| 熟妇国产| 色五月婷婷激情基地| AV电影在线播放| 极品人妻VideOssS人妻| 强壮公让我夜夜高潮A片视频| 最近中文字幕大全免费版在线 | 精品一区久热| 婷婷五月天丁香成人社区| 99九无网码| 色噜噜狠狠色综合AV兰草影视| 国产精品色色666| 久久婷婷婷婷伊人| 天天xxxxxx天天日| 欧美日本另类| 婷婷在线激情| 色中色综合| 亚洲色婷婷| 伊人久久丁香五月91| 久久婷婷六月综合综合| 五月婷啪| 九九99视频精品| 亚洲天码视频www蛋播视频| 五月丁香六月| 91狠狠综合久久| 国产av天天插天天操天天爽| 日韩黄色电影| 五月综合亚洲色| 丁香五月中文字幕久色| 性热视频99精品| 伊人91| 墨西哥毛片内射精| 亚洲精久久| 久久99久久99精品免观看软件 | 狠狠精品干练久久久无码中文字幕| 九九婷| 丁香五月首页| 99色1| 97碰超级人人看| 99热在线观看| 97热在线精品| 99re思思精品视频在线观看| 久久精品这里只有精品免费首页| 五月天综合婷婷| 97涩婷婷婷婷基地| 日本一道久久| 97婷婷五月天| 婷婷99狠狠躁天天躁| 超碰人人摸AV| 丁香五月偷拍| 99热个人在线| 狠狠干夜夜干| 大香蕉伊人久久| 无码激情AAAAA片-区区| 久久综合性| 亚洲V国产V欧美V久久久久久| 荡乳尤物3HP1V5| 操逼电影免费看| 日本丰满久久| 色婷婷A| 婷婷五月成人社区| 日韩一级一片内射视频4K| 久久久久人妻网址| 国产67194| 天天操天天爱天天日| 综合逼五月激情婷婷| 日本色天堂| 91干婷婷| 色五月婷婷少妇人妻| 99只有精品| 人碰人人人玩91| 午夜成人天堂久久无码日韩久久| 丁香五月婷婷在线视频| 97碰碰视频在线观看| 激情国产五月| 99热这里在线精品| 九九热视频这里只有精品| 亚洲色久| 色五月综合在线| 99久久婷婷国产综合亚洲| 久久这里只有精品久久| 九九激情| 99热午夜精品| 韩国情人在线电视剧免费观看高清版全集 | 综合热无码| 99热成人| 亚洲熟女色| 夜夜骑天天操| 我淫我色婷婷五月天激情四射| 精品99这里有| 91久久精品无码一区二区三区| 欧美激情 日韩无码 婷婷 五月天| 99热这是里只有精品| 婷婷久久大香蕉| 97干在线观看| 夜夜骑夜夜撸| 亚洲丁香五冃97色| 先锋男人99资源| 人人摸人人| 337p大胆噜噜噜噜噜91Av| 五月婷AV| 亚洲狠狠爱婷婷| 少妇久久诱惑视频| 久久99网站| 26uuu欧美日韩| caop在线视频| 伊人婷婷大香蕉| 亚洲国产99| 俺去婷婷 丁香| 天天五月情| 九月婷婷在线视频| 激情丁香婷婷| 婷婷五月色| 五月婷婷激情综合| 人妻激情综合| 亚洲一级色电影| xx久久| 99久久精品色老| 色玖玖综合| 久久与婷婷| 激情久久久久久久久久| 精品女人九九九| 久久综合影院| 91好好热日本在线| 九九大香视频| 97色女人在线| 丁香激情网| 久久久大香蕉| 深爱激情五月网| 五月天婷婷狠狠| 激情五月天啪啪| 日日噜狠狠| 天天干 夜夜爽| 99这里只有精品国产| 噜噜噜狠狠色综合| 很操日本7| 五月天婷婷激情| 丁香五月婷婷色综合基地| 久久婷婷六月综合国际| 伊人狠狠干| 五月丁香 狠狠爱| 老司机日日夜夜青草| 91天堂网综合| 色色色五月婷| 丁香六月婷婷久久综合| 蜜桃人妻无码AV天堂三区| 亚洲开心激情网| 午夜在线成人网站免费观看| 婷婷色爱| 九九99热久久精品66中文字幕| 六月婷婷开心| 国产白丝在线一区| 大香蕉综合网| 激情五月天网页| 亚洲色色五月| 亚洲在线操| 九九热只有精品6| 日本在线播放97| 六月丁香婷婷综合在线| 丁香五月天网站| 久久激情网| 99热在线观看这里只有精品| www一起操在线观看| 另类综合激情| 色五月天中文字幕| 亚洲成人网址在线观看| 日韩99视频| 另类视在线| 丁香五月成人| 可以免费看的AV网站| 久久久久久久久久91| 人妻久久久| 人色五月天婷婷| 激情五月天99色| 99久re热视频精品98| 97色婷婷五月天| 五月丁香欧美综合| www.99色| 五月激情婷婷开心| 另类亚洲2| 亚洲精品又粗又大又爽A片 | 九色啦蜜臀| 丁香五月婷婷六月婷| 丁香五月天激情四射网络不好| 激情综合网色播五月| 玖玖资源天天无码|