婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談MySQL如何優(yōu)雅的做大表刪除

淺談MySQL如何優(yōu)雅的做大表刪除

熱門標簽:外呼系統(tǒng)打電話上限是多少 曲靖移動外呼系統(tǒng)公司 南昌三維地圖標注 武漢網(wǎng)絡外呼系統(tǒng)服務商 啥是企業(yè)400電話辦理 百應電話機器人優(yōu)勢 電話外呼系統(tǒng)改號 怎樣在地圖標注銷售區(qū)域 地圖標注費用是多少

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

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

  • 通過truncate直接刪除表中全部數(shù)據(jù)
  • 通過delete刪除表中滿足條件記錄

一、Truncate操作

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

1.1 MySQL truncate 都做了哪些操作?

  • truncate操作實際上分為drop、re-create兩步
  • drop操作的第一個階段,是對Buffer pool頁面進行清除的過程,將表相關的數(shù)據(jù)頁從flush鏈中刪除,而不需要做flush操作。該步驟的瓶頸點主要在于flush隊列的刪除操作必須持有對應buffer pool instance的鎖并進行遍歷搜索,如果buffer pool instance比較大且flush鏈中需要刪除的數(shù)據(jù)頁很多,該操作會導致其他事務在獲取buffer pool instance的鎖時被阻塞,從而影響數(shù)據(jù)庫的性能
  • drop操作的第二個階段,是刪除ibd磁盤文件的過程。刪除數(shù)據(jù)庫物理文件越大I/O資源消耗越大,刪除操作耗時越久
  • re-create操作階段,只要刪除表的.frm文件完好無損,在drop table之后就可以按照原表結(jié)構(gòu)信息進行重建,重建后表的auto_increment值會被重置

1.2 如何優(yōu)化truncate操作帶來的資源消耗?

  • 對于truncate操作中的drop表第一階段,當分配給MySQL實例的innodb_buffer_pool_size超過1GB時,合理的設置innodb_buffer_pool_instances參數(shù),提高并發(fā)的同時也變相的減少掃描buffer pool instance時鎖資源占用耗時
  • 對于truncate操作中的drop表第二階段,在刪除對應表之前,先對改表的.ibd文件創(chuàng)建一個硬連接,加快MySQL層面的drop操作執(zhí)行效率,減少對數(shù)據(jù)庫層面的性能損耗。后續(xù)手動對操作系統(tǒng)層面我們做的硬連接進行清理

二、Delete操作

2.1 MySQL delete 都做了哪些操作?

  • 根據(jù)where條件對刪除表進行索引/全表掃描,檢查是否符合where條件,該階段會對掃描中所有行進行加鎖。該階段是最大的資源消耗隱患,若表的數(shù)據(jù)量大且delete操作無法有效利用索引減少掃描數(shù)據(jù)量,該步驟對于數(shù)據(jù)庫帶來的鎖爭用、cpu/io資源的消耗都是巨大的
  • 對不能夠被where條件匹配的行施加的鎖會在條件檢查后予以釋放,InnoDB僅鎖定需要刪除的行。這可以有效地降低鎖爭用,但是我們?nèi)孕枰P注的一點是,一次性刪除大批量的數(shù)據(jù),該操作將會產(chǎn)生巨大的binlog事務日志,這對于MySQL自身以及主從架構(gòu)中的從庫都是不友好的,可能帶來叫的復制延遲。

2.2 如何優(yōu)化delete操作?

  • delete全表刪除操作需要謹慎,可考慮使用truncate操作
  • delete … where … 中,where過濾條件盡量保證可有效利用索引減少數(shù)據(jù)掃描量,避免全表掃描
  • 對于大批量數(shù)據(jù)刪除且where條件無索引的情況,delete操作可額外增加自增長主鍵或者含索引的時間字段,進行分批刪除操作,每次刪除少量數(shù)據(jù),分多批次執(zhí)行。
  • 對于保留近期數(shù)據(jù)刪除歷史數(shù)據(jù)的經(jīng)典場景,可創(chuàng)建同結(jié)構(gòu)的xxx_tmp表并通過insert xxx_tmp select …操作將需要的數(shù)據(jù)保留至tmp表中、然后通過rename操作將當前業(yè)務表xxx替換為xxx_bak表,xxx_tmp表替換為當前業(yè)務表名xxx,后續(xù)手動刪除無用的大表xxx_bak

