免费国产精品自在自线-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
返回資訊列表
69色色视频| 人人草成人视频| 久久视这里只有精品| 国产婷婷综合在线免费视频| 成人Av在线大片| 久久精彩视频| 亚洲AV免费在线| 五月婷婷香| 婷婷玖玖五月天| 欧美黄色韩日网| 色一色综合| 久久丁香五月综合六月激情红杏视频| 99热自拍| 亚洲狠狠操| 色婷婷很很丝袜| 久久久久久丁香五月| 九色亚洲| 成人 视频免费观看网站| 日本久久人| 日本五月婷| 丁香色婷婷色手机免费在线| 婷婷六月啪啪| 中文字幕欧美久久| 狠狠干五月天| 天天色综合综合| 九月停停| 五月综合激情| aⅤ79成人片| 久久五月综合| 久婷久婷| 丁香六月天婷婷| 六月丁香深深爱| 五月色丁香| 另类激情码| 99爽视频| 色情综合| 欧美123区免| www.99婷婷| 欧美久久久久久久久中文字幕| 婷婷五月激情欧美| 亚洲精品又粗又大又爽A片 | 蜘蛛女侠2003满天星免费观看| 九九人人自拍| 极品少妇XXXX精品少妇偷拍| 99视频只有精品| 婷婷久久综| 开心五月天激情网| 尔尔AV一区| 二区成人视频| 午夜天堂啪啪| 色五月婷婷开心| 啪啪色激情五月天| 国产精品国产成人国产三级| 激情婷婷丁香色五月综合| 久cao香蕉影院| 手机AVAV天堂看网| 亚洲成人一区| 丁香六月亚洲| 无码AV免费精品一区二区三区 | 天天天操天天天爰| 黄网在线观看免费| 99年操人人爽| 丁香婷婷五月六月久久| 99re这里只有精品在线观看| 成人视频一区| 亚洲AV无码成人电影| 五月天伊人| 国产阿姨日皮艹逼内射视频 | 综合狠狠干| 99人妻碰碰碰久久久久视| 婷婷丁香成人| 精品网站:999WWW| 婷婷六月爽| 第1影院之五月婷婷| 91久久久久久| 99re视频精品| 色欲香综合网| 深爱五月激情综合| 婷婷人人操| 亚洲春色奇米影视| 超碰97干| 思思热在线精品视频| 热久久思思热思思| 任你爽视频| 国产XXXX搡XXXXX搡麻豆| 婷婷成人视频| 激情五月丁香六月综合AVXXXX| 日韩啪啪视频| 国产ava| 久久天天| 久久这里有| 99免费成人网| 五月丁香六月综合情在线观看 | 这里只有精彩视频| 色婷婷久久| 在线综合婷婷| 激情五月综亚网| 五月丁香色色| 久久综合九色综合88i| 97干在线视频| 久久人妻精品| 91seav| 拳交大逼| 九九热这里只有精品一| 成人日韩欧美| 亚洲亚洲人成综合网络| 成人五月天丁香| 婷婷五月天综合在线 | 91男人资源站| 99久久6| 五月婷婷丁香五月亚洲色| 欧美十二区| 99热在线精品观看| 操逼六区| 久久九九在线视频| 婷婷激情丁五月| 久久亚洲婷婷综合色五月| 超碰亚洲天堂| 99热福利| 亚洲美女婷婷五月天| 色色五月婷| 任你操精品免费| 91日婷婷在线| 五月婷婷亚洲色图| 91互操| 第五婷婷伊人丁香| 99超级碰碰| www.久操| 婷婷丁香五月91| 《久久综合九色综合97婷婷| 六月丁香天堂| 影音先锋91| 丁香天堂夜| 国产高清视频91九九九久久久| 欧美精品XXXXBBBB| 夜夜骑夜夜撸| 99热精品中文字幕| 五月天色婷婷激情综合| 久久久久亚洲A∨成人乱码电影| 五月丁香六月婷综合成人综合| 欧美操逼天堂| 黄网在线免费观看| 婷婷久久国产视频| 色综合久久88色综合天天| 婷婷激情五月天视频在线| 五月花亭亭| 久草久青福利| 操操操www.com| 久久丁香婷婷五月天| 五月色综合| 91肏| 综合网色| 欧美va视频| 五月婷婷基地| 欧美成性色| 九月丁香婷婷综合激情| 深情六月婷婷综合久久| 秋霞三级色戒| 久热A| 婷婷六月激情| 久久天天| 成人无码中文| 91精品久久久久久综合五月天| 国产精品久久99| 九九热只有精品6| 婷婷狠狠五月综合| 丁香五月亚综合图片| 激情图片五月天| 丁香五月婷综合网| 91Chinese在线| 五月丁香啪| av操逼网| 欧美五月婷婷| 天天射综合网天天插| 色综合天天天天做夜夜| 91超碰人人操| 青草青草视频2免费观看| 97久久综合网| 色色五月丁香婷婷综合| 九九视频免费| 五月色欧洲| 亚洲bt丁香五月天婷婷激情小说| 亚洲最大在线| 国产精产国品一二三在观看| Av在线资源| 91久久久久久久91| tingtingzonghewang| 九九热视频精品| 中文字幕综合网| 超碰在线国产| 国产亚洲精品久久久久苍井松 | 久久五月六月| 亚洲VA口| 男同91| 99热传媒| 亚州婷婷五月激情综合| AV美美午夜| 99综合| 色婷婷综合网站| 婷婷九月丁香中文| 九九热视频首页/这里只有精品| 79色色色色| 99热最新| 婷五月天六| 五月天婷婷综合久久| 五月婷婷就去色| 色色色色色色网站| 国产激情久久| 日韩无码人妻一区二区| 俺去也在线官网| 超碰人人在线| 五月天播播中文字幕| 久热9| 最熟少妇乱码| 五月婷综合性中心| 久99视频在线观看| 99re视频在线| 色六月天| 日韩成人无码| 六月婷婷AV| 日韩综合网络男女香蕉a片| 五月丁香六月婷婷综合伊人| 五月婷婷啪啪啪| 亚洲激情网| 丁香婷婷综合激情五月色| 丁香五月天欧美在线| 99久久久久久| 91色情播放| 婷婷丁香五月天中文字幕| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 天天做夜夜爽| 丁香色成人| 我要射综合| 泰州成人视频| 一逼色综合| 六月婷婷在线| 色色色丁香| 日韩 欧美 国产 一区 二区| 丁香五月天在线| 开心婷婷五月天综合| 色色综合视频| CHINESE熟女老女人HD视频| 伊人婷婷五月天av| 丁香婷五月天| 91五月天| 九九热只有这里精品| 激情五月天网| 亚洲在线视频321| 俺去啦综合网| 色六月 婷婷| 婷婷五月天xxx| 九九热九九| 1024欧美看片| 天天综合网亚洲综合网| 日日操夜夜擼| 亚州AV超碰人人操| 婷婷成人av| 亚洲性图一区二区| 久久婷婷五月天丁香| 五月在在观看| 夜夜嗨一区二区三区直播内容| 婷婷五月亚洲综合| 久色网| 九九re精品视频在线观看| 免费观看的婷婷五月视频在线| 丁香五月花影院| 中文字幕丁香五月| 不卡在线视频| 色婷婷综合网站| 天天碰夜夜操| 久久九九热视频| 伊人超碰在线| 五月花激情| 婷婷五月综合色小姐小说| www.婷婷| 欧美性猛交AAAA片黑人 | 亚洲色五月天是什么| 五月激情网五月综合网| 综合久久五| 少妇口诉沐足视频播放器网址| 成人做爰A片免费看视频| 精品五月视频婷婷在线观看| 高清一区二区三区日本久| 日本的α片xxxwww| 色婷婷六月| 操逼在线视频| 久久综合婷| AV性爱网| 婷婷激情五月综合| 日日噜噜夜夜狠狠久久丁香五月| 激情五月综亚网| 99性爱视频| 少妇日麻屄| 国产亚洲精品久久久久久牛牛| 五月婷婷色影院| 人人操人人爱丁香五月| 日韩美女在线视频19| 亚洲秘 无码一区二区三区妃光/1| 五月 成人 婷婷| 91操人| 五月色欧洲| ZpRSw| 99视频这里只有精品10| 成人视屏在线观看| 国产精品扒开腿做爽爽爽A片唱戏| 色婷婷五月综合网| 天堂色婷婷| 亚洲日日日| 五月综合777| 色色五月天 亚洲| 五月婷婷色播| 青草性爱视频| 亚洲久艹| 99热免费| 丁香五月婷婷五月天| 99噜噜噜在线播放| 五月天婷婷在线播放| 国产熟女大叫受不了| 婷婷五月婷婷| 欧美成人色婷婷| 色九网| 黑人巨粗进入警花疼哭A片| 亚洲欧美999| 91丨九色丨熟女丰满| 色人久久| 丁香五月天视频| 色九月| 欧美婷婷丁香社区在线播放| 五月丁香福利| 99日韩网站| 九九色欲网| 超pen个人视频97| 激情五月丁香亭亭 | 婷婷五月色情天| 色综合爱综合| 综合久久高清| 不卡成人免费| 狠狠五月天| 99热这里只有精品86| 色九月婷婷| 99激情视频| 99性爱视频| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 夜夜骑夜夜撸| www.色窝| 丁香九月婷| 五月丁香六月激情| 五月婷婷免费在线观看| 婷婷午夜激情| 伊人久热91| 91婷婷| 播五月开心婷婷欧美综合| 丁香五月婷婷久久久| 97在线日韩| 夜夜爱网站| 女高怪谈在线观看| 天天粽合合合合| 五月丁香久久久久| 欧美碰碰| av大片在线| 久久综合激情| 天天爽天天爽| 色吧五月婷婷| 五月开心啪啪| 五月天开心成人网| 丁香五月天在线观看视频| 色婷婷成人久久| 精品人妻久久久久久| 五月婷婷开心五月| 欧美狠狠地| 99热这里只有精品98| 欧美日本高清视频99| 日本一级黄色片。| 婷婷五月花| 91viP在线看| 色五月婷婷在线| 精品色情一区二区三区四区| 欧美久久婷婷| 激情99热| 久久精品99久久久久久| 激情综合在线播放| 丁香五月婷婷久久久| 9色91视频| 天天干天天操天天上| 91碰碰碰| www.日本久久videos| 天天操天天曰天天射| 亲子乱AV-区二区三区| 日韩成人无码| 日本乱子人伦在线视频| 成人视频网| 色色亚洲视频| 婷婷五月色| 色玖玖| 久久六月天| 色99视频| 久久婷婷91| 一丁香五月天月AV| 六月合五月婷| 亚洲色五月天| 天天五月天综合网址| 天天做天天爱天天玩夜夜爽| 午夜色丁香| www夜夜操wwwcon| 色综合性视频| 久久精品亚洲热| 激情综合另类| 婷婷一本和五月丁香| 丁香五月另类小说在线阅读| 26uuuavcom| 丁香久久AV| 深爱五月天婷综合| 婷婷娱乐丁香综合网| 天色综合网站| 洗浴中心操B视频| 99热免费精品| 婷婷五月天激情电影| 激情五月天伊人影院| 婷婷五月花西瓜| 99热大片| 热99在线精品| 久久婷.com| 成人片在线播放| 噜噜噜噜婷婷五月天| 97碰在线| 丁香五月综合| 能看的av片| 日撸夜撸日操| 免费观看大片视频 丁香婷婷 六月欧美| 丁香六月婷婷综合缴| 色色热| 色播婷婷五月天| 激情综合网五月激情| 亚洲色婷婷五月天| 黄色视频网站在线播放| ady狠狠入| 五月婷婷久久久久| 久久黄A片| 五月天婷婷在线观看精品男人| 国产人妻人伦精品一区二区| 99热最新网址| 狠狠综合区| 99久久婷婷国产综合| 99热这只有| 五月婷婷色色| 色色色综合网| 色婷婷操逼| 99久久精品国产色欲| 久久久99久久| 国产69久久久欧美黑人A片| 日日操天堂| www.色九月| 五月天无码| 激情合网婷婷| 婷婷五月,偷窥偷拍网| 色狠狠999综合| 97碰在线视频| 亚洲天堂九九九| 久久 婷婷 五月天| 99热久久最新地址| 99∨VTV| www.天天日| 人人插操| 色三级色三级| 色欲五月婷婷| 日韩久久视频| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 强壮的公次次弄得我高潮A片日本 | 欧美日韩成卜| 五月色婷婷中文字幕| 丁香五月婷婷六月婷| 狠狠干无码| 99精品视频在线观看| 超碰97在线观看免费| 亚洲视频五区| 色婷婷综合网站| 丁香婷婷网| 玖玖99婷婷| 久久98| 狠狠操婷婷| 大香蕉AV在线| 六月丁香天堂| 99热99网| 九月av| 天天揷综合网| 久久综合中文字幕| 99视频热| 五月丁香综合网| 色综合av超碰| 白天AV月月| 99在线精品视频| 丁香五月天天久久综合小说| 五月大香蕉| 丁香六月婷婷色XXXXX| 东京热免费视频| 啪啪六月婷婷| 婷婷色正月| 久久色午夜在线导航| 国产成人+综合亚洲+天堂| 色色色色色网站| www.色综合| 神马欧美精| 色综合久久88色综合中文字幕| 99热在线观看精品| 9精品一区| 五月色丁香婷婷中文字幕| 综合久久影院| 久久丁香婷婷五月| 狠狠搞亚洲| 久久五月视频| 日韩精品成人在线| 亚洲色色香蕉| 超PEN精品在线| 综合激情伊人影视在线| 97色色综合| 92久久精品一区二区| 久久性爱视频| 内射综合网| 日韩1区2区| 五月天综合久久丁香91| 99re思思久久| 五月天开心色色网| 色五月天天在线观看资源站| 久久久com| 久久九九国产| 9久久婷婷国产综合精品性色| 99热精品超碰| 精品人妻伦一二三区久久| 亚洲人成网站999久久久综合| 丁香六月无码| 九月婷婷综合在线| 在线综合网| 丁香婷婷综合影院| jiqingliuyuetian| 久久久潮喷-久久久九九-成人AV| 婷婷激情五月综合在线视频| 亚洲妇女熟BBW| WWW.五月天9999| 99精品在线播放| 五月天色色网站| www.91九色| 国产4P视频精品五区| 六月合五月婷| 婷婷丁香黄色| 久热免费视频| 九九99精品视频| 久久婷丁香五月| 久久99网址| 第四色婷婷丁香五月| aV直接看| 久久99热 这里有精品| 亚洲久久激情| www.激情五月天。com| 99热66| 丁香五月天天| 香蕉AV777XXX色综合一区| 色色五月婷| 婷婷娌伦网| 日本高清久| 婷婷六月丁香五月| www.色婷婷。com| 色综合久久久无码中文字幕999| 在线视频激情网站| 99热碰碰热| 天天爽夜夜爽夜夜爽精品| 婷婷五月天丁香| 激情亚洲婷婷六月| 五月综合丁| 久操人妻| 亚洲瑟瑟精品在线| 99草视频在线观看| 五月丁香在线观看| A色色| 五月婷婷色色网址| 97色色色色色| 成人性爱精品视频| 99狠狠色| 精品成人无码A片观看香草视频| 国语精品探花| 操操国产| 日韩在线观看网址| 丁香 久久| Xx色综合| 激情国产五月| 五月婷婷啪| 亚洲女婷婷五月基地综合久久久| 色色色婷婷| 婷婷久久大香蕉| 天天摸夜夜夜| 五月婷婷综合激情| 欧美A片在线视频免费观看| 婷婷成人五月天| 五月色亭丁香| 99久久久久久久| www色婷婷| 久久婷婷五月综合伊人| 久久婷婷五月天| 色www99| 五月丁香啪啪啪啪| 99久久精品网| 五月婷婷基地| 毛片蕉地一二| 无码人妻少妇色欲AV一区二区| 超碰1999| 四五月婷婷| 玖玖婷婷五月| 桃色五月婷婷| 色婷婷小说| 九九亚洲视频| 九九视频这里是精品五月| 丁香六月婷婷社区| 精品亚洲国产成AV人片传媒| 亚洲精品国产成人AV在线| 久久机只有这里精品| 97在线刺激| 久久久全国免费视频| 激情色色| 天天色天天日天天舔| 在线五月色播| 五月婷色色| 婷婷丁香五月天操逼| 国产成人综合网| 久人操| 亚洲婷婷乱乱丁香| 操操操www.com| 超碰人人操| 亚洲xx在线| 丁香五月自拍| 人人操日| 开心激情站| 丁香社区婷婷五月| 深夜婷婷五月丁香| 色九月| 国产性爱一级| 五月婷婷亚洲综合在线 | 丁香五月在线播放| www.99热在线观看| 直接看的av| 色999;丁香五月| 美女五月天婷婷| 99无码超碰| 久久日韩婷婷五月| 亚洲国产网址| 亚洲AV久久久久久久久久久久久久久久 | 这里只有精品视频99| 99在线视频免费| 新97人人上人人| 91色吧网| 五月婷婷综合性爱噜噜| 二区成人视频| 9色资源在线| 少妇人妻丰满做爰XXX| 五月丁香婷婷综合网| www.9797国产| 夜夜操天天干| 五月天久久综合婷婷丁香| 久久99久久99精品免视看婷婷| 思思视频久久| 五月婷丁香花| 香蕉久久国产AV一区二区| 九九re精品视频在线观看| 婷婷va| 国产色99| 97碰人人操| av在线免费网站| 日韩免费99| 很很色丁香久久停停| 69精品无码一区二区三区| 热99.com婷婷| 久久丁香九| 五月婷婷 自拍| 九色亚洲| 久久九九思思| 中文字幕精品推荐免费在线观| 日韩熟女啪啪视频| www.久操| 午夜日韩久久久网站| 久久国产高清| 伊人久久大香线蕉av一区| 91九色中文字幕女在线观看| 色色色婷| 中文字幕永久在线| 色之综合网| 婷婷五月 丁香六月| 九九视频精品这里只有| 亚洲综合五月天综合| 99热精品一区| m色激情网| 色吧五月婷婷| 九月婷婷色色| 狠狠五月天| 八戒青柠影视剧在线观看| 字幕网AV中文字幕| 中文字幕高清av| 亚洲精品网址| 超碰九九热| 超碰三级秋霞| 丁香五月激情站| 久久丁香五月婷婷| 婷婷五月六| 五月丁香久| 婷婷五月综合网| 欧美韩国日本| AV网在线观看| 国产ava| 都市激情蜜桃婷婷五月天| 婷婷六月激情啪啪| 五月天五月天激情网| 婷婷丁香六月| 婷婷爱五月| 五月激情四射网站| 综合色网站| 五月丁香美女视频| 丁香五月色情| 久久婷婷色综合| 婷婷久久久| 婷婷六月偷拍| 成人在线网| 婷婷综合成人五月天| www激情com| 99视频精品| 极品人妻VIDEOSSS人妻| 99色在线视频观看| 天天爽在线视频| 亚洲色综久久五月| 婷婷无码视频| 丁香五月综合网| 五月丁香自拍| 少妇口诉沐足视频播放器网址| 天天色视频| 婷婷欧美| 丁香五月激情啪啪啪| 激情五月天视频| 婷婷综合网站| 五月婷婷啪| 狠狠噪| 亚洲第一黄网| 久久久久人妻中文| 亚洲操操| 色色色五月| 青青草原中文字幕| 九九婷婷网五月天| 色婷婷五月天| 操人久久| 久久婷婷丁香六月天| 久久婷综合| 婷婷丁香五月天之开心少妇| 97操碰| 五月天婷婷在线观看| 这里只有精品1| www.久操| 激情综合网婷婷久久| 久色激情| 国产精女同一区二区三区久| 五月天激情小说| 成人五月天视频| 五月婷婷激情综合| 丁香九月综合| 婷婷日日夜夜| 人妻丰满精品一区二区A片| 1024成人在线观看| 五月婷婷开心亚州在线| 日本色婷婷| 一起草无码| 色播五月丁香| 伊人综合网站| 色婷婷久久| 丁香五月激情五月| 97碰碰九九视频| 99在线观看视频免费| 婷婷色操| 亚洲视频在线网| 五月婷无码| 亚洲99热| 国产综合视频婷婷| 久久婷婷五月天蜜桃| 99国产精品久久久久久久久久久| 91一起操| 超碰97免费在线| 婷婷五月欧美| 五月开心啪啪| 97色色网| 亚洲视99| 亚洲成人网站在线观看| 五月丁香婷婷啪啪综合| 第四色首页| 婷婷丁香熟女| 爱草视频在线| 免费看欧美成人A片无码| 欧美日朝成人| 五月丁香久久久久| 天天干,天天操,天天射| 五月婷婷激情久久| 超碰cap| 五月丁香亚洲综合网| 久久丁香| 色婷婷中文字母五月丁香| 国产熟女一区二区三区五月婷| 五月亭久久无码视频| 日本熟女内射| 国产乱轮一区二区三区| 五月天婷婷导航| 国产精品第一国产精品| 五月天婷婷网站| 国产毛片欧美毛片久久久| 亚洲五月丁香综合网| 久草五月天| 91久久久久久久久18| www.精品99| 碰碰女| 色综合久久88色综合天天看| 色 五月 天 婷婷 丁香 九月| 婷婷色情六月| 伊人影院久久网| 玖玖热视频| 人操人人| 五月天婷婷AV| 啪啪综合| 天天日夜夜拍| 日本女天天爽| 极品少妇高潮啪啪AV无码| 美女婷婷六月色| BBWCUCKOLD精品熟妇| 久久这里都是精品视频| 一级黄在线| 婷婷五月天成人综合网| 婷婷丁香五月综合久久| 99九九精品| 97碰碰电影| 久久人操| 久久这里只有国产| 免费视频WWW在线观看网站| 亚洲久久婷婷丁香五月天| 美女久久婷婷| 99热6这里只有精品| 丁香五月激情欧美| 婷婷五月天综合久久| 99视频久久| 国产成人网站在线观看| 亚洲色婷婷网站| 丁香激情综合| 婷婷五月天综合在线| 91ncm视频| 天天插天天日| 丁香五月激情澎湃一区| 国产人人操| 成人版视频在线观看| 五月丁香婷婷色色| 秋霞免费视频| 这里只精品热在线18| AV在线收看| 色婷婷av在线观看| 久久久久综合激动五月天| 亚洲婷婷性爱| 激情婷婷五月天| 99天堂网| 亚洲网在线观看| 婷婷五月六| 久久综合婷婷| 亚洲综合网在线| 久久综合五月天| 激情五月婷婷丁香六月| 搡BBBB搡BBB搡五十| 99国产视频网| 丁香大香蕉| 日本三级成人秘书精品片| 真实亲子乱子伦高清在线观看| 婷婷四色五月| 97caop| 天天人人人人人人人人人人人| 狠狠干五月天婷婷网| .青娱乐天天操B| 91视频综合网| 日本婷婷综合精品| 成人VAV视频在线观看| 五月综合久久| 人人操人人爱丁香五月| 97碰| 色婷婷六月| 婷婷色操| 五月丁香成人| 啪啪操操| 欧美人与性动交CCOO| 色色日本| 综合激情网五月激情| 一区二区aV电影免费看| 婷婷五月激情中文字幕| 色婷视频| 欧美成人无码高清一区二区三区| AV操一操| 欧美日韩99| 综合色色色| www.99热视频在线观看| 国内久久久精品99| 精品夜夜澡人妻无码AV| 在线成人视频免费| 五月丁激情| 激情婷婷久久| 亚洲九九99精品视频在线播放| 天天综合网91| 五月天激情视频网站| 久久视网36| 大香蕉啪啪啪啪啪啪| 99热精品在线| 久久久久婷| 欧美婷| 五月丁香色情| 91窝窝| 免费视频WWW在线观看网站| 五月久久婷婷天堂视频| 国产成人va在线| 婷婷久草| 在线看黄色| 伊人大综合| 丁香激情网| 99噜噜| 婷婷五月美女直播| 久久综合热17c| 久热黄色| 9精品一区| 超碰在线日夜| 思思热这里只有精品| 丁香五月成人| www,av好吊操| 丁香五月成人论坛| 91九色首页| 99久操| 九九综合网| 成人午夜天| 婷婷五月天色播| 色呦呦美女| 欧美成人色婷婷| 日日激情网| 高清激情av在线观看| 91操熟女| 91网站黄| 成人啪啪色婷婷久| 7777久久亚洲中文字幕| 亚洲国产精品VA在线看黑人| 日狠狠| 色婷婷久久综合| AA丁香综合激情| 99操逼| 色婷五月| 五月丁香九九九综合| 婷婷五月天成人娱乐| 色五月丁香五月| 99九九玖玖| 91丁香婷婷综合资源| 蜜乳AV成人| 99热最新国内| 成人综合视频网址| 91久久久久久久久久18| 亚洲无码99| 99九九久久| 丁香五月激情视频在线| 5月丁香婷婷| 五月激情五月丁香| 99 热| 99re热精品视频国| 99re热精品在线视频| 五月婷婷影院| 日韩影院三级| 九九热AV| 丁香五月婷婷激情小说| 五月大香蕉| 九九色逼| 亚洲色9| 天天五月香欧美| 五月天激情综合首页| 亚洲小视频免费观看| aaaaa不卡| 丁香五月婷婷性爱| 色色色综合视频| 婷婷美女精品视频| 色婷婷丁香五月高清在线| 亚洲激情无码久久| 91艹人| www.爱操com.| 五月天婷婷深深爱| 色狠狠综合| 久久免费婷婷视频| 嫩草乱码一区三区四区| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 99原创自拍视频在线观看| 日韩黄在免| 六月婷婷天堂| 91热手机在线| 婷婷操超碰| 婷婷色色网| 26uuu色噜噜精品一区| 五月婷婷六月丁香综合视频在线| www.狠狠色.com| 特级片神马电影| 五月花激情| 99啪99| 五月婷色| 狠狠色婷婷777| 亚洲V国产V欧美V久久久久久| 97亚洲视频在线| 久久久久久9热不雅视频| 奇米网大香蕉| 六月激情婷婷| 丁香五月视频在线观看| 天天日天天做天天操| 色色射| 4399在线日本A片| 久热久| 激情6月| 婷婷五月激情五月丁香五月| 久久婷婷五月综合激情国产| 99视频在线| 天天成人五月天| 色久五月天| 国产熟女一区二区三区五月婷| 婷婷五月天伊人网| 综合天堂AV久久久久久久| 五月婷九月| 五月色丁香| 亚洲欧洲色色| 91人人爽久久涩噜噜噜| 99热碰碰热| 欧美顶级少妇做爰HD| 99爱在线| 五月婷精品| 热的国产,热的综合,热的有码 | 99热精品在线| 色欲AVV| 六月婷婷综合激情| 丁香六月亚洲| 五月婷婷影| 激情欧美五月丁香| 九久久婷婷| 久操激情| 婷婷五月天视频小说| 久久久天天啊| 色婷婷成人| 热99一二三| 亭亭五月丁香综合欧美| 99精品无码网站| 五月 成人 婷婷| 风流少妇A片一区二区蜜桃| 亚洲狠狠婷婷| 欧美色播综合在线观看| www.五月天婷婷| 99综合| www.刺激色网站www.| 色五月丁香总合网| 久久狠狠干| 婷色五月| 婷婷五月中文字幕| 欧美激情xxxXX| 婷婷五月丁香色综合| 免费无码毛片一区二区A片| www热久久yy9| www.日日夜夜| 武则天精品久久| 久草婷婷在线| 九九亚洲视频| 久久久久er热| 久久久人妻| 热99精品视频| 天天热夜夜操| 天天爱天天做天天操| 激情av网| 激情婷婷丁香色五月综合| 国产激情av| 67194中文在线| 婷婷激情五月吧| 激情综合色婷婷啪啪六月天| 国产午夜成人免费看片无遮挡| 99ri久久| 久久婷婷五月综合色和| 欧美日韩91| 九九人人精品| 久久免费婷婷视频| 五月天婷婷色| 婷婷丁香97| 激情深爱综合网| 国产亚洲精品久久久久苍井松| 九九99九九99九九99视频网| 天天xxxxxx天天日| 五月天社区| 激情久久肏屄视频| 五月色色激情网| 无码激情AAAAA片-区区| 激情av| 99视频网址| 亚洲区1| 色婷婷色久综| 来吧亚洲综合网| 99精品久久久久久久| 色射婷婷五月天| 欧洲色区| 91人妻PORNY九色大屁股| 思思热在线视频精品| 日本久久九| 五月婷色丁香| 五月天综合网| 色999五月色| 99噜噜| 一本色道久久综合狠狠躁小说| www.亚洲激情| 中文成人在线| 丁香五月婷婷动漫| 色五月亚洲| 久久精品99| 久久久大香蕉| 九九99香蕉在线视频播放| 99热在线这里| 色五月综合网站| 丁香五月婷婷成人网| 亚州美女| 九九这里只这里只有精品| 亚州操人在线视频| 91热爆在线| 91精品久久久久| 婷婷综合色图| 爆乳熟妇一区二区三区爆乳照片| 国产AV不卡福利| 久色视频| 九月av在线| 久久九九热视频| 涩玖玖免费视频| 五月激情偷拍| 色99超碰| 五月天精品视频| 一区二区乱视频码| 丁香六月色婷婷| 色色色丁香| 97色色色色色| 日本在线wwww| 丁香五月人妻| 色婷婷激情五月天| 综合网啪| 婷婷网影院| 九九99九九99九九99视频网| 综合久久高清| 超碰97人人操| 日韩欧美颜射| 精品久久人妻| 日本熟女三区| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 婷婷深爱五月天在线| 日本人妻伦在线中文字幕| 99视频精品全部免费 在线| 国产一区二区av免费| 五月丁香婷婷伊人| 丁香五月激情五月| 色婷婷成人| 九九热re99re6在线精品| 丁香五月91| 久久婷婷五月天| 丁香五月社区| 激情综合婷婷| 99久久久精品| z色五月播播久久| 玖玖综合色| 亚洲精品亚洲人成人网| 97婷婷丁香五月天激情图片| 狠狠操狠狠色| 欧美成人性爱网| 国产精品日日躁夜夜躁| 婷婷综合网站| 三区激情四射av| 99爱操| 婷婷五月天综合AV| 丁香五月婷婷色| 97精品人人A片免费看| 伊人婷婷五月天av| 婷婷五月天丁香成人社区| 欧洲不卡视频| 色婷婷婷av| 五月天婷婷婷| 五月天婷婷久久| 亚洲人妻av| 97在线观视频免费观看| 99精品福利视频| 91色在线/日韩| 天天操天天插| 婷婷亚洲色| 区美毛片子| 丁香五月av| 亚洲99精品欧美一区| 久久99久久99精品免观看粉| 婷婷成人五月天| 五月激情五月婷婷五月天在线| 人人干女人| 91一起操| www.亭亭五月天| 99无码超碰| 成人精品视频99在线观看免费| 丁香六月色婷婷| 五月丁香啪啪啪| 色五月 婷婷, 大香蕉| 色爽九九| 久久激情综合| www.com色播五月天| 在线只有精品| 97色色在线视频| 久久五月天婷婷| 亚洲中文AV| 久久色情| 亚洲婷婷乱乱丁香| 久操福利| 婷婷五月天天| 日韩高清成人| 天天操,天天插| 激情六月丁香| 五月天丁香啪啪网| 91热在线| www五月天激情com| 六月婷婷激情| 99色嘟嘟精品网站| 婷婷五月天AV| 99成人免费热视频| 丁香五月亚洲激情婷婷射| 色拍九九九| 婷婷色五月天综合网| 色噜噜狠狠色综合成人网| 天天干,噜噜色,狠狠色| 六月婷色| 美女婷婷激情亚洲| 九九碰九九爱97| 91精品综合久久久久久五月丁香| 色综合色色| 97sese婷婷| 色九区| 激情五月六月| 影音先锋 91工厂| 热久国产| 久久日婷婷| 99热精品在线播放| 操九色| 四月婷婷丁香| aaaaaa片| 久久性操| 9 大屁股在线视频精品| 亚洲精品又粗又大又爽A片 | 四LLL少妇BBBB槡BBBB| 丁香五月情| 99色免费视频| a69在线视频| 9久久婷婷国产综合精品性色| 九热网站| 99热这里有精品| 另类专区在线观看| 色欲一二三| 五月婷婷无码专区| 免费视频舔| AV在线大香蕉| 久久aaaaa| 丁香婷婷天堂| 97人人射| 九九亚洲视频| 天天操夜夜操| 自拍盗摄 另类| 五月婷色丁香| 五月天婷婷一起草| 91九色|疯狂|高潮|对白|| 真实熟女-91九色| 麻豆AV一区二区三区| 日本三级日本三级99| 久久99婷婷| 国产成人高清| 婷婷五月综合体验看|