1. 程式人生 > >性能優化之MySQL優化

性能優化之MySQL優化

源碼 variable 必須 ble 存儲格式 using 結構 com 數據庫優化

數據庫優化目的

  避免出現頁面訪問錯誤

    • 由於數據庫連接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優化