mysql優化前情提要

2021-10-01 14:33:30 字數 2778 閱讀 9750

分析查詢語句:

如果mysql的效能或者語句執行時間沒有達到你的預期,首先你得知道到底是哪條sql語句出了問題,不能把專案裡面的sql全部手動走一次再返回來分析吧,這樣從人力和時間上都不允許呦,所以,mysql自帶了一些功能可以幫助我們定位問題!!!

mysql開啟慢查詢日誌:

slow_query_log=on

long_query_time=3 #查詢時間多久以上

slow_query_log_file=/var/lib/mysql/slow-log.log

檢視mysql慢查詢開啟情況:

show variables like '%slow_query%';

檢視mysql慢查詢時間閾值:

show variables like 'long_query_time%';

注:慢查詢日誌包括被鎖阻塞的時間--->lock_time:~

例如:得到按照時間排序的前10條裡面含有左連線的查詢語句:

mysqldumpslow -s t -t 10 -g 「left join」 /var/log/mysql/slow.log(慢查詢日誌路徑)

-s:是表示按照何種方式排序 

c:訪問計數

l:鎖定時間

r:返回記錄

t:查詢時間

al:平均鎖定時間

ar:平均返回記錄數

at:平均查詢時間

-t:是top n的意思,即為返回前面多少條的資料

-g:後邊可以寫乙個正則匹配模式,大小寫不敏感的

wget

tar -xf percona-toolkit-3.0.11_x86_64.tar.gz

cd percona-toolkit-3.0.11

perl makefile.pl

make

make install

一般到這裡就結束了,如果出現了錯誤,請繼續

can't locate extutils/makemaker.pm in @inc 錯誤的解決方式:

yum install -y perl-extutils-cbuilder perl-extutils-makemaker

can't locate time/hires.pm in @inc 錯誤的解決方式:

yum install -y perl-time-hires

can't locate digest/md5.pm in @inc 錯誤的解決方式:

yum install perl-digest-md5.x86_64

語句:pt-query-digest /var/lib/mysql/localhost-slow.log

pt-query-digest語法及重要選項

pt-query-digest [options] [files] [dsn]

--create-review-table 當使用--review引數把分析結果輸出到表中時,如果沒有表就自動建立。

--create-history-table 當使用--history引數把分析結果輸出到表中時,如果沒有表就自動建立。

--filter 對輸入的慢查詢按指定的字串進行匹配過濾後再進行分析

--limit 限制輸出結果百分比或數量,預設值是20,即將最慢的20條語句輸出,如果是50%則按總響應時

間佔比從大到小排序,輸出到總和達到50%位置截止。

--host mysql伺服器位址

--user mysql使用者名稱

--password mysql使用者密碼

--history 將分析結果儲存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,

且查詢所在的時間區間和歷史表中的不同,則會記錄到資料表中,可以通過查詢同一checksum來比較某型別

查詢的歷史變化。

--review 將分析結果儲存到表中,這個分析只是對查詢條件進行引數化,乙個型別的查詢一條記錄,比較簡

單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到資料表中。

--output 分析結果輸出型別,值可以是report(標準分析報告)、slowlog(mysql slow log)、

json、json-anon,一般使用report,以便於閱讀。

--since 從什麼時間開始分析,值為字串,可以是指定的某個」yyyy-mm-dd [hh:mm:ss]」格式的時間

點,也可以是簡單的乙個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計。

--until 截止時間,配合—since可以分析一段時間內的慢查詢。

檢視當前session是否開啟profiling控制,預設是0 關閉狀態

select @@profiling;

開啟profile功能

set profiling=1; --1是開啟、0是關閉

檢視最近執行的sql語句以及執行時間

show profiles;

檢視最近一條的sql語句的執行詳情(查詢出來的字段,如果有乙個值特別大,就按值分析)

show profile;

定位一條sql語句的執行詳情:

show profile for query 序號;(此序號**於show profiles;的query_id )

mysql的優化 MySQL優化

一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...

mysql 隨機優化 mysql 優化

mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...