性能優(yōu)化-慢查詢?nèi)罩?/h1>

性能優(yōu)化:減少或者消除那些對獲得查詢結(jié)果來說不必要的工作

程序性能瓶頸可能有很多因素

①、外部資源章喉,比如調(diào)用了外部的WEB服務或者搜索引擎。

②身坐、應用需要處理大量的數(shù)據(jù)秸脱,比如分析一個超大的XML文件。

③部蛇、在循環(huán)中執(zhí)行昂貴的操作摊唇,比如濫用正則表達式。

④涯鲁、使用了低效率算法等巷查。


MySQL查詢進行性能剖析有兩種方式:

1.剖析整個數(shù)據(jù)庫服務器,這樣可以分析出哪些查詢是主要的壓力來源抹腿。

2.定位具體需要優(yōu)化的查詢后岛请,可以對這些查詢進行單獨的剖析,分析哪些子任務是影響時間的主要消耗者警绩。


慢查詢?nèi)罩?/b>

#是否開啟慢查詢?nèi)罩荆?/on表示開啟崇败,0/off表示關閉。

show VARIABLES like 'slow_query_log';

#未使用索引的查詢也被記錄到慢查詢?nèi)罩局校琽n表示開啟后室,off表示關閉(默認值)缩膝。

show VARIABLES like 'log_queries_not_using_indexes';

#慢查詢閾值(秒級),當查詢時間大于設定的閾值時岸霹,記錄日志疾层。

show VARIABLES like 'long_query_time';

#慢查詢?nèi)罩敬鎯β窂?/b>

show variables like 'slow_query_log_file';


set global slow_query_log = on;

set global log_queries_not_using_indexes = on;

set global long_query_time = 0;


pt-query-digest

第一部分:總體統(tǒng)計結(jié)果


Exec time:執(zhí)行時間

Lock time:鎖定時間

Rows sent:發(fā)送行數(shù)

Rows examine:掃描行數(shù)

Query size:查詢字符數(shù)


第二部分:查詢分組統(tǒng)計結(jié)果

Rank:所有語句的排名,默認按查詢時間降序排列松申,通過--order-by指定

Query ID:語句的ID云芦,(去掉空格和查詢條件中的文本值,計算hash值)

Response:總的響應時間

time:該查詢在本次分析中總的時間占比

calls:執(zhí)行次數(shù)贸桶,即本次分析總共有多少條這種類型的查詢語句

R/Call:平均每次執(zhí)行的響應時間

V/M:方差均值比(Variance-to-mean)舅逸,也就是常說的離差指數(shù)。

Item:查詢對象

第三部分:每一種查詢的詳細統(tǒng)計結(jié)果

查詢各項數(shù)據(jù)的百分比皇筛、總數(shù)琉历、最小、最大水醋、平均旗笔、95%等各項目的統(tǒng)計,包括SQL執(zhí)行次數(shù)拄踪、執(zhí)行時間蝇恶、鎖占用時間、發(fā)送行數(shù)惶桐、掃描行數(shù)撮弧、查詢字符數(shù),表格中也統(tǒng)計了查詢涉及的數(shù)據(jù)庫姚糊、查詢時間直方圖等信息贿衍。


掃描的行數(shù)(Rows Examine)遠遠大于發(fā)送的行數(shù)(Rows sent) , 有問題, 需要優(yōu)化救恨, 索引利用差

Query_time distribution:查詢時間分布圖——————直方圖



哪些SQL需要優(yōu)化:

??????????? 1.查詢次數(shù)多贸辈,且每次查詢占用時間長的SQL:通常為pt-query-digest分析的前幾個查詢

??????????? 2.IO大的SQL:注意pt-query-digest分析中的Rows examine

??????????? 3.未使用索引的SQL:通過pt-query-digest分析中的Rows examine與Rows Send對比

剖析單條查詢

使用SHOW PROFILE

#開啟:

SET profiling = 1;

#查看開啟工具后的每條SQL執(zhí)行總體情況

SHOW PROFILES;

#根據(jù)query_id查看某個查詢的詳細時間耗費

SHOW PROFILE FOR QUERY 1;

#查看cpu、IO等信息

