SQL排查- 慢查詢日誌與分析資料庫海量資料
阿新 • • 發佈:2018-12-22
慢查詢日誌
用於記錄MYsql種響應時間超過閾值
開啟慢日誌
show variables ‘%slow_query-log%’
臨時開啟
set global slow_query_log = 1
關閉服務
永久開啟
/etc/my.cnf [mysqlD]
修改日誌
慢查詢閾值 ,臨時設定和永久設定,改完之後重新登入後生效,不需要重啟服務
long_query_time = 3
select sleep(4)休眠4秒
show global status like ‘%slow_queries%’
檢視慢查詢日誌檔案 cat …
自帶
mysqldumpslow --help 篩選,查詢慢日誌檔案(返回資料最多,訪問次數最多,包含左外連線)
分析資料庫海量資料(a,b)
a,模擬海量資料
儲存過程(無return)、儲存函式(有return)
需求:
產生隨機數,隨機字串
randstring(6) ->adacva 模擬名稱 字串從1開始
儲存函式:
delimiter $ --防止語義報錯--結束符號 create function randstring(n int) returns varchar(255) begin declare all_str varchar(100) default 'adadsadwfwvvwfwafafaf' declare return_str varchar(255) default ''; declare i int default 0; while i<n do set return_str = concat( return_str, substring( all_str , FLOOR(1+rand()*52) ,1 ) ); set i = i+1; end while; return return_str; end$
開啟了慢查詢日誌編寫儲存過程或者儲存函式就會報這個錯誤。
臨時解決和永久解決(設定引數變數和修改配置檔案)
create functuin ran_num() returns int(5)
begin
declare i int default 0;
set i = floor (rand()*100)l
return i;
end$
–通過儲存過程插入海量資料
create procedure insert_emp(in eid_start int(10),int data_time int(10)) begin declare i int default 0; set autocommit = 0; repeat insert into emp values(eid_start +i,randstring(5),'other',rutn_num()); set i = i+1; util i = data_times end repeat; end $
—呼叫儲存過程和函式實現模擬海量資料
call insert_num()
b,分析海量資料
(1)show profiles;–預設關閉
會記錄profiling開啟後的語句全部sql執行時間 duration代表總共花費的時間
(2)–精確分析:sql診斷
show profile all for query 第幾條
all 可以替換為你希望看見的關鍵部分時間花費
例如:cpu,等
(3)全域性查詢日誌:記錄開啟之後的全部sql語句(只在調優的時候開啟)
set gloobal general_log =1
set global log_output = ‘table’
會被記錄mysql.general_log表中
(分析) select * from mysql.general.log