国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

自制小工具大大加速M(fèi)ySQL SQL語(yǔ)句優(yōu)化(附源碼)

Hujiawei / 3742人閱讀

摘要:如果語(yǔ)句中使用了子查詢集合操作臨時(shí)表等情況,會(huì)給列帶來(lái)很大的復(fù)雜性。會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表里。查詢優(yōu)化器從中所選擇使用的索引。該字段顯示了查詢優(yōu)化器通過系統(tǒng)收集的統(tǒng)計(jì)信息估算出來(lái)的結(jié)果集記錄條數(shù)。

引言

優(yōu)化SQL,是DBA常見的工作之一。如何高效、快速地優(yōu)化一條語(yǔ)句,是每個(gè)DBA經(jīng)常要面對(duì)的一個(gè)問題。在日常的優(yōu)化工作中,我發(fā)現(xiàn)有很多操作是在優(yōu)化過程中必不可少的步驟。然而這些步驟重復(fù)性的執(zhí)行,又會(huì)耗費(fèi)DBA很多精力。于是萌發(fā)了自己編寫小工具,提高優(yōu)化效率的想法。

那選擇何種語(yǔ)言來(lái)開發(fā)工具呢?

對(duì)于一名DBA來(lái)說,掌握一門語(yǔ)言配合自己的工作是非常必要的。相對(duì)于shell的簡(jiǎn)單、perl的飄逸,Python是一種嚴(yán)謹(jǐn)?shù)母呒?jí)語(yǔ)言。其具備上手快、語(yǔ)法簡(jiǎn)單、擴(kuò)展豐富、跨平臺(tái)等多種優(yōu)點(diǎn)。很多人把它稱為一種“膠水”語(yǔ)言,通過大量豐富的類庫(kù)、模塊,可以快速搭建出自己需要的工具。

于是乎,這個(gè)小工具就成了我學(xué)習(xí)Python的第一個(gè)作業(yè),我把它稱之為“MySQL語(yǔ)句優(yōu)化輔助工具”。而且從此以后,我深深愛上了Python,并開發(fā)了很多數(shù)據(jù)庫(kù)相關(guān)的小工具,以后有機(jī)會(huì)介紹給大家。

一、優(yōu)化手段、步驟

下面在介紹工具使用之前,首先說明下MySQL中語(yǔ)句優(yōu)化常用的手段、方法及需要注意的問題。這也是大家在日常手工優(yōu)化中,需要了解掌握的。

1、執(zhí)行計(jì)劃 — EXPLAIN命令

執(zhí)行計(jì)劃是語(yǔ)句優(yōu)化的主要切入點(diǎn),通過執(zhí)行計(jì)劃的判讀了解語(yǔ)句的執(zhí)行過程。在執(zhí)行計(jì)劃生成方面,MySQL與Oracle明顯不同,它不會(huì)緩存執(zhí)行計(jì)劃,每次都執(zhí)行“硬解析”。查看執(zhí)行計(jì)劃的方法,就是使用EXPLAIN命令。

1)基本用法

EXPLAIN QUERY

當(dāng)在一個(gè)Select語(yǔ)句前使用關(guān)鍵字EXPLAIN時(shí),MySQL會(huì)解釋了即將如何運(yùn)行該Select語(yǔ)句,它顯示了表如何連接、連接的順序等信息。

EXPLAIN EXTENDED QUERY

當(dāng)使用EXTENDED關(guān)鍵字時(shí),EXPLAIN產(chǎn)生附加信息,可以用SHOW WARNINGS瀏覽。該信息顯示優(yōu)化器限定SELECT語(yǔ)句中的表和列名,重寫并且執(zhí)行優(yōu)化規(guī)則后SELECT語(yǔ)句是什么樣子,并且還可能包括優(yōu)化過程的其它注解。在MySQL5.0及更新的版本里都可以使用,在MySQL5.1里它有額外增加了一個(gè)過濾列(filtered)。

EXPLAIN PARTITIONS QUERY

顯示的是查詢要訪問的數(shù)據(jù)分片——如果有分片的話。它只能在MySQL5.1及更新的版本里使用。

EXPLAIN FORMAT=JSON (5.6新特性)

另一個(gè)格式顯示執(zhí)行計(jì)劃。可以看到諸如表間關(guān)聯(lián)方式等信息。

2)輸出字段