SHOW PROFILE BLOCK IO,CPU FOR QUERY 1;

#對每一個子任務的花費時間進行已統(tǒng)計排序

SELECT state, SUM(duration) AS Total_R,

? ROUND(100 *SUM(duration) / (SELECT SUM(duration) FROM information_schema.profiling WHEREquery_id = 1), 2) AS Pct_R,

? COUNT(*) as Calls,SUM(duration) /COUNT(*) AS "R/Call"

? FROMinformation_schema.profiling

WHERE query_id = 1 GROUP BY state ORDER BY total_r DESC;


Creating sort index:當前的SELECT中需要用到臨時表在進行ORDER BY排序肠槽。建議:創(chuàng)建適當?shù)乃饕?/b>

Sending data:發(fā)送數(shù)據(jù)

table lock:表鎖擎淤。

System lock:系統(tǒng)鎖。建議確認是由于哪個鎖引起的秸仙,通常是因為MySQL或InnoDB內(nèi)核級的鎖引起的

Sorting result:結(jié)果的排序

copying to tmp table:將數(shù)據(jù)復制到臨時表

Creating tmp table:創(chuàng)建臨時表


執(zhí)行計劃:Explain

table:對應的表

type:連接類型(system揉燃、const、eq_ref筋栋、ref、range正驻、index弊攘、all)

possible_keys:可能使用的索引

key:實際使用的索引

key_len:使用索引長度

rows:預計掃描行數(shù)

Extra:解析查詢的額外信息(using index抢腐、using where、using temporary襟交、using filesort)


連接類型(type

#all? 全表掃描

explain select * from address;

#index 全索引掃描

explain select city_id from address;

#range?? < >??? in()?between?? 根據(jù)索引范圍查找

explain select * from address where city_id>2;

#ref? 根據(jù)索引 查詢匹配某個值的行

explain select * from address where city_id=200;

#eq_ref

explain select a.* from store a INNER JOIN address b using(address_id)where b.address='47 MySakila Drive';

#const

explain select * from address where address_id=1;


MySQL解析額外信息(Extra

1迈倍、Using index:列數(shù)據(jù)僅僅使用了索引中的信息而沒有讀取實際的表(不回表

Select address_idfrom address where address_id=1

2、Using where:MySQL服務器將在存儲引擎檢索行后捣域,通過Where子句條件進行過濾

Select * fromaddress where city_id>12;

3啼染、Using temporary:MYSQL需要創(chuàng)建一個臨時表來存儲結(jié)果,用于排序

Select DISTINCTdistrict from address;

4焕梅、Using filesort:MySQL將對結(jié)果進行外部排序

Select * fromaddress??order by district;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末迹鹅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贞言,更是在濱河造成了極大的恐慌斜棚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件该窗,死亡現(xiàn)場離奇詭異弟蚀,居然都是意外死亡,警方通過查閱死者的電腦和手機酗失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門义钉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人规肴,你說我怎么就攤上這事捶闸。” “怎么了奏纪?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵鉴嗤,是天一觀的道長。 經(jīng)常有香客問我序调,道長醉锅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任发绢,我火速辦了婚禮硬耍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘边酒。我一直安慰自己经柴,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布墩朦。 她就那樣靜靜地躺著坯认,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牛哺,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天陋气,我揣著相機與錄音,去河邊找鬼引润。 笑死巩趁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的淳附。 我是一名探鬼主播议慰,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奴曙!你這毒婦竟也來了别凹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缆毁,失蹤者是張志新(化名)和其女友劉穎番川,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脊框,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡颁督,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浇雹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沉御。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昭灵,靈堂內(nèi)的尸體忽然破棺而出吠裆,到底是詐尸還是另有隱情,我是刑警寧澤烂完,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布试疙,位于F島的核電站,受9級特大地震影響抠蚣,放射性物質(zhì)發(fā)生泄漏祝旷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一嘶窄、第九天 我趴在偏房一處隱蔽的房頂上張望怀跛。 院中可真熱鬧,春花似錦柄冲、人聲如沸吻谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漓拾。三九已至阁最,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骇两,已是汗流浹背闽撤。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脯颜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓贩据,卻偏偏與公主長得像栋操,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饱亮,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容