mysql案例 關於drop的那點事

2022-03-20 16:47:06 字數 1222 閱讀 8920

1 關於中斷session操作

mysql如果在前台執行drop table操作,中斷了前台session 

1 經過我測試,會執行成功,但是mysql.err會記錄一些錯誤.而且刪除後確實可以建立同名表

2 中斷的時機不同,報錯的日誌可能不一樣

3 手動ctrl+c kill xshell斷開連線 這三者對於drop table 都一樣

4 記住任何前台操作一定要執行後台操作,不然會有危險,養成良好習慣

2 關於drop 大表

0 選擇在業務不繁忙的情況

1 rename table to table_new 這樣是為了將bf中的關於該錶的髒頁重新整理到磁碟中

2 ln table_new table_new.delete 建立linux硬鏈結

3 drop table

4 linux實現刪除表 利用truncate命令

truncate=/usr/local/bin/truncate

for i in `seq 2194 -1 1 `;

do sleep 2

$truncate -s $g /data/mysql/mytest/erp.ibd.hdlk

done

rm -rf /data/mysql/mytest/erp.ibd.hdlk 

3  drop 操作最新總結

可能觸發的動作 

1 ahi短時間內會釋放大量的記憶體

2 表的髒頁會重新整理到磁碟

3 針對ibd檔案會執行delete操作

可能的觀察引數

1 innodb_buffer_pool_pages_misc大量釋放,innodb_buffer_pool_pages_free值同時增長,釋放和增加的內容總量基本一致

2 在semaphores相關資訊中,可以看到hang死期間大量thread請求s-lock

可能導致問題

1 mysql thread hung

2 page cleaner 超時

總結drop table引起的mysql 短暫hang死的問題,是由於drop 一張使用ahi空間較大的表時,呼叫執行ahi的清理動作,會消耗較長時間,執行期間長時間持有dict_operation_lock的x鎖,阻塞了其他後台執行緒和使用者執行緒;

drop table執行結束鎖釋放,mysql積壓的使用者執行緒集中執行,出現了併發執行緒和連線數瞬間上公升的現象。規避問題的方法,可以考慮在drop table前關閉ahi。

關於GIL的案例

例1 import threading import time def run n print task n time.sleep 2 print task done n start time time.time for i in range 5 t threading.thread target ...

systemverilog中關於事件的那些事

說道systemverilog中的執行緒間通訊,不得不說一下事件 event 事件也就兩種 邊沿阻塞 e 和電平阻塞 wait e.triggered 1.事件通過 操作符來觸發事件,通過 或者wait等待事件的觸發。2.相當於verilog中的邊沿觸發,一定要先於 只在觸發的那一瞬間有效 而tri...

python 關於IF的使用案例

import math import random 練習1,判斷是否潤年 def fan year int input 你問我猜 if year 400 0 or year 4 0 and year 100 0 print 您輸入的年份 d 是潤年 year else print 您輸入的年份 d ...