一個MySQL 單表查詢SQL,引發一次「故事」

1、描述
故事的過程是這個樣子的,MySQL 數據庫有一張40多G的大表,開發人員執行了一個單表查詢,結果我就收到了一個磁盤空間滿的告警。一會兒就不淡定了,誰在搞事情,腦海裏各類可能行想了一遍,想到的最多的就是ibtmp1爆了,第一時間線上看一下,查到了最大的那個文件,結果和想的同樣。這裏咱們要看SQL是怎麼寫的,表結構是什麼樣子,而後和官網對比,MySQL在查詢的時候有不少可能會使用磁盤臨時表,包括錶鏈接、排序、大字段等等。mysql

2、解決方法
臨時解決方法:
一、臨時擴一下硬盤
二、直接重啓sql

終結解決方案
操做步驟:
一、檢查數據庫狀態
ps -ef|grep mysql數據庫

二、檢查主備庫狀態
show slave status \G;ide

三、檢查數據庫關閉參數,要求爲1
show variables like 'innodb_fast_shutdown';線程

四、關閉同步進程
stop slave;排序

五、關閉數據庫
shutdown;進程

六、設置數據庫臨時表空間參數
#/etc/my.cnf
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G開發

七、啓動數據庫服務、同步線程
mysqld_safe --defaults-file=/etc/my.cnf &
start slave;
show slave status\G;同步

八、檢查數據庫臨時表空間參數
show variables like 'innodb_temp_data_file_path';it

九、查看ibtmp1文件大小
du -sh ibtmp1

3、小潔一、永遠不要小視一條select xxx from tab;若是你不知道你在幹嗎,不知道其中的風險,不要在生產系統敲任何一個指令。二、要有敬畏之心。

相關文章
相關標籤/搜索