下面說明一下EXPLAIN輸出的字段含義,并由此學(xué)習(xí)如何判斷一個(gè)執(zhí)行計(jì)劃。

id

MySQL選定的執(zhí)行計(jì)劃中查詢的序列號(hào)。如果語(yǔ)句里沒有子查詢等情況,那么整個(gè)輸出里就只有一個(gè)SELECT,這樣一來(lái)每一行在這個(gè)列上都會(huì)顯示一個(gè)1。如果語(yǔ)句中使用了子查詢、集合操作、臨時(shí)表等情況,會(huì)給ID列帶來(lái)很大的復(fù)雜性。如上例中,WHERE部分使用了子查詢,其id=2的行表示一個(gè)關(guān)聯(lián)子查詢。

select_type

語(yǔ)句所使用的查詢類型。是簡(jiǎn)單SELECT還是復(fù)雜SELECT(如果是后者,顯示它屬于哪一種復(fù)雜類型)。常用有以下幾種標(biāo)記類型。

DEPENDENT SUBQUERY

子查詢內(nèi)層的第一個(gè)SELECT,依賴于外部查詢的結(jié)果集。

DEPENDENT UNION

子查詢中的UNION,且為UNION中從第二個(gè)SELECT開始的后面所有SELECT,同樣依賴于外部查詢的結(jié)果集。

PRIMARY

子查詢中的最外層查詢,注意并不是主鍵查詢。

SIMPLE

除子查詢或UNION之外的其他查詢。

SUBQUERY

子查詢內(nèi)層查詢的第一個(gè)SELECT,結(jié)果不依賴于外部查詢結(jié)果集。

UNCACHEABLE SUBQUERY

結(jié)果集無(wú)法緩存的子查詢。

UNION

UNION語(yǔ)句中的第二個(gè)SELECT開始后面的所有SELECT,第一個(gè)SELECT為PRIMARY。

UNION RESULT

UNION中的合并結(jié)果。從UNION臨時(shí)表獲取結(jié)果的SELECT。

DERIVED

衍生表查詢(FROM子句中的子查詢)。MySQL會(huì)遞歸執(zhí)行這些子查詢,把結(jié)果放在臨時(shí)表里。在內(nèi)部,服務(wù)器就把當(dāng)做一個(gè)"衍生表"那樣來(lái)引用,因?yàn)榕R時(shí)表就是源自子查詢。

table

這一步所訪問的數(shù)據(jù)庫(kù)中表的名稱或者SQL語(yǔ)句指定的一個(gè)別名表。這個(gè)值可能是表名、表的別名或者一個(gè)為查詢產(chǎn)生的臨時(shí)表的標(biāo)識(shí)符,如派生表、子查詢或集合。

type

表的訪問方式。以下列出了各種不同類型的表連接,依次是從最好的到最差的。

system

系統(tǒng)表,表只有一行記錄。這是const表連接類型的一個(gè)特例。

const

讀常量,最多只有一行匹配的記錄。由于只有一行記錄,優(yōu)化程序里該行記錄的字段值可以被當(dāng)作是一個(gè)恒定值。const用于在和PRIMARY KEY或UNIQUE索引中有固定值比較的情形。

eq_ref

最多只會(huì)有一條匹配結(jié)果,一般是通過主鍵或唯一鍵索引來(lái)訪問。從該表中會(huì)有一行記錄被讀取出來(lái)以和從前一個(gè)表中讀取出來(lái)的記錄做聯(lián)合。與const類型不同的是,這是最好的連接類型。它用在索引所有部分都用于做連接并且這個(gè)索引是一個(gè)PRIMARY KEY或UNIQUE類型。eq_ref可以用于在進(jìn)行"="做比較時(shí)檢索字段。比較的值可以是固定值或者是表達(dá)式,表達(dá)示中可以使用表里的字段,它們?cè)谧x表之前已經(jīng)準(zhǔn)備好了。

ref

JOIN語(yǔ)句中驅(qū)動(dòng)表索引引用的查詢。該表中所有符合檢索值的記錄都會(huì)被取出來(lái)和從上一個(gè)表中取出來(lái)的記錄作聯(lián)合。ref用于連接程序使用鍵的最左前綴或者是該鍵不是PRIMARY KEY或UNIQUE索引(換句話說,就是連接程序無(wú)法根據(jù)鍵值只取得一條記錄)的情況。當(dāng)根據(jù)鍵值只查詢到少數(shù)幾條匹配的記錄時(shí),這就是一個(gè)不錯(cuò)的連接類型。ref還可以用于檢索字段使用"="操作符來(lái)比較的時(shí)候。

