前幾天有位同學碰到這樣乙個問題:之前執行良好的一段程式,由於最近資料量變大了,經常報取不到資料庫連線的錯誤。將問題的解決過程總結記錄下來:
首先,檢視資料庫配置的最大連線數,沒有發現任何配置問題
show variables like 'max_connections'
然後,在問題復現時段看了一下資料庫的執行狀態,發現有大量的執行query操作的連線,且耗時非常長
show processlist
對select語句進行分析,發現語句索引設計的有問題,查詢時全表掃瞄!重建索引問題解決
這裡重點說下,show processlist
如果是root使用者執行,能看到所有使用者的當前的連線狀態。如果是普通賬號,只能看到當前賬號占用的資料庫連線。show proccesslist只能列出前100條,如果想看全資料的話要使用 show full processlist。
另外,show processlist與下面語句等價
select * from information_schema.`processlist`
舉個例子,說明如何通過show processlist發現問題執行下面語句模擬占用資料庫連線2分鐘,然後執行show processlist
select sleep(120)
可以清晰的看到,每個資料連線執行的命令(command)、耗時(time)、狀態(state)及語句(info)
最後,分享一下資料庫日常開發的的心得
1.復用資料庫連線
2.優化sql及索引,如果資料量較大可以考慮資料分片(分庫分表)
3.優化**邏輯:
1)資料分頁,減少一次取出的資料量
2)減少資料庫的互動頻次,批量查詢、更新
排查php頁面的執行時間程式
經常會遇到乙個頁面開啟很久,但是到底是哪部分執行的時間長呢?那麼就按照下面的方法來排查吧。function thistime function spent a,b start1 array 起點 thistime k 0 for j 0 j 10000 j start1 array 寫了乙個1加到1...
mysql事件執行時間
mysql事件 每天凌晨呼叫儲存過程,儲存過程是向表裡增刪指定記錄 create definer root localhost event newevent on schedule every 1 day starts 2015 09 27 00 00 00 on completion preser...
mysql事件執行時間
mysql事件 每天凌晨呼叫儲存過程,儲存過程是向表裡增刪指定記錄 create definer root localhost event newevent on schedule every 1 day starts 2015 09 27 00 00 00 on completion preser...