2.3 delete常見的兩個場景

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

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

  • 查看當前表結(jié)構(gòu)中可有效利用的索引,盡量是表的自增長主鍵或者時間索引字段
  • 有效利用自增長主鍵索引或者時間索引,將delete操作添加索引字段的范圍過濾,每次刪除少量數(shù)據(jù),分多批次執(zhí)行。具體分批需要根據(jù)業(yè)務實際進行評估,避免一次性刪除大批量數(shù)據(jù)。
-- 利用自增長主鍵索引
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 保留近期數(shù)據(jù)刪除歷史數(shù)據(jù)

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

創(chuàng)建一張t1_tmp表用來臨時存儲需要保留的數(shù)據(jù)

create table t1_tmp like t1;

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

-- 根據(jù)實例業(yè)務數(shù)量進行分批,盡量每批次處理數(shù)據(jù)量不要太大
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';

-- 當前最后一批次數(shù)據(jù)先不操作
-- 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操作將當前業(yè)務表t1替換為t1_bak表,t1_tmp表替換為當前業(yè)務表名t1,被刪除表若有頻繁的DML操作,該步驟會造成短暫的業(yè)務訪問失敗

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

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

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操作步驟中,還有一點我們需要關注的是,變更表主鍵是自增長還是業(yè)務唯一的uuid,若為自增長主鍵,我們還需要注意修改t1_tmp表的自增長值,保證最終設置值包含變更期間數(shù)據(jù)寫入

alter table t1_tmp auto_increment={t1表當前auto值}+{變更期間預估增長值}

三、Truncate/Delete優(yōu)劣勢對比

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

到此這篇關于淺談MySQL如何優(yōu)雅的做大表刪除的文章就介紹到這了,更多相關MySQL 大表刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • mysql 大表批量刪除大量數(shù)據(jù)的實現(xiàn)方法
  • MySQL如何優(yōu)雅的刪除大表實例詳解
  • Innodb中mysql快速刪除2T的大表方法示例
  • MySQL 刪除大表的性能問題解決方案

標簽:錦州 資陽 隨州 吉林 甘南 荊州 黑河 滄州

