您好,登錄后才能下訂單哦!
下文內容主要給大家帶來MySQL管理出現長時間執行原因解析,這里所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
1. 出現長時間執行的查詢的原因
由于SQL執行效率差而導致的長時間查詢:
由于被SQL注入而導致的長時間查詢:
由于DDL語句引起表元數據鎖等待:
2. 長時間執行的查詢帶來的問題
通常來說,除非是BI/報表類查詢,否則長時間執行的查詢對于應用缺乏意義。
消耗系統資源,比如大量長時間查詢可能會引起 CPU、IOPS 和/或 連接數 使用率過高等問題。
帶來系統不穩定的隱患(比如 InnoDB 引擎表上的長時間查詢可能會導致 ibdata1 系統文件尺寸的增加)
3. 如何避免長時間執行的查詢
應用方面應注意增加防止 SQL 注入的保護。
在新功能模塊上線前,進行壓力測試,避免出現執行效率很差的 SQL 大量執行的情況。
盡量在業務低峰期進行索引創建刪除、表結構修改、表維護和表刪除操作。
4. 如何處理長時間執行的查詢
a、通過命令 show processlist; 查看當前執行會話,Kill會話長時間查詢。
b、創建事件自動清理長時間執行的查詢
create event my_long_running_query_monitor on schedule every 5 minute starts '2018-08-08 11:00:00' on completion preserve enable do begin declare v_sql varchar(500); declare no_more_long_running_query integer default 0; declare c_tid cursor for select concat ('kill ',id,';') from information_schema.processlist where time >= 3600 and user = substring(current_user(),1,instr(current_user(),'@')-1) and command not in ('sleep') and state not like ('waiting for table%lock'); declare continue handler for not found set no_more_long_running_query=1; open c_tid; repeat fetch c_tid into v_sql; set @v_sql=v_sql; prepare stmt from @v_sql; execute stmt; deallocate prepare stmt; until no_more_long_running_query end repeat; close c_tid; end;
對于以上關于MySQL管理出現長時間執行原因解析,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。