中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么drop掉mysql庫中的1TB表單

發布時間:2022-02-19 15:29:43 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么drop掉mysql庫中的1TB表單”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么drop掉mysql庫中的1TB表單”文章能幫助大家解決問題。

1、清除Buffer Pool緩沖

drop table時,innodb引擎會清理該表在每個buffer pool實例中中對應的數據塊頁面,為了避免對系統的影響,這里的清除操作并不是真正的flush,而是將涉及到的頁面從flush隊列中摘除。但在摘除過程中,刪除進程會持有每個buffer pool的全局鎖,然后搜索這個buffer pool里對應的頁面以便從flush list中刪除。如果在buffer pool中需要被搜索并刪除的頁面過多,那么遍歷時間就會增大,這就導致了其他事務操作被阻塞,嚴重時可導致數據庫鎖住。

(推薦課程:MySQL教程)

在這里還需要注意一件事情,如果數據庫的buffer pool設置的很大,就會導致遍歷時間變長 清理buffer pool時,還包含清理AHI包含此表的數據,AHI的功能在這里就不多說了,主要是當b+tree的層級變高時,為避免b+tree逐層搜索,AHI能根據某個檢索條件,直接查詢到對應的數據頁,跳過逐層定位的步驟。其次AHI會占用 1/16 的buffer pool的大小,如果線上表數據不是特別大,不是超高并發,不建議將開啟AHI,可以考慮關閉AHI功能

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';
+----------------------------+-------+
| Variable_name                   | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | ON    |
+----------------------------+-------+
1 row in set (0.01 sec)


mysql> SET GLOBAL innodb_adaptive_hash_index=OFF;
Query OK, 0 rows affected (0.00 sec)


mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_adaptive_hash_index';
+----------------------------+-------+
| Variable_name                   | Value |
+----------------------------+-------+
| innodb_adaptive_hash_index | OFF   |
+----------------------------+-------+
1 row in set (0.01 sec)

2、刪除對應的磁盤數據文件ibd

在刪除數據文件時,如果數據文件過大,刪除過程會產生大量的IO并耗費更多的時間,造成磁盤IO開銷飆升,CPU負載過高,影響其他程序運行。我的一個好伙伴,就曾在線上庫刪除了一張 1TB 大小的表,結果20分鐘,數據庫無響應,最后庫崩潰,重啟了。

既然知道drop table做了2件事情,那就針對以上 2 個事情進行優化

在清除Buffer Pool緩沖上,為減少當個buffer pool的大小,可以合理設置innodb_buffer_pool_instances參數,減少buffer pool數據塊列表掃描時間,同時關閉AHI功能

在步驟2上,可以巧妙的利用linux的硬連接特性,延遲刪除真正的物理文件。

當多個文件名同時指向同一個INODE時,這個INODE的引用數 N>1, 刪除其中任何一個文件名都會很快.因為其直接的物理文件塊沒有被刪除.只是刪除了一個指針而已;當INODE的引用數 N=1 時, 刪除文件需要去把這個文件相關的所有數據塊清除,所以會比較耗時;

如果給數據庫表的.ibd文件創建一個硬鏈接,當刪除表時,刪除物理文件時,其實刪除的就是物理文件的一個指針,所以刪除操作響應速度會非常快,大約不到1秒左右

下面就來演示一下具體的操作

先創建表文件的硬鏈接
ln t_test.ibd t_test.ibd.bak
刪除表
drop table t_test;

最后就是要真正刪除掉物理文件,釋放文件所占用的磁盤空間,那么問題來了,如果優雅的刪除物理文件呢,在這里推薦大家coreutils工具集中的truncate命令

當然需要你先安裝相關的軟件包

wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.29.tar.xz


使用非root進行解壓
tar -xvJf coreutils-8.29.tar.xz
cd coreutils-8.29
./configure
make
使用root進行make install

安裝好之后,就可以寫一個腳本,非常優雅的分布刪除大文件,${i}G 表示,每次刪除 10G

#!/bin/bash


TRUNCATE=/usr/local/bin/truncate
for i in `seq 2194 -10 10 `; 
do 
  sleep 2
  $TRUNCATE -s ${i}G /data/mysql/t_test.ibd.hdlk 
done
rm -rf /data/mysql/t_test.ibd.hdlk ;

關于“怎么drop掉mysql庫中的1TB表單”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝阳县| 尚志市| 墨竹工卡县| 谢通门县| 黄浦区| 湖口县| 上犹县| 肥西县| 合肥市| 赣州市| 昔阳县| 洛隆县| 阜新市| 吴旗县| 旌德县| 凌云县| 厦门市| 万宁市| 库车县| 邻水| 达拉特旗| 西丰县| 阜平县| 南皮县| 阿拉善左旗| 天台县| 离岛区| 日土县| 南康市| 建德市| 陵水| 古丈县| 阜新市| 岚皋县| 集贤县| 贡嘎县| 库伦旗| 衡山县| 合山市| 葫芦岛市| 吉木乃县|