ref_or_null

與ref的唯一區(qū)別就是在使用索引引用的查詢之外再增加一個(gè)空值的查詢。這種連接類型類似ref,不同的是MySQL會(huì)在檢索的時(shí)候額外的搜索包含NULL值的記錄。這種連接類型的優(yōu)化是從MySQL 4.1.1開始的,它經(jīng)常用于子查詢。

index_merge

查詢中同時(shí)使用兩個(gè)(或更多)索引,然后對(duì)索引結(jié)果進(jìn)行合并(merge),再讀取表數(shù)據(jù)。這種連接類型意味著使用了Index Merge優(yōu)化方法。

unique_subquery

子查詢中的返回結(jié)果字段組合是主鍵或唯一約束。

index_subquery

子查詢中的返回結(jié)果字段組合是一個(gè)索引(或索引組合),但不是一個(gè)主鍵或唯一索引。這種連接類型類似unique_subquery。它用子查詢來(lái)代替IN,不過它用于在子查詢中沒有唯一索引的情況下。

range

索引范圍掃描。只有在給定范圍的記錄才會(huì)被取出來(lái),利用索引來(lái)取得一條記錄。

index

全索引掃描。連接類型跟ALL一樣,不同的是它只掃描索引樹。它通常會(huì)比ALL快點(diǎn),因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小。MySQL在查詢的字段知識(shí)多帶帶的索引的一部分的情況下使用這種連接類型。

fulltext

全文索引掃描。

all

全表掃描。

possible_keys

該字段是指MySQL在搜索表記錄時(shí)可能使用哪個(gè)索引。如果沒有任何索引可以使用,就會(huì)顯示為null。

key

查詢優(yōu)化器從possible_keys中所選擇使用的索引。key字段顯示了MySQL實(shí)際上要用的索引。當(dāng)沒有任何索引被用到的時(shí)候,這個(gè)字段的值就是NULL。

key_len

被選中使用索引的索引鍵長(zhǎng)度。key_len字段顯示了MySQL使用索引的長(zhǎng)度。當(dāng)key字段的值為NULL時(shí),索引的長(zhǎng)度就是NULL。

ref

列出是通過常量,還是某個(gè)表的某個(gè)字段來(lái)過濾的。ref字段顯示了哪些字段或者常量被用來(lái)和key配合從表中查詢記錄出來(lái)。

rows

該字段顯示了查詢優(yōu)化器通過系統(tǒng)收集的統(tǒng)計(jì)信息估算出來(lái)的結(jié)果集記錄條數(shù)。

Extra

該字段顯示了查詢中MySQL的附加信息。

filtered

這個(gè)列式在MySQL5.1里新加進(jìn)去的,當(dāng)使用EXPLAIN EXTENDED時(shí)才會(huì)出現(xiàn)。它顯示的是針對(duì)表里符合某個(gè)條件(WHERE子句或聯(lián)接條件)的記錄數(shù)的百分比所作的一個(gè)悲觀估算。

3) SQL改寫

EXPLAIN除了可以顯示執(zhí)行計(jì)劃外,還可以顯示SQL改寫。所謂SQL改寫,是指MySQL在對(duì)SQL語(yǔ)句進(jìn)行優(yōu)化前,會(huì)基于一些原則進(jìn)行語(yǔ)句的改寫,以方便后面的優(yōu)化器進(jìn)行優(yōu)化生成更優(yōu)的執(zhí)行計(jì)劃。該功能是通過EXPLAIN EXTENDED+SHOW WARNINGS配合使用。下面通過示例說明一下。

從上面示例中,可看到原有語(yǔ)句中的IN子查詢被改寫成為表間關(guān)聯(lián)的方式。

2、統(tǒng)計(jì)信息

查看統(tǒng)計(jì)信息也是優(yōu)化語(yǔ)句中必不可少的一步。通過統(tǒng)計(jì)信息可以快速了解對(duì)象的存儲(chǔ)特征如何。下面說明主要的兩類統(tǒng)計(jì)信息——表、索引。

1) 表統(tǒng)計(jì)信息 — SHOW TABLE STATUS

Name:表名

Engine:表的存儲(chǔ)引擎類型(ISAM、MyISAM或InnoDB)

