MySQL SQL性能分析 Profiling Using Performance Schema

MySQL一直以來(lái)提供show profile命令來(lái)獲取某一條SQL執(zhí)行過(guò)程中的資源使用與耗時(shí)情況瘟裸,這個(gè)命令對(duì)于分析具體SQL的性能瓶頸有非常大的幫助客叉,但是這個(gè)功能在MySQL新的版本里將會(huì)被廢棄,取而代之的是使用Performance Schema來(lái)提供同樣的功能话告。本文將介紹如何使用Performance Schema來(lái)實(shí)現(xiàn)show profile SQL性能分析的功能兼搏。

原文地址:
https://mytecdb.com/blogDetail.php?id=79

1. 測(cè)試環(huán)境配置

  • 測(cè)試版本:MySQL 5.7.19
  • 配置參數(shù):performance_schema=ON,該參數(shù)配置在my.cnf文件中超棺,生效需要重啟MySQL向族。

2. 配置performance_schema

2.1 配置表setup_actors

默認(rèn)情況下,performance_schema功能打開(kāi)后棠绘,將會(huì)收集所有用戶的SQL執(zhí)行歷史事件件相,因?yàn)槭占男畔⑻啵瑢?duì)數(shù)據(jù)庫(kù)整體性能有一定影響氧苍,而且也不利于排查指定SQL的性能問(wèn)題夜矗,因此需要修改setup_actors表的配置,只收集特定用戶的歷史事件信息让虐。setup_actors表配置如下:

mysql> select * from performance_schema.setup_actors;
+-----------+------+------+---------+---------+
| HOST      | USER | ROLE | ENABLED | HISTORY |
+-----------+------+------+---------+---------+
| %         | %    | %    | NO      | NO      |
| localhost | root | %    | YES     | YES     |
+-----------+------+------+---------+---------+
2 rows in set (0.00 sec)

只收集本地root用戶的SQL執(zhí)行歷史事件紊撕。

2.2 配置表setup_instruments

啟用statement和stage監(jiān)視器。

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE '%statement/%';

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE '%stage/%';
2.3 配置表setup_consumers

啟用events_statements_*赡突,events_stages_* 開(kāi)頭的事件類型消費(fèi)对扶。

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_statements_%';

UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%events_stages_%';

3. 收集具體SQL的性能分析

3.1 執(zhí)行業(yè)務(wù)SQL

在上述配置完成之后,執(zhí)行一個(gè)需要分析的業(yè)務(wù)SQL惭缰,比如:
select * from blog;

3.2 獲取業(yè)務(wù)SQL的事件ID

通過(guò)以下SQL先查詢事件ID浪南。

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%blog%';
+----------+----------+-------------------------+
| EVENT_ID | Duration | SQL_TEXT                |
+----------+----------+-------------------------+
|      243 | 0.002698 | select * from blog.blog |
+----------+----------+-------------------------+
1 row in set (0.00 sec)
3.3 根據(jù)事件ID,獲取各階段執(zhí)行耗時(shí)

根據(jù)上一步獲取的事件ID(EVENT_ID)漱受,查詢?cè)揝QL各個(gè)階段的耗時(shí)情況络凿。如下:

SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=243;
+--------------------------------+----------+
| Stage                          | Duration |
+--------------------------------+----------+
| stage/sql/starting             | 0.000117 |
| stage/sql/checking permissions | 0.000010 |
| stage/sql/Opening tables       | 0.000031 |
| stage/sql/init                 | 0.000055 |
| stage/sql/System lock          | 0.000024 |
| stage/sql/optimizing           | 0.000003 |
| stage/sql/statistics           | 0.000020 |
| stage/sql/preparing            | 0.000015 |
| stage/sql/executing            | 0.000001 |
| stage/sql/Sending data         | 0.002321 |
| stage/sql/end                  | 0.000004 |
| stage/sql/query end            | 0.000019 |
| stage/sql/closing tables       | 0.000018 |
| stage/sql/freeing items        | 0.000048 |
| stage/sql/cleaning up          | 0.000001 |
+--------------------------------+----------+
15 rows in set (0.00 sec)

上述結(jié)果與show profile的輸出結(jié)果類似,能夠看到每個(gè)階段的耗時(shí)情況昂羡。相對(duì)于show profile來(lái)說(shuō)絮记,似乎更加繁瑣,不過(guò)performance schema是MySQL未來(lái)性能分析的趨勢(shì)虐先,提供了非常豐富的性能診斷工具怨愤,熟悉performance schema的使用將有助于更好的優(yōu)化MySQL。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛹批,一起剝皮案震驚了整個(gè)濱河市憔四,隨后出現(xiàn)的幾起案子膀息,更是在濱河造成了極大的恐慌,老刑警劉巖了赵,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異甸赃,居然都是意外死亡柿汛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門埠对,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)络断,“玉大人,你說(shuō)我怎么就攤上這事项玛∶脖浚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵襟沮,是天一觀的道長(zhǎng)锥惋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)开伏,這世上最難降的妖魔是什么膀跌? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮固灵,結(jié)果婚禮上捅伤,老公的妹妹穿的比我還像新娘。我一直安慰自己巫玻,他們只是感情好丛忆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著仍秤,像睡著了一般熄诡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徒扶,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天粮彤,我揣著相機(jī)與錄音,去河邊找鬼姜骡。 笑死导坟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的圈澈。 我是一名探鬼主播惫周,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼康栈!你這毒婦竟也來(lái)了递递?” 一聲冷哼從身側(cè)響起喷橙,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎登舞,沒(méi)想到半個(gè)月后贰逾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菠秒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年疙剑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片践叠。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡言缤,死狀恐怖荆忍,靈堂內(nèi)的尸體忽然破棺而出岔帽,到底是詐尸還是另有隱情,我是刑警寧澤今艺,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布弄捕,位于F島的核電站僻孝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏察藐。R本人自食惡果不足惜皮璧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望分飞。 院中可真熱鬧悴务,春花似錦、人聲如沸譬猫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)染服。三九已至别洪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柳刮,已是汗流浹背挖垛。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秉颗,地道東北人痢毒。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚕甥,于是被迫代替她去往敵國(guó)和親哪替。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 目錄結(jié)構(gòu) 22.1 performance Schema 快速入門 22.2 Performance Schema...
    daos閱讀 3,506評(píng)論 0 0
  • 1.A simple master-to-slave replication is currently being...
    Kevin關(guān)大大閱讀 5,966評(píng)論 0 3
  • 最近項(xiàng)目開(kāi)發(fā)中菇怀,我負(fù)責(zé)給數(shù)據(jù)庫(kù)加索引凭舶。Mysql提供了豐富的索引類型晌块,主要是B樹(shù)索引(前綴索引、復(fù)合索引)帅霜,Has...
    孫闊閱讀 416評(píng)論 0 2
  • 利用 Explain和Profiling來(lái)優(yōu)化 1.Explain MySQL Query Optimizer(即...
    _風(fēng)吹葉落_閱讀 458評(píng)論 0 0
  • 什么是數(shù)據(jù)庫(kù)匆背? 數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫(kù)具有一個(gè)或多個(gè)不同的API身冀,用于創(chuàng)建靠汁,訪問(wèn),管理...
    chen_000閱讀 4,035評(píng)論 0 19