MySQL效能優化

2021-10-09 01:33:47 字數 2080 閱讀 6369

對於效能優化的思路

下面針對著三個方面一次展開講解。

慢查詢如果不是指定需要優化某條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生成乙個執行計...