性能優化之MySQL優化
數據庫優化目的
避免出現頁面訪問錯誤
• 由於數據庫連接timeout產生頁面5xx錯誤
• 由於慢查詢造成頁面無法加載
• 由於阻塞造成數據無法提交
增加數據庫的穩定性
• 很多數據庫的問題都是由於低效的查詢引起的
優化用戶體驗
• 流暢頁面的訪問速度
• 良好的網站功能體驗
可以從幾個方面進行數據庫優化,以下將對4個方面逐一進行分析
• sql和索引,寫出健壯的sql,索引不是越多越好
• 數據表結構(存儲引擎,字段大小,字段類型,索引,第三規範)
• 系統配置(打開文件系統次數,文件安全性)
• 硬件,選擇最適合數據庫的cpu,更快的IO,更大的內存,cpu不是越多越好,IO並不能減少鎖的機制, 也就是不能減少阻塞,所以說硬件的優化成本最高,效果最差
1-1 MySQL慢查日誌的開啟方式和存儲格式
如何發現有問題的SQL?
使用MySQL慢查日誌對有效問題的SQL進行監控
• show variables like ‘%slow_query_log%‘
可查出兩條: slow_query_log ——查看是否開啟慢查日誌 ON開啟 OFF關閉
slow_query_log_file——日誌存儲位置
• set global slow_query_log = on 開啟慢查日誌
• show variables like ‘long_query_time‘ 什麽樣的SQL才會被記錄到慢日誌中由long_query_time控制,默認情況下為10秒,可以使用命令修改,也可以在my.cnf參數裏面修改。關於運 行時間正好等於long_query_time的情況,並不會被記錄下來。也就是說,在mysql源碼裏是判斷大於long_query_time,而非大於等於。如果我修改了變量long_query_time,但是查詢變量long_query_time的值還是10,難道沒有修改到呢?註意:使用命令 set global long_query_time=4修改後,需要重新連接或新開一個會話才能看到修改值。你用show variables like ‘long_query_time‘查看是當前會話的變量值,你也可以不用重新連接會話,而是用show global variables like ‘long_query_time‘
• set global log_queries_not_using_indexes = on 設置沒有索引的記錄到慢查詢日誌中
#使用set global slow_query_log=1開啟了慢查詢日誌只對當前數據庫生效,MySQL重啟後則會失效。如果要永久生效,就必須修改配置文件my.cnf(其它系統變量也是如此)
性能優化之MySQL優化