您好,登錄后才能下訂單哦!
一個系統中數據庫往往會成為性能瓶頸,在開發階段更多考慮的可能是功能的完成,隨著系統的投入使用,數據量越來越大,sql語句查詢速度慢的問題就會被凸顯出來。
對于一個有sql語句性能為題的系統,如何找出問題,解決問題,就是下面要探討的內容:
1.???? 查看sql執行頻率:
Mysql客戶端連接成功以后,通過show [session|global] status命令可以提供服務器狀態信息,show session status顯示當前連接的統計結果,show global status顯示自數據庫上次啟動至今的統計結果,如果不寫默認參數是session.
我們關心的信息可以通過下面這個語句獲取到
Show status like ‘com_______’;(com后面是六個下劃線作為占位符)
它可以查詢出com開頭的信息。這查詢的是當前連接的統計結果,如果想查全局可以使用:
Show global status like ‘com______’;
? ?
Com_**指的是相應語句執行的次數,它會對所有存儲引擎的表操作進行統計,有幾個數據比較重要:
Com_select 執行查詢的次數,每次查詢累加1
Com_insert 執行插入操作的次數,沒插入一條數據累加1,批量插入也累加1
Com_update 執行更新操作的次數
Com_delete 執行刪除操作的次數
?
show status like ‘Innodb_rows_%’;
這個命令可以顯示針對Innodb存儲引擎的信息
?
?
?
Innodb_rows_read:select查詢返回的行數,
Innodb_rows_inserted 插入的條數
Innodb_rows_updated 更新的條數
Innodb_rows_deleted刪除的條數
Connections:試圖連接MySql服務器的次數
Uptime:服務器工作時間
Show_queries:慢查詢的次數
?
通過這兩個命令我們可以看到當前系統是查詢占主要地位還是插入占主要地位,為我們的后續優化提供一個方向
?
?
2.??? 定位低效率的sql:
可以通過兩種方法來定位低效率的sql
1)??? 慢查詢日志,可以通過慢查詢日志來定位到那些執行速度慢的sql語句,但是慢查詢日志是在查詢結束之后再記錄,并不能實時反映sql語句執行的狀態。
2)??? show processlist:通過這個命令可以實時的看到當前mysql在執行的線程,包括線程的執行狀態,可以看到sql語句執行的狀態
?
Id:用戶登錄時系統分配的連接id
User:顯示當前登錄用戶,這個命令只顯示當前登錄用戶權限范圍內的sql語句
Host:? 顯示這個sql語句是由哪個ip的哪個端口發出的。
Db:顯示這個進程連接的是哪個數據庫
Command:顯示當前連接執行的是什么命令,一般有休眠(Sleep),查詢(Query),連接(Connection)等
Time:顯示這個狀態持續的時間,單位是秒
State:顯示當前sql語句執行狀態,比如查詢語句可能經過如下狀態:copying to tmp table、sorting result、sending data
Info:顯示這個sql語句,通過它可以判斷問題
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。