對於效能優化的思路
下面針對著三個方面一次展開講解。
慢查詢如果不是指定需要優化某條sql語句,則需要使用慢查詢日值來查詢出查詢時間比較長的sql語句。
慢查詢的基本配置
slow_query_log 啟動停止慢查詢日誌
slow_query_log_file 指定慢查詢日值的儲存路徑及檔案
long_query_time 指定記錄慢查詢日值sql執行時間的閾值(單位:秒,預設10s)
log_queries_not_using_indexes 是否記錄未使用索引的sql
log_output 日誌存放的地方
配置了慢查詢後,它會記錄符合條件的sql,包括
慢查詢的開啟
mysql的慢查詢日誌功能,預設是關閉的,需要手動開啟。
臨時開啟慢查詢功能
--檢視是否開啟慢查詢功能
show variables like
'%slow_query_log%'
--開啟慢查詢與設定超時引數
setglobal slow_query_log=on;
setglobal long_query_time=
1;
永久開啟慢查詢功能
永久開啟慢查詢功能,需要修改/etc/my.cnf配置檔案,重啟mysql,這種永久生效
[mysqld]
slow_query_log =on
slow_query_log_file =/var/log/mysql/slow.log
long_query_time =1
執行計畫
執行計畫關注的點
id:id越大越先執行
type:
key:實際上使用的索引
extra:重要的資訊
根據執行計畫我們可以看到索引利用的情況,可以考慮是否新增索引,是否語句有問題導致索引失效。
show profile
檢視是否已經開啟show profile
show variables like 'profiling';
開啟show profile
set profiling = on;
執行幾條sql,以便於show profile的日誌分析
show profiles;
診斷sql
用於單獨分析某條sql,檢視某條sql的生命週期以及各占用多少時間。
show profile all
for query id;
#id 為show profiles 查出來的某條記錄的id
#引數說明
all--顯示所有的開銷資訊
block io--顯示塊io相關開銷
context switches--上下文切換開銷
cpu --顯示cpu相關開銷資訊
ipc --顯示傳送和接受相關開銷資訊
memory --顯示記憶體相關開銷資訊
page faults --顯示頁面錯誤相關開銷資訊
source --顯示和source_function,source_file,source_line相關開銷的資訊
swaps --顯示交換次數相關開銷資訊
日常開發需要注意的結論
如果show profile … for query id;出現如下四個,則必須優化這條sql
converting heap to myisam:查詢結果臺打,記憶體不夠用都往磁碟上搬了
creating tmp table :建立臨時表(拷貝資料到臨時表,用完在刪除)
copying to tmp table
ondisk:把記憶體中臨時表複製到磁碟,危險!!
locked
總結
以上的三個方法都是針對sql語句進行的優化,有的時候優化sql語句不能達到效果,這個時候我們要考慮從表結構,硬體(要區分是io密集型應用,還是cpu密集型應用),架構上讀寫分離,表分割槽,表的劃分,垂直分表,水平分表,等綜合考慮。
mysql效能優化 mysql效能優化
優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...
mysql的效能優化 mysql效能優化
檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...
mysql 效能優化 命令 mysql效能優化
發現問題 當發現程式執行比較慢的時候,首先排除物力資源問題之後,就將注意力轉向mysq資料庫 1 首先確定執行慢的sql語句 mysql show full processlist 2 確認低效的查詢 多次執行第一步發現time耗費大的sql語句。檢視耗費的時間。3 分析效能 為sql生成乙個執行計...