日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

找出MySQL瓶颈的基准测试和剖析

發(fā)布時(shí)間:2025/5/22 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找出MySQL瓶颈的基准测试和剖析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????? 有些時(shí)候,我們需要優(yōu)化MySQL。那我們要對(duì)MySQL進(jìn)行哪些改進(jìn)呢?一條特殊的query?數(shù)據(jù)庫(kù)模式?服務(wù)器硬件?唯一的辦法是測(cè)量你的系統(tǒng)在做什么,在各種條件下測(cè)量它的性能。這就是我們下面要學(xué)習(xí)的。

????? 最好的策略就是找出最弱的環(huán)節(jié),并加強(qiáng)你的應(yīng)用程序鏈的組成。這非常有用,如果你不知道什么阻止最優(yōu)性能,或者以后什么將要阻止最優(yōu)性能的發(fā)揮。

????? 基準(zhǔn)測(cè)試和剖析是兩條基本的找出瓶頸的方法。它們是有關(guān)聯(lián)的,但是它們又不完全相同。基準(zhǔn)測(cè)試你的系統(tǒng)的性能。這將有助于確定系統(tǒng)的承受能力,向你展示哪些改變有用哪些沒(méi)用,或者顯示在不同的數(shù)據(jù)下你的應(yīng)用程序的性能。

?????? 相反,剖析幫助你找出你的應(yīng)用程序在哪里花費(fèi)了大量的時(shí)間,或者消耗了大量的資源。換句話(huà)說(shuō),基準(zhǔn)可以回答“這種執(zhí)行表現(xiàn)怎么樣?”,而剖析可以回答“為什么它會(huì)這個(gè)樣子執(zhí)行?”

?????? 我們準(zhǔn)備在這個(gè)章節(jié)中講述兩部分內(nèi)容,基準(zhǔn)測(cè)試和剖析。我們開(kāi)始討論基準(zhǔn)測(cè)試的原因和對(duì)策,然后引入特定的基準(zhǔn)測(cè)試的標(biāo)桿(或者尺子)。我們先向你展示如何計(jì)劃和設(shè)計(jì)基準(zhǔn)測(cè)試,為精確的結(jié)果做設(shè)計(jì),執(zhí)行基準(zhǔn)測(cè)試和分析結(jié)果。最后,來(lái)看看基準(zhǔn)測(cè)試工具和如何使用它們的例子。

