日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談MySQL如何優雅的做大表刪除

瀏覽:35日期:2023-10-04 11:32:28

隨著時間的推移或者業務量的增長,數據庫空間使用率也不斷的呈穩定上升狀態,當數據庫空間將要達到瓶頸的時候,可能我們才會發現數據庫有那么一兩張的超級大表!他們堆積了從業務開始到現在的全部數據,但是90%的數據都是沒有業務價值的,這時候該如何處理這些大表?

既然是沒有價值的數據,我們通常一般會選擇直接刪除或者歸檔后刪除兩種,對于數據刪除的操作方式來說又可分為兩大類:

通過truncate直接刪除表中全部數據 通過delete刪除表中滿足條件記錄一、Truncate操作

從邏輯意義上來講,truncate操作就是刪除表中所有記錄行,但是又與delete from table_name wehre 1=1這種操作不一樣。MySQL為了提高刪除整張表數據的性能,truncate操作其本質上其實是先drop table然后在re-create table。也真因如此,truncate操作是一個不可回滾的DDL操作。

1.1 MySQL truncate 都做了哪些操作? truncate操作實際上分為drop、re-create兩步 drop操作的第一個階段,是對Buffer pool頁面進行清除的過程,將表相關的數據頁從flush鏈中刪除,而不需要做flush操作。該步驟的瓶頸點主要在于flush隊列的刪除操作必須持有對應buffer pool instance的鎖并進行遍歷搜索,如果buffer pool instance比較大且flush鏈中需要刪除的數據頁很多,該操作會導致其他事務在獲取buffer pool instance的鎖時被阻塞,從而影響數據庫的性能 drop操作的第二個階段,是刪除ibd磁盤文件的過程。刪除數據庫物理文件越大I/O資源消耗越大,刪除操作耗時越久 re-create操作階段,只要刪除表的.frm文件完好無損,在drop table之后就可以按照原表結構信息進行重建,重建后表的auto_increment值會被重置1.2 如何優化truncate操作帶來的資源消耗? 對于truncate操作中的drop表第一階段,當分配給MySQL實例的innodb_buffer_pool_size超過1GB時,合理的設置innodb_buffer_pool_instances參數,提高并發的同時也變相的減少掃描buffer pool instance時鎖資源占用耗時 對于truncate操作中的drop表第二階段,在刪除對應表之前,先對改表的.ibd文件創建一個硬連接,加快MySQL層面的drop操作執行效率,減少對數據庫層面的性能損耗。后續手動對操作系統層面我們做的硬連接進行清理二、Delete操作2.1 MySQL delete 都做了哪些操作? 根據where條件對刪除表進行索引/全表掃描,檢查是否符合where條件,該階段會對掃描中所有行進行加鎖。該階段是最大的資源消耗隱患,若表的數據量大且delete操作無法有效利用索引減少掃描數據量,該步驟對于數據庫帶來的鎖爭用、cpu/io資源的消耗都是巨大的 對不能夠被where條件匹配的行施加的鎖會在條件檢查后予以釋放,InnoDB僅鎖定需要刪除的行。這可以有效地降低鎖爭用,但是我們仍需要關注的一點是,一次性刪除大批量的數據,該操作將會產生巨大的binlog事務日志,這對于MySQL自身以及主從架構中的從庫都是不友好的,可能帶來叫的復制延遲。2.2 如何優化delete操作? delete全表刪除操作需要謹慎,可考慮使用truncate操作 delete … where … 中,where過濾條件盡量保證可有效利用索引減少數據掃描量,避免全表掃描 對于大批量數據刪除且where條件無索引的情況,delete操作可額外增加自增長主鍵或者含索引的時間字段,進行分批刪除操作,每次刪除少量數據,分多批次執行。 對于保留近期數據刪除歷史數據的經典場景,可創建同結構的xxx_tmp表并通過insert xxx_tmp select …操作將需要的數據保留至tmp表中、然后通過rename操作將當前業務表xxx替換為xxx_bak表,xxx_tmp表替換為當前業務表名xxx,后續手動刪除無用的大表xxx_bak2.3 delete常見的兩個場景

2.3.1 delete where條件無有效索引過濾

比較常見的一個場景是,業務上需要刪除t1 condition1=xxx的值,condition字段無法有效利用索引,這種情況下我們通常的做法是:

查看當前表結構中可有效利用的索引,盡量是表的自增長主鍵或者時間索引字段 有效利用自增長主鍵索引或者時間索引,將delete操作添加索引字段的范圍過濾,每次刪除少量數據,分多批次執行。具體分批需要根據業務實際進行評估,避免一次性刪除大批量數據。

-- 利用自增長主鍵索引delete from t1 where condition1=xxx and id >=1 and id < 50000;delete from t1 where condition1=xxx and id >=50000 and id < 100000;-- 利用時間索引delete from t1 where condition1=xxx and create_time >= ’2021-01-01 00:00:00’ and create_time < ’2021-02-01 00:00:00’;delete from t1 where condition1=xxx and create_time >= ’2021-02-01 00:00:00’ and create_time < ’2021-03-01 00:00:00’;

2.3.2 保留近期數據刪除歷史數據

比較常見的一個場景是,需要僅保留t1表近3個月數據,其余歷史數據刪除,我們通常的做法是:

創建一張t1_tmp表用來臨時存儲需要保留的數據

create table t1_tmp like t1;

根據有索引的時間字段,分批次的將需要保留的數據寫入t1_tmp表中,該步驟需要注意的是,最后一批次時間的操作可暫時不處理

-- 根據實例業務數量進行分批,盡量每批次處理數據量不要太大insert into t1_tmp select * from t1 where create_time >= ’2021-01-01 00:00:00’ and create_time < ’2021-02-01 00:00:00’;insert into t1_tmp select * from t1 where create_time >= ’2021-02-01 00:00:00’ and create_time < ’2021-03-01 00:00:00’;-- 當前最后一批次數據先不操作-- insert into t1_tmp select * from t1 where create_time >= ’2021-03-01 00:00:00’ and create_time < ’2021-04-01 00:00:00’;

通過rename操作將當前業務表t1替換為t1_bak表,t1_tmp表替換為當前業務表名t1,被刪除表若有頻繁的DML操作,該步驟會造成短暫的業務訪問失敗

alter table t1 rename to t1_bak;alter table t1_tmp rename to t1;

將最后一批次數據寫入當前業務表,該步驟的目的是為了減少變更操作流程中的數據丟失

insert into t1 select * from t1_bak where create_time >= ’2021-03-01 00:00:00’ and create_time < ’2021-04-01 00:00:00’;

在rename操作步驟中,還有一點我們需要關注的是,變更表主鍵是自增長還是業務唯一的uuid,若為自增長主鍵,我們還需要注意修改t1_tmp表的自增長值,保證最終設置值包含變更期間數據寫入

alter table t1_tmp auto_increment={t1表當前auto值}+{變更期間預估增長值}三、Truncate/Delete優劣勢對比

操作類型 描述 優勢 劣勢 Truncate 表的全量刪除操作 無需掃描表數據,執行效率高,直接進行物理刪除,快速釋放空間占用 DDL操作無法進行回滾,無法按條件進行刪除 Delete 根據指定條件進行過濾刪除操作 可根據指定條件進行過濾刪除 刪除效率依賴where條件的編寫,大表刪除會產品大量的binlog且刪除效率低,刪除操作可能出現較多的碎片空間而不是直接釋放空間占用

