qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          黃金法則:MySQL基準(zhǔn)測(cè)試最佳實(shí)踐

           MySQL基準(zhǔn)測(cè)試數(shù)據(jù)庫(kù)性能優(yōu)化中是一個(gè)非常重要的分支。本文目的在于讓讀者對(duì)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)有一個(gè)基本的了解,掌握MySQL以及如何管理使用Linux。文中討論了MySQL性能因素以及如何測(cè)試CPU性能,同時(shí)使用具體的例子來(lái)展示幾種實(shí)用的測(cè)試MySQL系統(tǒng)的實(shí)踐方法。
            為什么數(shù)據(jù)庫(kù)管理員要在MySQL系統(tǒng)上運(yùn)行基準(zhǔn)測(cè)試呢?答案顯而易見,倘若在一個(gè)模擬的實(shí)時(shí)環(huán)境中系統(tǒng)設(shè)計(jì)能夠承受住壓力并且滿足性能目標(biāo),那么數(shù)據(jù)庫(kù)管理員也無(wú)需大費(fèi)周章了。
            在深入了解MySQL基準(zhǔn)測(cè)試程序機(jī)制前,弄清楚什么是基準(zhǔn)測(cè)試,這一點(diǎn)非常重要。簡(jiǎn)單來(lái)說(shuō),基準(zhǔn)測(cè)試是“運(yùn)行計(jì)算機(jī)程序或操作行為,通過(guò)運(yùn)行一些標(biāo)準(zhǔn)測(cè)試和一系列的映襯來(lái)評(píng)估對(duì)象的相對(duì)性能。”
            CPU基準(zhǔn)測(cè)試主要用來(lái)測(cè)試硬件和運(yùn)算能力,而軟件基準(zhǔn)測(cè)試更多的則是測(cè)試概念元素。
            在我們的案例中,軟件基準(zhǔn)測(cè)試中數(shù)據(jù)庫(kù)管理系統(tǒng)基準(zhǔn)測(cè)試是一個(gè)很好的例子。這種類型的測(cè)試目的是衡量數(shù)據(jù)庫(kù)管理系統(tǒng)的吞吐量和響應(yīng)時(shí)間。最終的測(cè)試結(jié)果會(huì)以分?jǐn)?shù)顯示,而這些分?jǐn)?shù)主要用來(lái)比較。
            數(shù)據(jù)庫(kù)管理員一般很難分清基準(zhǔn)測(cè)試和壓力測(cè)試之間的區(qū)別。這一點(diǎn)我們可以理解,因?yàn)檫@兩種條件有著類似的目標(biāo),即數(shù)據(jù)庫(kù)容量。兩者明顯的不同點(diǎn)在于:基準(zhǔn)測(cè)試給出的結(jié)果,以數(shù)字呈現(xiàn),能夠允許你在每個(gè)基準(zhǔn)測(cè)試和服務(wù)器/系統(tǒng)中調(diào)整設(shè)置,這是可以改變的,同時(shí)也能反應(yīng)出數(shù)據(jù)庫(kù)管理員是成功還是失敗。而壓力測(cè)試則是把系統(tǒng)推向極端邊緣用以了解系統(tǒng)的極限有多大。
            由于本文重點(diǎn)討論MySQL基準(zhǔn)測(cè)試而非壓力測(cè)試,所有后者我們不再進(jìn)行討論。在MySQL服務(wù)器運(yùn)行基準(zhǔn)測(cè)試時(shí),性能因素是數(shù)據(jù)庫(kù)管理員必須考慮的問(wèn)題。那么,有哪些性能因素?答案就是:吞吐量,延遲時(shí)間和可擴(kuò)展性。將這三個(gè)因素結(jié)合在一起,代表了MySQL服務(wù)器的整體性能。
            那么我們?nèi)绾芜M(jìn)行MySQL基準(zhǔn)測(cè)試呢?為了獲取正確的結(jié)果,請(qǐng)遵守以下一些規(guī)則:
            應(yīng)該多次檢查輸入的數(shù)據(jù);
            應(yīng)該多次運(yùn)行基準(zhǔn)測(cè)試,至少5次;
            重新啟動(dòng)MySQL服務(wù)器以消除任何不必要的緩存因素;
            數(shù)據(jù)庫(kù)管理員要有興趣、認(rèn)真對(duì)待進(jìn)程。
            下面有幾個(gè)影響基準(zhǔn)測(cè)試的例子,我們?cè)谌魏螘r(shí)候都應(yīng)當(dāng)避免這種情況出現(xiàn):
            在一臺(tái)單一的虛擬機(jī)上運(yùn)行基準(zhǔn)測(cè)試;
            不可忽視不同網(wǎng)絡(luò)基礎(chǔ)設(shè)施的影響;
            使用MySQL服務(wù)器默認(rèn)設(shè)置;
            無(wú)需根據(jù)服務(wù)器配置特定的和獨(dú)特的業(yè)務(wù)需求;
            無(wú)法消除緩存問(wèn)題;
            運(yùn)行基準(zhǔn)測(cè)試時(shí),忽視任何不必要的緩存問(wèn)題。
            如何在MySQL上運(yùn)行基準(zhǔn)測(cè)試?
            在構(gòu)建MySQL網(wǎng)站時(shí)把現(xiàn)有的技術(shù)文檔增加到MySQL基準(zhǔn)測(cè)試中,這是一個(gè)非常實(shí)用的基準(zhǔn)測(cè)試功能。MySQL開發(fā)團(tuán)隊(duì)稱,BENCHMARK ()函數(shù)常被用來(lái)測(cè)試MySQL進(jìn)程有多快?它適用于MySQL客戶端。
            詳細(xì)功能顯示如:BENCHMARK (count, expr): The BENCHMARK ()函數(shù)執(zhí)行的表達(dá)式為expr重復(fù)計(jì)算次數(shù)。測(cè)試的結(jié)果值始終為0。基準(zhǔn)測(cè)試最重要的數(shù)字出現(xiàn)在幾秒鐘時(shí)間內(nèi)。如下圖示例:

          這里有一些技巧包括如何獲得BENCHMARK () 函數(shù)正確結(jié)果。這幾點(diǎn)如下:
            建議多次執(zhí)行該函數(shù);
            允許僅適用scalar表達(dá);
            表達(dá)式必須返回單個(gè)列或單個(gè)行;
            該功能減少了由于網(wǎng)絡(luò)或語(yǔ)法分析器而帶來(lái)的干擾。
            使用SysBench
            MySQL的開發(fā)者建議使用一款流行的測(cè)試工具——SysBench(由MySQL開發(fā)者開發(fā)),這是一款多功能的工具允許數(shù)據(jù)庫(kù)管理員測(cè)試CPU、文件IO以及MySQL性能。
            下面我們就來(lái)看下利用SysBench對(duì)CPU、MySQL進(jìn)行基準(zhǔn)測(cè)試。
            CPU性能
            用于CPU性能基準(zhǔn)測(cè)試命令顯示如下:該命令將啟動(dòng)一個(gè)進(jìn)程并且產(chǎn)出大量的數(shù)字。
            sysbench --test=cpu --cpu-max-prime=20000 run
            然而,最重要的數(shù)字是以總的時(shí)間(以秒為單位)為主。利用所花費(fèi)的時(shí)間來(lái)計(jì)算所需要的被測(cè)試的計(jì)算參數(shù)。這一點(diǎn)很重要,你可以用來(lái)對(duì)比基準(zhǔn)測(cè)試在橫跨多個(gè)系統(tǒng)時(shí)最有價(jià)值的數(shù)據(jù)。
            MySQL性能
            SysBench可以用來(lái)測(cè)量MySQL性能。要想做到這一點(diǎn),首先我們可以在數(shù)據(jù)庫(kù)‘monitis’中創(chuàng)建1,000,000行數(shù)據(jù)測(cè)試表。通過(guò)以下命令執(zhí)行:
            sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis --mysql-user=root --mysql-password=yourrootsqlpassword prepare
            接著在MySQL基準(zhǔn)測(cè)試中輸入:
            sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run
            當(dāng)基準(zhǔn)測(cè)試結(jié)果顯示后,查看交易列表。這個(gè)值是以每秒為交換單位。
            為了確保所需要的基準(zhǔn)測(cè)試在系統(tǒng)中能夠很好的運(yùn)行,這里只需要輸入簡(jiǎn)單的命令:
            sysbench -- monitis =oltp --mysql-db= monitis --mysql-user=root --mysql-password=yourrootsqlpassword cleanup
            盡管可能會(huì)出現(xiàn)大量的MySQL性能基準(zhǔn)測(cè)試類型,但上面的這些信息足夠你使用了。
            結(jié)束語(yǔ):
            MySQL性能測(cè)試針對(duì)不同的項(xiàng)目采用不同的解決方案。這是因?yàn)橛刹煌男枨?、時(shí)間,目標(biāo)決定的。當(dāng)然在MySQL系統(tǒng)上運(yùn)行基準(zhǔn)測(cè)試,就其技術(shù)本身而言在日常業(yè)務(wù)運(yùn)作時(shí)也是非常必要的,希望這些實(shí)踐對(duì)你有所幫助。



          posted on 2014-01-27 10:43 順其自然EVO 閱讀(236) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 镇沅| 牟定县| 奇台县| 确山县| 西丰县| 基隆市| 衡山县| 湖口县| 如东县| 田阳县| 林芝县| 聂荣县| 竹北市| 玉龙| 东台市| 长葛市| 南昌县| 安仁县| 株洲县| 普宁市| 漳平市| 东山县| 漳浦县| 乌兰县| 灵台县| 会昌县| 延寿县| 琼结县| 六安市| 房产| 富源县| 太仓市| 芮城县| 天等县| 土默特右旗| 宁明县| 威信县| 上栗县| 西平县| 沙洋县| 富川|