Row_format:行存儲(chǔ)格式(Fixed-固定的、Dynamic-動(dòng)態(tài)的或Compressed-壓縮的)

Rows:行數(shù)量。在某些存儲(chǔ)引擎中,例如MyISAM和ISAM他們存儲(chǔ)了精確的記錄數(shù)。不過其他存儲(chǔ)引擎中,它可能只是近似值。

Avg_row_length:平均行長(zhǎng)度。

Data_length:數(shù)據(jù)文件的長(zhǎng)度。

Max_data_length:數(shù)據(jù)文件的最大長(zhǎng)度。

Index_length:索引文件的長(zhǎng)度。

Data_free:已分配但未使用了字節(jié)數(shù)。

Auto_increment:下一個(gè)autoincrement(自動(dòng)加1)值。

Create_time:表被創(chuàng)造的時(shí)間。

Update_time:數(shù)據(jù)文件最后更新的時(shí)間。

Check_time:最后對(duì)表運(yùn)行一個(gè)檢查的時(shí)間。執(zhí)行mysqlcheck命令后更新,僅對(duì)MyISAM有效。

Create_options:額外留給CREATE TABLE的選項(xiàng)。

Comment:當(dāng)創(chuàng)造表時(shí),使用的注釋(或?yàn)槭裁碝ySQL不能存取表信息的一些信息)。

Version:數(shù)據(jù)表的".frm"文件版本號(hào)。

Collation:表的字符集和校正字符集。

Checksum:實(shí)時(shí)的校驗(yàn)和值(如果有的話)。

3、索引統(tǒng)計(jì)信息 — SHOW INDEX

Table:表名。

Non_unique:0,如果索引不能包含重復(fù)。

Key_name:索引名

Seq_in_index:索引中的列順序號(hào),從1開始。

Column_name:列名。

Collation:列怎樣在索引中被排序。在MySQL中,這可以有值A(chǔ)(升序)或NULL(不排序)。

Cardinality:索引中唯一值的數(shù)量。

Sub_part:如果列只是部分被索引,索引字符的數(shù)量。當(dāng)整個(gè)字段都做索引了,那么它的值是NULL。

Packed:表示鍵值是如何壓縮的,NULL表示沒有壓縮。

Null:當(dāng)字段包括NULL的記錄是YES,它的值為,反之則是""。

Index_type:使用了哪種索引算法(有BTREE、FULLTEXT、HASH、RTREE)。

Comment:備注。

系統(tǒng)參數(shù):系統(tǒng)參數(shù)也會(huì)影響語(yǔ)句的執(zhí)行效率。查看系統(tǒng)參數(shù),可使用SHOW VARIABLES命令。

1) 參數(shù)說明

系統(tǒng)參數(shù)很多,下面介紹幾個(gè)。

sort_buffer_size

排序區(qū)大小。其大小直接影響排序使用的算法。如果系統(tǒng)中排序都比較大、內(nèi)存充足且并發(fā)量不是很大的情況,可以適當(dāng)增加此參數(shù)。這個(gè)參數(shù)是針對(duì)單個(gè)Thead的。

join_buffer_size

Join操作使用內(nèi)存區(qū)域大小。只有當(dāng)Join是ALL、index、range或index_merge時(shí)使用到Join Buffer。如果join語(yǔ)句較多,可以適當(dāng)增大join_buffer_size。需要注意到是,這個(gè)值針對(duì)單個(gè)Thread。每個(gè)Thread都會(huì)自己創(chuàng)建獨(dú)立的Buffer,而不是整個(gè)系統(tǒng)共享的Buffer,不要設(shè)置過大而造成系統(tǒng)內(nèi)存不足。

tmp_table_size

如果內(nèi)存內(nèi)的臨時(shí)表超過該值,MySQL自動(dòng)將它轉(zhuǎn)換為硬盤上的MyISAM表。如果執(zhí)行許多高級(jí)GROUP BY查詢并且有大量?jī)?nèi)存,則可以增加tmp_table_size的值。

read_buffer_size

讀查詢操作所能使用的緩沖區(qū)大小。這個(gè)參數(shù)是針對(duì)單個(gè)Thead的。

4、優(yōu)化器開關(guān)

在MySQL中,還有一些參數(shù)是可以用來(lái)控制優(yōu)化器行為的。

1) 參數(shù)說明

optimizer_search_depth