巨人網(wǎng)絡通訊聲明:本文標題《淺談MySQL如何優(yōu)雅的做大表刪除》,本文關鍵詞  淺談,MySQL,如何,優(yōu)雅,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談MySQL如何優(yōu)雅的做大表刪除》相關的同類信息!
  • 本頁收集關于淺談MySQL如何優(yōu)雅的做大表刪除的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    在线观看免费一区| 福利91精品一区二区三区| 国产精品动漫网站| 国产精品国产自产拍高清av王其 | 久久婷婷色综合| 日韩精品自拍偷拍| 精品国产露脸精彩对白 | 一区二区视频免费在线观看| 成人欧美一区二区三区视频网页| 1区2区3区国产精品| 亚洲精品国产成人久久av盗摄| 亚洲美女淫视频| 午夜电影一区二区| 久久av资源网| 99热这里都是精品| 欧美午夜寂寞影院| 欧美xxxxxxxxx| 国产精品久久777777| 亚洲在线一区二区三区| 久久av资源网| proumb性欧美在线观看| 欧美日韩一区成人| 亚洲精品一区二区三区影院| 亚洲色欲色欲www| 天天综合色天天综合色h| 国产精品一品二品| 欧美制服丝袜第一页| 日韩欧美中文字幕精品| ...中文天堂在线一区| 午夜a成v人精品| 懂色av噜噜一区二区三区av| 欧美午夜寂寞影院| 久久久久久夜精品精品免费| 亚洲精选一二三| 韩国精品一区二区| 欧美另类一区二区三区| 国产日韩精品一区二区三区 | 国产欧美精品一区二区色综合| 一区二区在线观看不卡| 美国精品在线观看| 色婷婷亚洲精品| 久久美女艺术照精彩视频福利播放| 一区在线中文字幕| 精品一区二区综合| 欧美亚洲综合一区| 日韩一区在线看| 国产剧情一区二区三区| 91精品国产综合久久国产大片| 亚洲视频一二三| 国产电影一区在线| 337p粉嫩大胆噜噜噜噜噜91av| 一区二区三区四区视频精品免费| 国产成人综合在线观看| 日韩丝袜情趣美女图片| 亚洲成a人v欧美综合天堂下载| 不卡免费追剧大全电视剧网站| 精品国产成人在线影院| 免费成人美女在线观看.| 欧美三级在线播放| 亚洲午夜成aⅴ人片| 日本精品一级二级| 成人免费在线观看入口| 丁香啪啪综合成人亚洲小说| 久久婷婷色综合| 久久99精品久久久| 精品欧美一区二区在线观看| 美国十次了思思久久精品导航| 欧美精品123区| 日本不卡不码高清免费观看| 欧美丰满一区二区免费视频| 亚洲大片一区二区三区| 在线精品视频一区二区三四| 亚洲一区二区三区国产| 欧洲亚洲精品在线| 亚洲va欧美va人人爽午夜| 色偷偷久久一区二区三区| 亚洲欧美成aⅴ人在线观看| 色老综合老女人久久久| 洋洋成人永久网站入口| 色呦呦国产精品| 亚洲国产日韩av| 欧美日韩免费视频| 久久国内精品视频| 久久精品免费在线观看| 99久久精品免费精品国产| 亚洲美女视频在线| 欧美三级日韩三级| 捆绑调教一区二区三区| 国产三级精品三级在线专区| 91小视频在线免费看| 亚洲成av人片一区二区三区| 日韩视频免费观看高清完整版在线观看| 日本成人在线不卡视频| 久久久天堂av| 91在线丨porny丨国产| 亚洲成av人片一区二区| 久久久欧美精品sm网站| 成人高清视频在线| 天天色综合成人网| 国产欧美日韩另类视频免费观看| 欧美亚洲日本国产| 激情文学综合丁香| 曰韩精品一区二区| 国模冰冰炮一区二区| 国产成人综合在线| 亚洲精品菠萝久久久久久久| 在线精品视频免费观看| 免费成人在线观看视频| 国产精品福利av| 欧美情侣在线播放| 成人黄色综合网站| 美日韩黄色大片| 亚洲婷婷综合色高清在线| 欧美精品久久天天躁| 国产电影一区二区三区| 亚洲成年人影院| 国产精品久久久爽爽爽麻豆色哟哟 | 99久久精品情趣| 奇米色777欧美一区二区| 国产精品国产精品国产专区不片| 欧美高清性hdvideosex| 成人夜色视频网站在线观看| 三级精品在线观看| 一区二区在线观看免费视频播放| 欧美大尺度电影在线| 欧美日韩卡一卡二| 91日韩精品一区| 成人高清视频在线观看| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区影院| 亚洲欧洲美洲综合色网| 国产精品久久久久影院| 国产亚洲一本大道中文在线| 日韩精品在线一区| 91麻豆精品国产91久久久 | 日韩av电影免费观看高清完整版 | 国产亚洲婷婷免费| 欧美一区二区成人| 制服丝袜在线91| 制服丝袜在线91| 欧美日韩精品一二三区| 欧美三区免费完整视频在线观看| 日本丰满少妇一区二区三区| 97se亚洲国产综合在线| eeuss鲁片一区二区三区在线看| 国产福利精品一区| 成人动漫在线一区| 成人免费va视频| 国产成人鲁色资源国产91色综| 国产裸体歌舞团一区二区| 国产99精品视频| 成人av影视在线观看| aaa国产一区| 欧美四级电影网| 欧美麻豆精品久久久久久| 在线电影院国产精品| 91精品在线免费观看| 欧美电视剧在线观看完整版| 日韩欧美中文字幕一区| 欧美精品一区二区久久久| 精品免费国产二区三区| 国产欧美日韩亚州综合| 亚洲美女视频在线观看| 午夜精品福利在线| 麻豆一区二区99久久久久| 国产精品乡下勾搭老头1| 国产成人午夜视频| 在线亚洲精品福利网址导航| 欧美一区二区三区婷婷月色| 久久久综合视频| 亚洲精品v日韩精品| 免费观看一级欧美片| 成人午夜激情片| 欧美日韩午夜影院| 久久嫩草精品久久久精品一| 亚洲精品免费在线观看| 免费观看在线色综合| 不卡av免费在线观看| 91麻豆精品国产自产在线 | 综合中文字幕亚洲| 舔着乳尖日韩一区| 成人av电影在线| 欧美一区二区成人6969| 亚洲美女少妇撒尿| 国产在线精品一区二区三区不卡| 99re热视频这里只精品| 欧美一区三区二区| 亚洲欧美一区二区在线观看| 人人狠狠综合久久亚洲| 色婷婷精品久久二区二区蜜臀av| 日韩精品在线一区二区| 一区二区三区高清| 成人av午夜电影| 精品国产乱码久久久久久夜甘婷婷 | 波多野结衣91| 精品剧情v国产在线观看在线| 亚洲午夜免费视频| av中文字幕亚洲| 国产片一区二区| 久久aⅴ国产欧美74aaa|