分析查詢語句:
如果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索引的常...