這個(gè)參數(shù)控制優(yōu)化器在窮舉執(zhí)行計(jì)劃時(shí)的限度。如果查詢長(zhǎng)時(shí)間處于"statistics"狀態(tài),可以考慮調(diào)低此參數(shù)。

optimizer_prune_level

默認(rèn)是打開的,這讓優(yōu)化器會(huì)根據(jù)需要掃描的行數(shù)來(lái)決定是否跳過某些執(zhí)行計(jì)劃。

optimizer_switch

這個(gè)變量包含了一些開啟/關(guān)閉優(yōu)化器特性的標(biāo)志位。

示例 — 干預(yù)優(yōu)化器行為(ICP特性)

默認(rèn)情況下,ICP特性是開啟的。查看一下優(yōu)化器行為。

基于二級(jí)索引的過濾查詢,使用了ICP特性,從Extra中的”Using index condition”可見。如果通過優(yōu)化器開關(guān),干預(yù)優(yōu)化器行為,又會(huì)如何呢?

從Extra可見,ICP特性已經(jīng)禁用。

5、系統(tǒng)狀態(tài)(SHOW STATUS)

MySQL中也內(nèi)置了一些狀態(tài),通過這些狀態(tài)變量也可反映出語(yǔ)句執(zhí)行的一些情況,方便定位問題。手工執(zhí)行的話,可以在執(zhí)行語(yǔ)句的前后分別執(zhí)行SHOW STATUS命令,查看狀態(tài)的變化。當(dāng)然,因狀態(tài)變量很多,對(duì)比起來(lái)不太方便,后面我介紹的小工具,可以解決這個(gè)問題。

1) 狀態(tài)變量

狀態(tài)變量很多,這里介紹幾個(gè)。

Sort_merge_passes

排序算法已經(jīng)執(zhí)行的合并的數(shù)量。如果這個(gè)變量值較大,應(yīng)考慮增加sort_buffer_size系統(tǒng)變量的值。

Sort_range

在范圍內(nèi)執(zhí)行的排序的數(shù)量。

Sort_rows

已經(jīng)排序的行數(shù)。

Sort_scan

通過掃描表完成的排序的數(shù)量。

Handler_read_first

索引中第一條被讀的次數(shù)。讀取索引頭的次數(shù),如果這個(gè)值很高,說明全索引掃描很多。

Handler_read_key

根據(jù)鍵讀一行的請(qǐng)求數(shù)。如果較高,說明查詢和表的索引正確。

Handler_read_next

按照鍵順序讀下一行的請(qǐng)求數(shù)。如果你用范圍約束或如果執(zhí)行索引掃描來(lái)查詢索引列,該值增加。

Handler_read_prev

按照鍵順序讀前一行的請(qǐng)求數(shù)。

Handler_read_rnd

根據(jù)固定位置讀一行的請(qǐng)求數(shù)。如果執(zhí)行大量查詢并需要對(duì)結(jié)果進(jìn)行排序該值較高。則可能使用了大量需要MySQL掃描整個(gè)表的查詢或連接沒有正確使用鍵。

Handler_read_rnd_next

在數(shù)據(jù)文件中讀下一行的請(qǐng)求數(shù)。如果正進(jìn)行大量的表掃描,該值較高。通常說明表索引不正確或?qū)懭氲牟樵儧]有利用索引。

6、SQL性能分析器(Query Profiler)

MySQL的Query Profiler是一個(gè)使用非常方便的Query診斷分析工具,通過該工具可以獲取一條Query在整個(gè)執(zhí)行過程中多種資源的消耗情況,如CPU、IO、IPC、SWAP等,以及發(fā)生的PAGE FAULTS、CONTEXT SWITCHE等,同時(shí)還能得到該Query執(zhí)行過程中的MySQL所調(diào)用的各個(gè)函數(shù)在源文件中的位置。

1) 使用方法

開啟

mysql> select @@profiling;

mysql> set profiling=1;

默認(rèn)情況下profiling的值為0表示MySQL SQL Profiler處于OFF狀態(tài),開啟SQL性能分析器后profiling的值為1。

執(zhí)行SQL語(yǔ)句

mysql> select count(*) from t1;

獲取概要信息

使用"show profile"命令獲取當(dāng)前系統(tǒng)中保存的多個(gè)Query的profile的概要信息。

mysql> show profiles;

+----------+------------+-----------------------+

| Query_ID | Duration   | Query                   |

+----------+------------+-----------------------+