?????? 剩下的章節(jié)講述如何優(yōu)化應(yīng)用程序和MySQL。我們將會(huì)詳細(xì)地展示我們已經(jīng)應(yīng)用于生產(chǎn)幫助分析應(yīng)用程序的性能,真實(shí)的優(yōu)化代碼。我們也會(huì)展示怎樣記錄MySQL的query語(yǔ)句,分析日志,使用MySQL的狀態(tài)計(jì)數(shù)器,以及用來(lái)查看MySQL和你的query語(yǔ)句怎樣做的其它工具。

  • 為什么需要基準(zhǔn)?

  • ????? 很多大中型的MySQL部署有專(zhuān)門(mén)的標(biāo)桿用在基準(zhǔn)測(cè)試?yán)铩H欢?#xff0c;每個(gè)開(kāi)發(fā)者和DBA也應(yīng)該熟悉基礎(chǔ)的基準(zhǔn)測(cè)試和操作,因?yàn)樗鼈兎浅S杏谩O旅媸腔鶞?zhǔn)測(cè)試可以幫助你的一些事情:

    • ?測(cè)量你的應(yīng)用程序當(dāng)前是怎樣執(zhí)行的。如果你不知道你的應(yīng)用程序當(dāng)前執(zhí)行多快,你不能確定哪些改變有用。你還可以用歷史基準(zhǔn)結(jié)果,來(lái)診斷比不能預(yù)期的問(wèn)題。
    • 證實(shí)你系統(tǒng)的可擴(kuò)充性。你可以用基準(zhǔn)測(cè)試來(lái)模仿比你的生產(chǎn)環(huán)境能處理的多得多的負(fù)載,比如成千上百倍的增加用戶(hù)。
    • 計(jì)劃增長(zhǎng)。基準(zhǔn)測(cè)試能幫助你評(píng)估將來(lái)你的預(yù)計(jì)負(fù)荷需要多少硬件,網(wǎng)絡(luò)容量和其它資源。這能在升級(jí)或者大量應(yīng)用程序改變的時(shí)候,幫助減少風(fēng)險(xiǎn)。
    • 測(cè)試你的應(yīng)用程序在一個(gè)變化的環(huán)境里的承受能力。例如,你可以找出你的應(yīng)用程序,在并發(fā)下不定時(shí)的峰值或者不同的服務(wù)器的配置的情況下,是怎樣執(zhí)行的,或者你可以看到在不同的數(shù)據(jù)分布下它是怎樣處理的。
    • 測(cè)試不同的硬件、軟件和操作系統(tǒng)配置。對(duì)于你的系統(tǒng)來(lái)說(shuō),是RAID5還是RAID10更好?當(dāng)你從ATA磁盤(pán)切換到SAN存儲(chǔ)的時(shí)候,隨機(jī)寫(xiě)的性能是怎樣變化的?2.4的Linux內(nèi)核比2.6的更好嗎?MySQL的升級(jí)有助于提高性能嗎?對(duì)于你的數(shù)據(jù),不同的存儲(chǔ)引擎有影響嗎?你可以用不同的基準(zhǔn)來(lái)回答這些問(wèn)題。

    ????? 對(duì)于其他目的,你也可以用基準(zhǔn)測(cè)試,例如,為你的應(yīng)用程序創(chuàng)建一個(gè)單元測(cè)試套件,但是在這里我們僅僅關(guān)注性能相關(guān)方面。

    ??? 2.基準(zhǔn)策略

    ???? 有兩條基本的基準(zhǔn)測(cè)試策略:你可以對(duì)應(yīng)用程序作為一個(gè)整體,或者隔離MySQL,用基準(zhǔn)問(wèn)題測(cè)試。這兩種策略分別以全棧和單組件基準(zhǔn)測(cè)試聞名。有以下幾點(diǎn)測(cè)試整個(gè)應(yīng)用程序而不僅僅是MySQL:

    • 你測(cè)試整個(gè)應(yīng)用程序,包括web服務(wù),應(yīng)用程序代碼和數(shù)據(jù)庫(kù)。這非常有用,因?yàn)槟悴粌H僅關(guān)注MySQL的性能,更關(guān)心整個(gè)應(yīng)用程序。
    • MySQL并不總是應(yīng)用的瓶頸,全站基準(zhǔn)測(cè)試可以證明這一點(diǎn)。
    • 只有測(cè)試整個(gè)應(yīng)用,你才能知道每個(gè)部分的緩存行為。
    • 基準(zhǔn)測(cè)試在某種程度上是好的,因?yàn)樗从沉四愕膽?yīng)用的真正行為,當(dāng)你單獨(dú)測(cè)試某個(gè)模塊的時(shí)候,很難發(fā)現(xiàn)的行為。

    ?? 另一方面,應(yīng)用程序基準(zhǔn)測(cè)試很難創(chuàng)建,甚至很難正確地安裝。如果你的基準(zhǔn)測(cè)試設(shè)計(jì)的很糟糕,你就會(huì)得出錯(cuò)誤的結(jié)論,因?yàn)榻Y(jié)果不能反映真實(shí)情況。

    ?? 然而,有時(shí)你不想了解整個(gè)應(yīng)用。在最初階段,可能你只想了解MySQL基準(zhǔn)測(cè)試。下面的基準(zhǔn)測(cè)試是有用的:

    • 你想比較不同的模式或者query語(yǔ)句
    • 你想測(cè)試應(yīng)用中一個(gè)特殊的問(wèn)題
    • 相比長(zhǎng)篇大論的基準(zhǔn)測(cè)試來(lái)說(shuō),你更傾向短的基準(zhǔn)測(cè)試,能向你展示標(biāo)記和測(cè)量改變的快的“循環(huán)時(shí)間”。

    ??? 當(dāng)你在真實(shí)數(shù)據(jù)集的環(huán)境中,一次又一次的重復(fù)你的應(yīng)用query語(yǔ)句時(shí),基準(zhǔn)測(cè)試MySQL是非常有用的。數(shù)據(jù)集本身和數(shù)據(jù)集的大小都必須是真實(shí)的。如果可能的話(huà),做一個(gè)生產(chǎn)環(huán)境中的數(shù)據(jù)快照。

    ??? 不幸的是,建立一個(gè)真實(shí)的基準(zhǔn),是非常復(fù)雜和耗時(shí)的;如果你能得到生產(chǎn)環(huán)境中的數(shù)據(jù)集的復(fù)制品,算你走運(yùn)。當(dāng)然,這有可能是不可行的。比如,你可能開(kāi)發(fā)了一個(gè)新的應(yīng)用程序,只有少數(shù)的用戶(hù)和數(shù)據(jù)。如果你想知道,如果它變得龐大時(shí),將會(huì)有什么問(wèn)題發(fā)生,除了模擬更大應(yīng)用數(shù)據(jù)和負(fù)載,你沒(méi)得選擇。

    ??? 測(cè)試什么?

    ??? 在你開(kāi)始基準(zhǔn)測(cè)試之前,甚至是在你設(shè)計(jì)測(cè)試之前,你需要確定你的目標(biāo)。你的目標(biāo)將會(huì)決定你的工具和技術(shù),以便得到精確地有意義的結(jié)果。用問(wèn)題來(lái)設(shè)計(jì)你的目標(biāo),比如“CPU是多的好嗎?”或者“新的索引是不是比現(xiàn)在的索引執(zhí)行的更快?”

    ??? 它不可能是顯而易見(jiàn)的,這就需要你用不同的方法來(lái)測(cè)試不同的事情,例如:延遲和吞吐量需要不同的基準(zhǔn)測(cè)試。

    ??? 考慮以下幾個(gè)量度和它們?nèi)绾瓮晟颇愕男阅苣繕?biāo):

    ?? 單位時(shí)間的交易量

    ????這是一個(gè)經(jīng)典的歷史為基準(zhǔn)的數(shù)據(jù)庫(kù)應(yīng)用程序。標(biāo)準(zhǔn)化測(cè)試,如TPC-C標(biāo)準(zhǔn)(見(jiàn)http://www.tpc.org)被廣泛引用,很多數(shù)據(jù)庫(kù)提供商,工作非常努力以使它們工作的好。這些基準(zhǔn)測(cè)試在線(xiàn)處理(OLTP)性能,這些基準(zhǔn)最適合多用戶(hù)交易應(yīng)用程序。通常的測(cè)量單位是每秒交易量。

    ??? 吞吐量這個(gè)詞通常的意思是等同于單位時(shí)間內(nèi)的交易量(或者工作的其它單元)。

    ??? 響應(yīng)時(shí)間或延遲?

    ??? 這測(cè)量了一個(gè)任務(wù)需要的總時(shí)間。依賴(lài)你的應(yīng)用,你可能需要測(cè)量毫秒,秒或者分鐘。從這里你可以得出平均響應(yīng)時(shí)間,最小響應(yīng)時(shí)間和最大響應(yīng)時(shí)間。

    ??? 最大響應(yīng)時(shí)間是很少有用的度量,因?yàn)榛鶞?zhǔn)測(cè)試運(yùn)行時(shí)間越長(zhǎng),可能最大響應(yīng)時(shí)間越大。它并不總是能重復(fù)的,這就可能會(huì)在運(yùn)行的過(guò)程中拉大差距。正是因?yàn)檫@個(gè)原因,很多人使用百分比的響應(yīng)時(shí)間。例如,如果95%的響應(yīng)時(shí)間是5毫秒,你就可以知道任務(wù)可以在總時(shí)間的95%內(nèi)少于5毫秒完成。

    ??? 畫(huà)出基準(zhǔn)測(cè)試的結(jié)果,為圖形或者線(xiàn)性圖(例如,平均值和95%百分比)或者是散列圖,將是非常有幫助的,因?yàn)檫@樣你就可以看到結(jié)果的分布情況。通過(guò)這些圖形,可以看出在長(zhǎng)時(shí)間運(yùn)行過(guò)程中,基準(zhǔn)測(cè)試是怎樣執(zhí)行的。

    ?? 假設(shè)你的系統(tǒng)每小時(shí)做一分鐘檢測(cè)。在檢測(cè)期間,系統(tǒng)“拋錨”,沒(méi)有交易完成。95%的響應(yīng)時(shí)間不會(huì)顯示峰值,所以結(jié)果會(huì)掩蓋這個(gè)問(wèn)題。然而,一個(gè)圖形會(huì)顯示響應(yīng)時(shí)間內(nèi)的周期性峰值。圖2-1會(huì)闡述這點(diǎn)。

    ?? 圖2-1顯示了每分鐘的交易量。線(xiàn)條顯示了象征性的超過(guò)平均值的峰值。第一個(gè)峰值是因?yàn)榉?wù)器的緩存被冷凍了,另一個(gè)峰值顯示了服務(wù)器刷新臟頁(yè)穩(wěn)定性到磁盤(pán)花費(fèi)的時(shí)間。如果沒(méi)有圖形我們很難看到這些差異。

    ???穩(wěn)定性

    ?? 對(duì)于系統(tǒng)來(lái)說(shuō),穩(wěn)定性測(cè)試非常重要,因?yàn)橄到y(tǒng)需要在變化的工作負(fù)載下保持性能。

    ?? “在一個(gè)變化的工作負(fù)載下保持性能”是一個(gè)很抽象的概念。性能是可以被度量的,例如,吞吐量和響應(yīng)時(shí)間;工作負(fù)載隨著數(shù)據(jù)庫(kù)大小,當(dāng)前連接數(shù),或者硬件不同,可能會(huì)存在差異。

    ????穩(wěn)定性測(cè)試,對(duì)于評(píng)估系統(tǒng)承載能力來(lái)說(shuō)是好的,因?yàn)樗苷故境瞿愕膽?yīng)用中的薄弱環(huán)節(jié),而在其它基準(zhǔn)測(cè)試中不會(huì)展示。

    圖2-1 30分鐘運(yùn)行的結(jié)果

    ???? 例如,在單鏈接(不好的測(cè)試策略)的情況下做響應(yīng)時(shí)間測(cè)試,你設(shè)計(jì)的系統(tǒng)性能良好;但是在任何等級(jí)的并發(fā)下,你應(yīng)用可能會(huì)表現(xiàn)糟糕。一個(gè)測(cè)試關(guān)注的是在不斷增加的連接下的持續(xù)響應(yīng)時(shí)間,這樣才可以看到設(shè)計(jì)的瑕疵。

    ???? 有一些活動(dòng),例如搜集顆粒數(shù)據(jù)創(chuàng)建總結(jié)性數(shù)據(jù)表的周期性批量作業(yè),僅僅需要快速響應(yīng)時(shí)間。單純地測(cè)試響應(yīng)時(shí)間是好的,但是也要關(guān)心他們和其它活動(dòng)是怎么交互(相互影響)的。批量作業(yè)可能會(huì)導(dǎo)致交互的query語(yǔ)句表現(xiàn)較差,反之亦然。

    ????? 并發(fā)

    ????? 并發(fā)是很重要的,但是很多時(shí)候都被濫用和被錯(cuò)誤地衡量。例如,有一種很流行的說(shuō)法,有多少用戶(hù)在同時(shí)瀏覽網(wǎng)站。然而,HTTP是無(wú)狀態(tài)的,大多數(shù)用戶(hù)只是簡(jiǎn)單地閱讀瀏覽器展示的內(nèi)容,所以這并不能轉(zhuǎn)化為web服務(wù)器的并發(fā)。同樣地,在web服務(wù)器上的并發(fā)并不一定轉(zhuǎn)化到數(shù)據(jù)庫(kù)服務(wù)器上。有直接關(guān)聯(lián)的就是你的會(huì)話(huà)存儲(chǔ)機(jī)制能處理多少數(shù)據(jù)。一個(gè)更精確的測(cè)試web服務(wù)器的并發(fā)的方法是在峰值的時(shí)候,用戶(hù)每秒請(qǐng)求的次數(shù)。

    ?????? 你也可以在應(yīng)用程序的不同地方測(cè)試并發(fā)。在web服務(wù)器上的并發(fā)越高,可能引起更高的數(shù)據(jù)庫(kù)并發(fā)等級(jí)。但是語(yǔ)言和工具套件可能影響它。例如,Java的連接池可能會(huì)比持續(xù)連接的PHP,會(huì)降低MySQL服務(wù)器的并發(fā)連接。

    ????? 更重要的是在一個(gè)給定時(shí)間內(nèi)運(yùn)行query語(yǔ)句的并發(fā)數(shù)量。一個(gè)很好的設(shè)計(jì)應(yīng)用程序可能會(huì)打開(kāi)MySQL服務(wù)器的數(shù)以百計(jì)的并發(fā),但是其中的一少部分應(yīng)該會(huì)同時(shí)執(zhí)行query語(yǔ)句。這樣,一個(gè)“50,000用戶(hù)同時(shí)在線(xiàn)”的web站點(diǎn),可能在MySQL服務(wù)器上只需要10~15個(gè)同時(shí)執(zhí)行query語(yǔ)句。

    ????? 換句話(huà)說(shuō),你要真正關(guān)心的基準(zhǔn)測(cè)試就是工作并發(fā),或者線(xiàn)程數(shù)量,或者同時(shí)工作連接。測(cè)試當(dāng)并發(fā)增加的時(shí)候,性能掉下來(lái)多少。如果是這樣的話(huà),你的應(yīng)用程序可能就無(wú)法處理高負(fù)載下的峰值。

    ????? 你也需要確保性能不會(huì)很快地降下來(lái),或者設(shè)計(jì)應(yīng)用程序,這樣就不會(huì)在應(yīng)用程序的各個(gè)部分產(chǎn)生不能處理的高并發(fā)了。在通常情況下,你要設(shè)計(jì)限制MySQL服務(wù)器的并發(fā),如應(yīng)用隊(duì)列。

    ????? 并發(fā)不能完全等同于響應(yīng)時(shí)間和穩(wěn)定性:它并不是一個(gè)結(jié)果,而是你怎樣建立基準(zhǔn)測(cè)試的一個(gè)屬性。你應(yīng)該在不同的并發(fā)水平下測(cè)試應(yīng)用程序的性能,而不是測(cè)試你的應(yīng)用程序的能達(dá)到的并發(fā)。

    ????? 總之,你應(yīng)該測(cè)試對(duì)用戶(hù)來(lái)說(shuō)重要的東西。測(cè)試衡量性能,但是“性能”對(duì)不同的人意味著不同的東西。收集一些關(guān)于系統(tǒng)應(yīng)當(dāng)怎樣測(cè)量的需求(正式或非正式的),能接受的響應(yīng)時(shí)間,期望的并發(fā)類(lèi)型,等等。然后,嘗試設(shè)計(jì)你的測(cè)試來(lái)解釋所有的需求,而不是“井底之蛙”排除其他東西關(guān)注某項(xiàng)東西。

    ????? 3.測(cè)試標(biāo)桿

    ??????在有個(gè)大致了解的情況下,讓我們轉(zhuǎn)向怎樣設(shè)計(jì)和執(zhí)行基準(zhǔn)測(cè)試上來(lái)。在我們討論如何把基準(zhǔn)測(cè)試做好之前,先讓我們看下一些常見(jiàn)的錯(cuò)誤,這些錯(cuò)誤能導(dǎo)致不能用或者不精確地結(jié)果:

    • 使用真實(shí)數(shù)據(jù)大小的子集,例如,當(dāng)應(yīng)用程序不得不處理好幾百G的數(shù)據(jù)時(shí),我們只使用其中的1G數(shù)據(jù);或者當(dāng)你準(zhǔn)備擴(kuò)大你的應(yīng)用程序時(shí),使用現(xiàn)在的數(shù)據(jù)集
    • 使用錯(cuò)誤的數(shù)據(jù)分布,例如當(dāng)真實(shí)系統(tǒng)數(shù)據(jù)中的“熱點(diǎn)”規(guī)則的數(shù)據(jù)分布(隨機(jī)生成的數(shù)據(jù)通常是不切實(shí)際的分布)。
    • 使用不切實(shí)際的分布參數(shù),例如,假設(shè)所有用戶(hù)的配置文件同樣地被瀏覽。
    • 在多用戶(hù)應(yīng)用中,使用單用戶(hù)場(chǎng)景。
    • 在單臺(tái)服務(wù)器上測(cè)試分布式應(yīng)用。
    • 和真實(shí)用戶(hù)的行為錯(cuò)誤地比較,例如web頁(yè)面上的“思考時(shí)間”。真實(shí)用戶(hù)請(qǐng)求并閱讀它;他們不會(huì)一個(gè)接一個(gè)沒(méi)有停頓地點(diǎn)擊鏈接。
    • 在一個(gè)循環(huán)里執(zhí)行相同的query語(yǔ)句。真實(shí)的query語(yǔ)句是不同的,所以它們會(huì)引起緩存未命中的情況。相同的query語(yǔ)句將會(huì)在某種級(jí)別全部或者部分被緩存。
    • 未能檢查錯(cuò)誤。如果一個(gè)基準(zhǔn)測(cè)試的結(jié)果沒(méi)有意義-例如,如果一個(gè)慢操作突然非常快地完成,那么就該檢查錯(cuò)誤。你就能測(cè)試出在一個(gè)SQL查詢(xún)時(shí),MySQL能多快地探測(cè)到語(yǔ)法錯(cuò)誤!原則性來(lái)說(shuō),每次測(cè)試完后都應(yīng)該檢查錯(cuò)誤日志。
    • 當(dāng)系統(tǒng)還沒(méi)有變熱的時(shí)候,忽略系統(tǒng)是怎樣執(zhí)行的,例如,系統(tǒng)剛剛重啟后。有時(shí)你需要知道你的服務(wù)器重啟后,需要多長(zhǎng)時(shí)間達(dá)到承載能力,所以你需要在熱啟動(dòng)期間注意觀(guān)察。相反地,如果你想研究它的正常性能,你需要關(guān)心,如果你的測(cè)試正好在重啟后,許多緩存將被冷凍,那么測(cè)試結(jié)果將不會(huì)反映,在緩存在變熱后,在負(fù)載下得到的結(jié)果。
    • 使用默認(rèn)的服務(wù)設(shè)置。

    ???? 僅在避免這些錯(cuò)誤上就會(huì)花費(fèi)你很長(zhǎng)時(shí)間來(lái)改進(jìn)你的結(jié)果質(zhì)量。

    ???? 對(duì)于別的所有事情都是同樣的,你應(yīng)該在盡可能真實(shí)的環(huán)境中做測(cè)試。盡管有時(shí),使用一個(gè)稍微不真實(shí)的測(cè)試也是明智的。例如,假如說(shuō)你的應(yīng)用程序在不同的主機(jī)上。使用相同的配置執(zhí)行測(cè)試,將會(huì)更接近真實(shí)情況,但是這樣做就會(huì)增加更多變量,例如,網(wǎng)絡(luò)負(fù)載多少,多快。在單節(jié)點(diǎn)上測(cè)試往往很簡(jiǎn)單,然而在某些情況下,將會(huì)更精確。什么時(shí)候使用最合適,完全取決于你的判斷。

    ?????? 設(shè)計(jì)和規(guī)劃測(cè)試

    ?? 規(guī)劃測(cè)試的第一步就是確定問(wèn)題和目標(biāo)。然后,決定是否使用標(biāo)準(zhǔn)的測(cè)試還是你自己設(shè)計(jì)。

    ??????如果你使用標(biāo)準(zhǔn)測(cè)試,要保證你選用的測(cè)試符合你的需求。例如,不要使用TCP測(cè)試你的電子商務(wù)系統(tǒng)。用TCP自己的話(huà)說(shuō),TCP“”。所以對(duì)于OLTP系統(tǒng)來(lái)說(shuō),不是一個(gè)合適的測(cè)試。

    ??????設(shè)計(jì)你自己的測(cè)試是一個(gè)復(fù)雜的反復(fù)的進(jìn)程。開(kāi)始,使用你生產(chǎn)環(huán)境中的數(shù)據(jù)集的快照。確保你能為后來(lái)的運(yùn)行恢復(fù)這些數(shù)據(jù)集。

    ??????然后,你需要在數(shù)據(jù)里運(yùn)行query語(yǔ)句。你可以在基本測(cè)試?yán)锾砑訂卧獪y(cè)試套件,多次執(zhí)行,但是這和你怎樣真實(shí)地使用數(shù)據(jù)庫(kù),不大可能匹配。一個(gè)比較好的方法是在一個(gè)典型的時(shí)間框架內(nèi),記錄你生產(chǎn)環(huán)境中的所有的query語(yǔ)句,例如,在峰值負(fù)載內(nèi)的一個(gè)小時(shí),或者一整天。如果你在很短的時(shí)間框架內(nèi),記錄了query語(yǔ)句,你可能需要選擇幾個(gè)時(shí)間框架。這將會(huì)使你覆蓋所有系統(tǒng)活動(dòng),例如,每周報(bào)告query語(yǔ)句,或者在低峰值的時(shí)期,執(zhí)行計(jì)劃任務(wù)。

    ??????你可以在不同等級(jí)下記錄query語(yǔ)句。例如,如果你需要全棧測(cè)試的話(huà),你就可以記錄WEB服務(wù)器上的HTTP請(qǐng)求。你也可以啟用MySQL的查詢(xún)?nèi)罩?#xff0c;但是如果你重放查詢(xún)?nèi)罩?#xff0c;要確保重新創(chuàng)建單獨(dú)的線(xiàn)程,代替線(xiàn)性地重放每條query語(yǔ)句。在日志里為每個(gè)連接創(chuàng)建一個(gè)單獨(dú)的線(xiàn)程也是非常重要的,避免線(xiàn)程間的query阻塞。查詢(xún)?nèi)罩撅@示了哪個(gè)連接執(zhí)行了哪條query語(yǔ)句。

    ?????? 即使你還沒(méi)有構(gòu)建自己的測(cè)試,你可以寫(xiě)下你的測(cè)試計(jì)劃。你可以使測(cè)試跑很多遍,你需要重新精確地構(gòu)建你的測(cè)試。也為將來(lái)打算。你可能不是下次執(zhí)行這個(gè)測(cè)試的人,即使你是,你可能也不太記得你第一次是怎么執(zhí)行它的。你的計(jì)劃應(yīng)該包括測(cè)試數(shù)據(jù),安裝系統(tǒng)的步驟和熱啟動(dòng)計(jì)劃。

    ???? 設(shè)計(jì)一些規(guī)范參數(shù)和結(jié)果的方法,并詳細(xì)地記錄每次執(zhí)行。你的文檔方法可能如電子表格或者筆記那么簡(jiǎn)單,也可能如定做的數(shù)據(jù)庫(kù)那么復(fù)雜(但是要記住,你要寫(xiě)一些腳本來(lái)幫助分析測(cè)試結(jié)果,所以沒(méi)有比打開(kāi)電子表格和文本文件更容易的方法了)。

    ???? 你可能會(huì)發(fā)現(xiàn)創(chuàng)建一個(gè)測(cè)試目錄,包含每次執(zhí)行的結(jié)果的子目錄,會(huì)很有用。在相應(yīng)地的子目錄,你可以放結(jié)果,配置文件,和每次執(zhí)行的筆記。如果你的測(cè)試比你預(yù)想的多,而且你也很感興趣,無(wú)論如何記錄額外的數(shù)據(jù)。錯(cuò)過(guò)記錄重要的數(shù)據(jù)總比不需要的數(shù)據(jù)要好,可能以后你會(huì)發(fā)現(xiàn)額外數(shù)據(jù)非常有用。在測(cè)試期間盡可能多地記錄附加信息,如CPU的使用情況,磁盤(pán)I/O,和網(wǎng)絡(luò)流量統(tǒng)計(jì);SHOW GLOBAL STATUS的計(jì)數(shù)器,等等。

    ?????獲得精確結(jié)果

    ???? 獲得精確結(jié)果的最好方法是,設(shè)計(jì)你的測(cè)試來(lái)回答你想要的問(wèn)題。你有選擇正確的測(cè)試嗎?你捕捉到你需要的答案的數(shù)據(jù)了嗎?你的測(cè)試有錯(cuò)誤的標(biāo)準(zhǔn)嗎?例如,你有運(yùn)行一個(gè)計(jì)算密集型的測(cè)試來(lái)預(yù)測(cè)I/O密集型的應(yīng)用程序的性能嗎?

    ???? 接著,確保你的測(cè)試結(jié)果可以重復(fù)的。盡量確保你的系統(tǒng)在每次開(kāi)始執(zhí)行的時(shí)候,是處在相同狀態(tài)的。如果測(cè)試很重要,你應(yīng)當(dāng)在每次執(zhí)行后重啟系統(tǒng)。如果你需要一個(gè)預(yù)熱過(guò)的服務(wù)器,正常來(lái)講,你也應(yīng)當(dāng)確保你的系統(tǒng)已經(jīng)有足夠長(zhǎng)的預(yù)熱。例如,如果預(yù)熱過(guò)程包含了隨機(jī)query查詢(xún),那么你的測(cè)試結(jié)果將會(huì)不可重復(fù)。

    ???? 如果測(cè)試改變了測(cè)試數(shù)據(jù)或數(shù)據(jù)庫(kù)模式,在每次執(zhí)行的時(shí)候,用快照重新設(shè)置它。向一個(gè)表中插入一千行記錄和向一個(gè)表中插入一百萬(wàn)行記錄,不會(huì)給出相同的的結(jié)果。在磁盤(pán)上的數(shù)據(jù)存儲(chǔ)和分布也會(huì)使結(jié)果不可重復(fù)。一個(gè)方法是確保物理布局相近,做一個(gè)快速的格式和文件拷貝分區(qū)。

    ???? 當(dāng)心額外負(fù)載,優(yōu)化和監(jiān)控系統(tǒng),詳細(xì)記錄日志,計(jì)劃任務(wù),以及其它因素能使你的結(jié)果發(fā)生偏移。

    ?????

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/sunss/archive/2010/09/27/1836543.html

    總結(jié)

    以上是生活随笔為你收集整理的找出MySQL瓶颈的基准测试和剖析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。