到此這篇關于淺談MySQL如何優雅的做大表刪除的文章就介紹到這了,更多相關MySQL 大表刪除內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产模特精品视频久久久久| 一区二区91| 国产精品欧美一区二区三区不卡| 日韩不卡免费视频| 国产精品15p| 久久免费高清| 狠狠干成人综合网| 亚洲伊人影院| 国产精品久久免费视频| 国产一区国产二区国产三区| 视频小说一区二区| 亚洲区第一页| 麻豆视频在线观看免费网站黄| 午夜精品久久久久久久久久蜜桃| 国产亚洲午夜| 国产精品theporn| 亚洲精品99| 国产日韩亚洲| 免费久久久久久久久| 欧美一级全黄| 欧美一区二区性| 久久精品97| 亚洲第一区色| 国产午夜精品一区在线观看| 日韩亚洲一区在线| 日韩激情啪啪| 亚洲二区视频| 欧美精品国产一区| 99久精品视频在线观看视频| 日本少妇精品亚洲第一区| 国产成人精品福利| 亚洲九九精品| 久久久精品网| 国产人成精品一区二区三| 成人午夜国产| 国产精品片aa在线观看| 亚洲综合日本| 首页国产精品| 日韩精品一区二区三区中文在线| 国产超碰精品| 欧美激情麻豆| 最新亚洲国产| 91精品国产成人观看| 欧美视频久久| 久久av一区| 蜜桃视频在线网站| 国产精品极品| 一区二区不卡| 亚洲精品网址| 岛国精品一区| 国产乱码精品| 一区二区高清| 91精品观看| 欧美二三四区| 久久尤物视频| 国产探花一区二区| 亚洲丝袜美腿一区| 成人av二区| 性欧美videohd高精| 麻豆成人在线观看| 日本不卡视频在线观看| 久久成人亚洲| 国内精品99| 中文在线资源| 精品美女久久| 国产精品久久| 国产欧美午夜| 日韩1区2区日韩1区2区| 亚洲人成毛片在线播放女女| 亚洲五月婷婷| 日韩国产网站| 欧美天堂视频| 激情综合五月| 精品国产不卡一区二区| 国产调教精品| 国产欧美在线观看免费| 日本三级亚洲精品| 亚洲精品日本| 国产精品毛片| 在线综合欧美| 国产精品日韩| 夜久久久久久| 国产色综合网| 乱人伦精品视频在线观看| 欧美日韩国产综合网| 国产综合婷婷| 一区二区视频欧美| 日韩视频一区| 亚洲专区一区| 视频一区二区中文字幕| 国产精品免费看| 中文亚洲免费| 蜜臀久久久久久久| 蜜桃av一区二区三区电影| 亚洲一区二区三区在线免费| 日韩专区欧美专区| 在线精品一区| 欧美日韩一区二区三区不卡视频| 日韩高清电影一区| 国产九一精品| 激情中国色综合| 久久久久久久久丰满| 免费不卡中文字幕在线| 亚洲激情二区| 亚洲精品伊人| 久久av导航| sm捆绑调教国产免费网站在线观看| 在线手机中文字幕| 九九综合在线| 鲁大师成人一区二区三区| 五月国产精品| 嫩草伊人久久精品少妇av杨幂| 精品三区视频| 欧美日韩激情| 亚洲免费观看高清完整版在线观| 欧美亚洲综合视频| 激情久久99| 亚洲精品99| 日韩va欧美va亚洲va久久| 久久影院一区二区三区| 日韩在线短视频| 91久久亚洲| 91亚洲精品视频在线观看| 九九久久国产| 激情六月综合| 综合一区在线| 免费亚洲婷婷| 伊人精品一区| 日韩在线观看中文字幕| 麻豆成人综合网| 欧美日韩国产免费观看视频| 日韩在线网址| 精品国产三区在线| 欧美精品一线| 国产精品久久久网站| 日韩视频网站在线观看| 模特精品在线| 美女视频一区在线观看| 久久高清免费| 日韩av字幕| 亚洲欧洲高清| 一区二区国产在线观看| 九九99久久精品在免费线bt| 五月精品视频| 国产精品调教| 一区免费在线| 免费在线欧美黄色| 亚洲一区二区三区高清不卡| 国产精品一区二区99| 免费视频一区三区| 国产精品第一| 欧美日韩国产探花| 久久99久久久精品欧美| 合欧美一区二区三区| 国产精品hd| 国产精品日韩久久久| 精品国产一区二| 1024精品久久久久久久久| 国产精品欧美在线观看| 欧美精品激情| 精品黄色一级片| 亚洲毛片在线免费| 日韩一区二区三区免费| 日韩精品导航| 欧美日韩国产传媒| 国模精品一区| 天海翼亚洲一区二区三区| 桃色一区二区| 国产精品久久| 麻豆久久精品| 久久精品影视| 卡一卡二国产精品| 中文字幕av亚洲精品一部二部| 欧美aa在线观看| 久久xxx视频| 亚洲日本国产| av一区二区高清| 亚洲国产成人二区| 日本三级亚洲精品| 丝袜美腿高跟呻吟高潮一区| 中文在线а√天堂| 美日韩一区二区三区| 日韩欧美中文字幕一区二区三区| 久久国产直播| 国产一区二区三区成人欧美日韩在线观看| 综合激情五月婷婷| 欧美日韩一二| 亚洲综合在线电影| 精品久久久久中文字幕小说| 欧美午夜网站| 婷婷视频一区二区三区| 国产视频久久| 欧美日韩高清| 欧美色图一区| 蜜桃av.网站在线观看| 91日韩欧美| 美女精品久久| 国产乱码精品一区二区三区亚洲人| 视频一区日韩精品| 亚洲另类av|