|        1 | 0.00039300 | select count(*) from t1 |

+----------+------------+-----------------------+

針對(duì)單個(gè)Query獲取詳細(xì)的profile信息

在獲取概要信息之后,就可以根據(jù)概要信息的Query_ID來(lái)獲取某個(gè)Query的執(zhí)行過程中詳細(xì)的profile信息。

mysql> show profile for query 1;

mysql> show profile cpu,block io for query 1;
二、工具說明

前面談到了多種手段,對(duì)于SQL語(yǔ)句的調(diào)優(yōu)都有所幫助。通過下面這個(gè)小工具,可以自動(dòng)調(diào)用命令將上面這些內(nèi)容一次性推給DBA,大大加速優(yōu)化的過程。

1、準(zhǔn)備條件

模塊 - MySQLDB

模塊 - sqlparse

Python版本 = 2.7.3 (2.6.x版本應(yīng)該也沒問題,3.x版本沒測(cè)試)

2、調(diào)用方法
python mysql_tuning.py -p tuning_sql.ini -s "select xxx"
1) 參數(shù)說明

-p 指定配置文件名稱

-s 指定SQL語(yǔ)句

3、配置文件

共分兩節(jié)信息,分別是[database]描述數(shù)據(jù)庫(kù)連接信息,[option]運(yùn)行配置信息。

1) [database]
server_ip   = 127.0.0.1

db_user     = testuser

db_pwd      = testpwd

db_name     = test
2) [option]
sys_parm    = ON     //是否顯示系統(tǒng)參數(shù)

sql_plan    = ON //是否顯示執(zhí)行計(jì)劃

obj_stat    = ON //是否顯示相關(guān)對(duì)象(表、索引)統(tǒng)計(jì)信息

ses_status  = ON //是否顯示運(yùn)行前后狀態(tài)信息(激活后會(huì)真實(shí)執(zhí)行SQL)

sql_profile = ON   //是否顯示PROFILE跟蹤信息(激活后會(huì)真實(shí)執(zhí)行SQL)
4、輸出說明 1) 標(biāo)題部分

包含運(yùn)行數(shù)據(jù)庫(kù)的地址信息及數(shù)據(jù)版本信息。

2) 原始SQL

用戶執(zhí)行輸入的SQL,這部分主要是為了后續(xù)對(duì)比SQL改寫時(shí)使用。語(yǔ)句顯示時(shí)使用了格式化。

3) 系統(tǒng)級(jí)參數(shù)

腳本選擇顯示了部分與SQL性能相關(guān)的參數(shù)。這部分是寫死在代碼中的,如需擴(kuò)展需要修改腳本。

4) 優(yōu)化器開關(guān)

下面是和優(yōu)化器相關(guān)的一些參數(shù),通過調(diào)整這些參數(shù)可以人為干預(yù)優(yōu)化器行為。

5) 執(zhí)行計(jì)劃

就是調(diào)用explain extended的輸出結(jié)果。如果結(jié)果過長(zhǎng),可能出現(xiàn)顯示串行的問題(暫時(shí)未解決)。

6) 優(yōu)化器改寫后的SQL

通過這里可判斷優(yōu)化器是否對(duì)SQL進(jìn)行了某種優(yōu)化(例如子查詢的處理)。

7) 統(tǒng)計(jì)信息

在SQL語(yǔ)句中所有涉及到的表及其索引的統(tǒng)計(jì)信息都會(huì)在這里顯示出來(lái)。

8) 運(yùn)行狀態(tài)信息

在會(huì)話級(jí)別對(duì)比了執(zhí)行前后的狀態(tài)(SHOW STATUS),并將出現(xiàn)變化的部分顯示出來(lái)。需要注意的是,因?yàn)槭占癄顟B(tài)數(shù)據(jù)是采用SELECT方式,會(huì)造成個(gè)別指標(biāo)的誤差(例如Com_select)。

9) PROFILE詳細(xì)信息

調(diào)用SHOW PROFILE得到的詳細(xì)信息。

10) PROFILE匯總信息

根據(jù)PROFILE的資源消耗情況,顯示不同階段消耗對(duì)比情況(TOP N),直觀顯示"瓶頸"所在。

源碼文件下載地址:https://pan.baidu.com/s/1slF3...

作者:韓鋒

內(nèi)容來(lái)源:宜信技術(shù)學(xué)院

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/18053.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<