高性能的mysql怎么樣 mysql性能比較

高性能MySQL:一個(gè)診斷案例(3)

一個(gè)診斷案例( )

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、柳南ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的柳南網(wǎng)站制作公司

我們看到了兩種可能性 要么是數(shù)據(jù)庫(kù)導(dǎo)致了I/O(如果能找到源頭的話 那么可能就找到了問(wèn)題的原因) 要么不是數(shù)據(jù)庫(kù)導(dǎo)致了所有的I/O 而是其他什么導(dǎo)致的 而系統(tǒng)因?yàn)槿鄙買/O 資源影響了數(shù)據(jù)庫(kù)性能 我們也很小心地盡力避免引入另外一個(gè)隱式的假設(shè) 磁盤很忙并不一定意味著MySQL 會(huì)有問(wèn)題 要記住 這個(gè)服務(wù)器主要的壓力是內(nèi)存讀取 所以也很可能出現(xiàn)磁盤長(zhǎng)時(shí)間無(wú)法響應(yīng)但沒(méi)有造成嚴(yán)重問(wèn)題的現(xiàn)象

如果你一直跟隨我們的推理邏輯 就可以發(fā)現(xiàn)還需要回頭檢查一下另外一個(gè)假設(shè) 我們已經(jīng)知道磁盤設(shè)備很忙 因?yàn)槠涞却龝r(shí)間很高 對(duì)于固態(tài)硬盤來(lái)說(shuō) 其I/O 平均等待時(shí)間一般不會(huì)超過(guò) / 秒 實(shí)際上 從iostat 的輸出結(jié)果也可以發(fā)現(xiàn)磁盤本身的響應(yīng)還是很快的 但請(qǐng)求在塊設(shè)備隊(duì)列中等待很長(zhǎng)的時(shí)間才能進(jìn)入到磁盤設(shè)備 但要記住 這只是iostat 的輸出結(jié)果 也可能是錯(cuò)誤的信息

究竟是什么導(dǎo)致了性能低下?

當(dāng)一個(gè)資源變得效率低下時(shí) 應(yīng)該了解一下為什么會(huì)這樣 有如下可能的原因

資源被過(guò)度使用 余量已經(jīng)不足以正常工作

資源沒(méi)有被正確配置

資源已經(jīng)損壞或者失靈

回到上面的例子中 iostat 的輸出顯示可能是磁盤的工作負(fù)載太大 也可能是配置不正確(在磁盤響應(yīng)很快的情況下 為什么I/O 請(qǐng)求需要排隊(duì)這么長(zhǎng)時(shí)間才能進(jìn)入到磁盤?) 然而 比較系統(tǒng)的需求和現(xiàn)有容量對(duì)于確定問(wèn)題在哪里是很重要的一部分 大量的基準(zhǔn)測(cè)試證明這個(gè)客戶使用的這種SSD 是無(wú)法支撐幾百M(fèi)B/s 的寫(xiě)操作的 所以 盡管iostat 的結(jié)果表明磁盤的響應(yīng)是正常的 也不一定是完全正確的 在這個(gè)案例中 我們沒(méi)有辦法證明磁盤的響應(yīng)比iostat 的結(jié)果中所說(shuō)的要慢 但這種情況還是有可能的 所以這不能改變我們的看法 可能是磁盤被濫用注 或者是錯(cuò)誤的配置 或者兩者兼而有之 是性能低下的罪魁禍?zhǔn)?/p>

在檢查過(guò)所有診斷數(shù)據(jù)之后 接下來(lái)的任務(wù)就很明顯了 測(cè)量出什么導(dǎo)致了I/O 消耗 不幸的是 客戶當(dāng)前使用的GNU/Linux 版本對(duì)此的支持不力 通過(guò)一些工作我們可以做一些相對(duì)準(zhǔn)確的猜測(cè) 但首先還是需要探索一下其他的可能性 我們可以測(cè)量有多少I/O來(lái)自MySQL 但客戶使用的MySQL 版本較低以致缺乏一些診斷功能 所以也無(wú)法提供確切有利的支持

作為替代 基于我們已經(jīng)知道MySQL 如何使用磁盤 我們來(lái)觀察MySQL 的I/O 情況 通常來(lái)說(shuō) MySQL 只會(huì)寫(xiě)數(shù)據(jù) 日志 排序文件和臨時(shí)表到磁盤 從前面的狀態(tài)計(jì)數(shù)器和其他信息來(lái)看 首先可以排除數(shù)據(jù)和日志的寫(xiě)入問(wèn)題 那么 只能假設(shè)MySQL 突然寫(xiě)入大量數(shù)據(jù)到臨時(shí)表或者排序文件 如何來(lái)觀察這種情況呢?有兩個(gè)簡(jiǎn)單的方法 一是觀察磁盤的可用空間 二是通過(guò)lsof 命令觀察服務(wù)器打開(kāi)的文件句柄 這兩個(gè)方法我們都采用了 結(jié)果也足以滿足我們的需求 下面是問(wèn)題期間每秒運(yùn)行df–h 的結(jié)果

下面則是lsof 的數(shù)據(jù) 因?yàn)槟承┰蛭覀兠课迕氩攀占淮?我們簡(jiǎn)單地將mysqld 在/tmp 中打開(kāi)的文件大小做了加總 并且把總大小和采樣時(shí)的時(shí)間戳一起輸出到結(jié)果文件中

$ awk

/mysqld *tmp/ {

total += $ ;

}

/^Sun Mar / total {

printf %s % f MB\n $ total/ / ;

total = ;

} lsof txt

: : MB

: : MB

: : MB

: : MB

: : MB

從這個(gè)數(shù)據(jù)可以看出 在問(wèn)題之初MySQL 大約寫(xiě)了 GB 的數(shù)據(jù)到臨時(shí)表 這和之前在SHOW PROCESSLIST 中有大量的 Copying to tmp table 相吻合 這個(gè)證據(jù)表明可能是某些效率低下的查詢風(fēng)暴耗盡了磁盤資源 根據(jù)我們的工作直覺(jué) 出現(xiàn)這種情況比較普遍的一個(gè)原因是緩存失效 當(dāng)memcached 中所有緩存的條目同時(shí)失效 而又有很多應(yīng)用需要同時(shí)訪問(wèn)的時(shí)候 就會(huì)出現(xiàn)這種情況 我們給開(kāi)發(fā)人員出示了部分采樣到的查詢 并討論這些查詢的作用 實(shí)際情況是 緩存同時(shí)失效就是罪魁禍?zhǔn)祝ㄟ@驗(yàn)證了我們的直覺(jué)) 一方面開(kāi)發(fā)人員在應(yīng)用層面解決緩存失效的問(wèn)題 另一方面我們也修改了查詢 避免使用磁盤臨時(shí)表 這兩個(gè)方法的任何一個(gè)都可以解決問(wèn)題 當(dāng)然最好是兩個(gè)都實(shí)施

返回目錄 高性能MySQL

編輯推薦

ASP NET開(kāi)發(fā)培訓(xùn)視頻教程

數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘培訓(xùn)視頻教程

lishixinzhi/Article/program/MySQL/201311/29695

深入淺出mysql和高性能mysql哪本好

看過(guò)高性能mysql,對(duì)于想深入了解mysql性能優(yōu)化的人來(lái)說(shuō)絕對(duì)值得一看

高性能mysql 第三版怎么樣

在MySQL社區(qū),這是一本重量級(jí)的書(shū),我不知道出版社是怎么挑選譯者的,但是很明顯,我個(gè)人的意見(jiàn),這次挑選非常的失敗。書(shū)中98頁(yè)倒數(shù)第4行的"binary search"的翻譯(二進(jìn)制搜索)已經(jīng)道出了一切,但凡學(xué)過(guò)計(jì)算機(jī)的,我估計(jì)都不能做出這樣的翻譯。在計(jì)算機(jī)領(lǐng)域,二進(jìn)制是一個(gè)專門的術(shù)語(yǔ),有特定的含義。我不僅懷疑譯者根本沒(méi)學(xué)過(guò)"binary search"算法,以至于只能按字面翻譯,我甚至懷疑他們連“二進(jìn)制”的含義可能也不懂,找這樣的人來(lái)翻譯,真是天大的笑話。 再舉一個(gè)術(shù)語(yǔ)的翻譯“secondary index”,書(shū)中的譯法是“第二索引”,暫且不論慣用的“二級(jí)索引”是否是一個(gè)標(biāo)準(zhǔn)的譯法,假如在主鍵之外,還有B,C兩個(gè)索引,如果B叫“第二索引”,那么C就應(yīng)該叫“第三索引”了?為什么C也叫“第二”呢,難道是并列第二?“第二”在漢語(yǔ)中是一個(gè)意思很明確的詞,你當(dāng)然可以說(shuō)“第二”也能表示“二級(jí)”的意思,這種牽強(qiáng)的脫離通用語(yǔ)義的翻譯真是對(duì)翻譯標(biāo)準(zhǔn)“信雅達(dá)”中“達(dá)”字的諷刺。 關(guān)于“達(dá)”我們還可以找一個(gè)例子,介紹coverring index的部分,譯文第96頁(yè),原文第124頁(yè)。原文是“For example,the sakila.actor table uses InnoDB and has an index on last_name, so the index can cover queries that retrieve the primary key column actor_id, even though that column isn’t technically part of the index”,譯文是“例如,sakila.actor表適用了InnoDB并且在last_name上有索引,因此,即使該列不是索引的一部分,索引頁(yè)可以覆蓋取得主鍵actor_id的查詢”,原文讀來(lái)沒(méi)有任何的歧義,譯文卻變了樣,第一遍讀的時(shí)候,你能分辨出“即使該列不是索引的一部分”中的“該列”是指代的“l(fā)ast_name"呢?還是后面出現(xiàn)的"actor_id”呢?將代詞放在指代的名詞之前出現(xiàn),這絕對(duì)是對(duì)人的智力的挑戰(zhàn),即便是詩(shī)歌,我也沒(méi)見(jiàn)漢語(yǔ)中有多少這樣的用法,遑論技術(shù)性文字。在原文中"that column"這個(gè)代詞出現(xiàn)在了"actor_id"之后,不知道為什么在譯文中,代詞就鉆到了指代的名詞之前。 如果可以拋開(kāi)“達(dá)”,還要爭(zhēng)辯詞的譯法是“見(jiàn)仁見(jiàn)智”的,那么對(duì)“信”的違背則已經(jīng)使這本重量級(jí)巨著的翻譯失去了最基本的存在價(jià)值,隨便舉兩個(gè)例子: 1. 4.6查詢提示優(yōu)化對(duì)HIGH_PRIORITY的描述,譯本第152頁(yè),原書(shū)第195頁(yè),原文是“HIGH_PRIORITY tells MySQL to schedule a SELECT statement before other statements that may be waiting for locks, so they can modify data.”,譯文是“HIGH_PRIORITY告訴MySQL將SELECT語(yǔ)句放在其他語(yǔ)句的前面,以便它修改數(shù)據(jù)”,原文中的“so they can modify data"變成了"以便它可以修改數(shù)據(jù)",復(fù)數(shù)形式的they變成了單數(shù)形式的"它",這個(gè)改變雖然細(xì)微,但直接影響了這個(gè)位置的代詞所指代的主語(yǔ),這個(gè)代詞到底是"SELECT statement"呢?還是"other statements that may be waiting for locks"?原文中當(dāng)然是其他能modify data的statements,而到了疑問(wèn)中,變成了"SELECT statement",問(wèn)一個(gè)菜鳥(niǎo)級(jí)的問(wèn)題,select statement能modify data嗎? 2. 還是4.6查詢提示優(yōu)化,對(duì)DELAYED的描述,譯文第152頁(yè),原文第196頁(yè)。原文是"It lets the statement to which it is applied return immediately and places the inserted rows into a buffer, which will be inserted in bulk when the table is free",譯文是"應(yīng)用了這個(gè)提示的語(yǔ)句會(huì)立即返回并將待插入的列放入緩沖區(qū),在表空閑的時(shí)候再執(zhí)行插入",粗看沒(méi)什么問(wèn)題,細(xì)看問(wèn)題一大堆。 2.1 在原文中,主語(yǔ)是it,指代的是"DELAYED"這個(gè)hint,到了譯文中,主語(yǔ)從"提示"本身變成了"應(yīng)用了這個(gè)提示的語(yǔ)句",于是在原文中的"delayed"這個(gè)hint一方面使語(yǔ)句立即返回,另一方面使MySQL在后臺(tái)處理被緩存的數(shù)據(jù)兩層意思變成了語(yǔ)句一方面返回,另一方面“將待插入的列放入緩沖區(qū)”,到底是"DELAYED"使數(shù)據(jù)被插入buffer,還是應(yīng)用了"DELAYED"的語(yǔ)句使數(shù)據(jù)被插入了buffer,區(qū)別雖然微妙,但區(qū)別就是區(qū)別,譯文的意思與原文已差之毫厘,謬以千里。 2.2 原文中"which will be inserted in bulk..."是一個(gè)被動(dòng)語(yǔ)態(tài),指數(shù)據(jù)被插入,主語(yǔ)沒(méi)有明確指出,在上下文環(huán)境中當(dāng)然是數(shù)據(jù)庫(kù);而到了譯文中,“在表空閑的時(shí)候再執(zhí)行插入”是一個(gè)主動(dòng)的語(yǔ)態(tài),“誰(shuí)”執(zhí)行了插入?如果和上句連起來(lái),很容易理解成“應(yīng)用了這個(gè)提示的語(yǔ)句在表空閑的時(shí)候再執(zhí)行插入”,這不是扯淡嗎?當(dāng)然,稍微有點(diǎn)數(shù)據(jù)庫(kù)常識(shí)的人都不會(huì)這樣理解,但原文原本語(yǔ)義清晰,翻譯過(guò)來(lái)卻主語(yǔ)混亂,實(shí)在令人難以接受。 2.2 在原文中的"rows",一個(gè)復(fù)數(shù)形式的詞,到了譯文中,變成了"列",假如說(shuō)復(fù)數(shù)變單數(shù)還能接受,把"row"翻譯成"列"真是天才的創(chuàng)舉。 2.3 原文中"will be inserted in bulk when ..."明確指出了insert的方式是"in bulk",但是這個(gè)信息在譯文中丟失了。 類似的問(wèn)題簡(jiǎn)直處處可見(jiàn),原文的文字簡(jiǎn)潔清晰,非常容易理解,但我讀到的譯文卻非常難以理解,更可恨的是,原文中大量的信息被扭曲,拋棄?!靶叛胚_(dá)”這三標(biāo)準(zhǔn)沒(méi)有一個(gè)做到。我個(gè)人的總結(jié)是,這個(gè)譯本的水平跟中國(guó)足球的水平一樣,能把球停在百米開(kāi)外,一個(gè)字,糙。 客觀地說(shuō),這本書(shū)至少將MySQL優(yōu)化的知識(shí)在中國(guó)的傳播門檻大大降低,但咱不是黃鶯,不會(huì)唱贊歌,既然是書(shū)評(píng),就是要來(lái)挑刺的,看不到刺,容不得刺,電子工業(yè)永遠(yuǎn)沒(méi)有趕上O'Relly的機(jī)會(huì),中國(guó)的技術(shù)書(shū)籍永遠(yuǎn)都只能是菜鳥(niǎo)水平。

mysql數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)

mysql數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)如下:

1、速度:運(yùn)行速度快。

2、價(jià)格:MySQL對(duì)多數(shù)個(gè)人來(lái)說(shuō)是免費(fèi)的。

3、容易使用;與其他大型數(shù)據(jù)庫(kù)的設(shè)置和管理相比,其復(fù)雜程度較低,容易學(xué)習(xí)。

4、可移植性:能夠工作在眾多不同的系統(tǒng)平臺(tái)上,例如:Windows、Linux、Unix、MacOS等。

5、豐富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Rudy和TCL等語(yǔ)言的APl。6、支持查詢語(yǔ)言:MySQL可以利用標(biāo)準(zhǔn)SQL語(yǔ)法和支持ODBC(開(kāi)放式數(shù)據(jù)庫(kù)連接)的應(yīng)用程序。

7、安全性和連接性;十分靈活和安全的權(quán)限和密碼系統(tǒng),允許主機(jī)驗(yàn)證。連接到服務(wù)器時(shí),所有的密碼均采用加密形式,從而保證了密碼安全。并且由于MySQL時(shí)網(wǎng)絡(luò)化的,因此可以在因特網(wǎng)網(wǎng)上的任何地方訪問(wèn),提高數(shù)據(jù)共享效率。

高性能MySQL:運(yùn)行基準(zhǔn)測(cè)試并分析結(jié)果

運(yùn)行基準(zhǔn)測(cè)試并分析結(jié)果

一旦準(zhǔn)備就緒 就可以著手基準(zhǔn)測(cè)試 收集和分析數(shù)據(jù)了

通常來(lái)說(shuō) 自動(dòng)化基準(zhǔn)測(cè)試是個(gè)好主意 這樣做可以獲得更精確的測(cè)試結(jié)果 因?yàn)樽詣?dòng)化的過(guò)程可以防止測(cè)試人員偶爾遺漏某些步驟 或者誤操作 另外也有助于歸檔整個(gè)測(cè)試過(guò)程

自動(dòng)化的方式有很多 可以是一個(gè)Makefile 文件或者一組腳本 腳本語(yǔ)言可以根據(jù)需要選擇 shell PHP Perl 等都可以 要盡可能地使所有測(cè)試過(guò)程都自動(dòng)化 包括裝載數(shù)據(jù) 系統(tǒng)預(yù)熱 執(zhí)行測(cè)試 記錄結(jié)果等

一旦設(shè)置了正確的自動(dòng)化操作 基準(zhǔn)測(cè)試將成為一步式操作 如果只是針對(duì)某些應(yīng)用做一次性的快速驗(yàn)證測(cè)試 可能就沒(méi)必要做自動(dòng)化 但只要未來(lái)可能會(huì)引用到測(cè)試結(jié)果 建議都盡量地自動(dòng)化 否則到時(shí)候可能就搞不清楚是如何獲得這個(gè)結(jié)果的 也不記得采用了什么參數(shù) 這樣就很難再通過(guò)測(cè)試重現(xiàn)結(jié)果了

基準(zhǔn)測(cè)試通常需要運(yùn)行多次 具體需要運(yùn)行多少次要看對(duì)結(jié)果的記分方式 以及測(cè)試的重要程度 要提高測(cè)試的準(zhǔn)確度 就需要多運(yùn)行幾次 一般在測(cè)試的實(shí)踐中 可以取最好的結(jié)果值 或者所有結(jié)果的平均值 亦或從五個(gè)測(cè)試結(jié)果里取最好三個(gè)值的平均值 可以根據(jù)需要更進(jìn)一步精確化測(cè)試結(jié)果 還可以對(duì)結(jié)果使用統(tǒng)計(jì)方法 確定置信區(qū)間(confidence interval)等 不過(guò)通常來(lái)說(shuō) 不會(huì)用到這種程度的確定性結(jié)果注 只要測(cè)試的結(jié)果能滿足目前的需求 簡(jiǎn)單地運(yùn)行幾輪測(cè)試 看看結(jié)果的變化就可以了 如果結(jié)果變化很大 可以再多運(yùn)行幾次 或者運(yùn)行更長(zhǎng)的時(shí)間 這樣都可以獲得更確定的結(jié)果

獲得測(cè)試結(jié)果后 還需要對(duì)結(jié)果進(jìn)行分析 也就是說(shuō) 要把 數(shù)字 變成 知識(shí) 最終的目的是回答在設(shè)計(jì)測(cè)試時(shí)的問(wèn)題 理想情況下 可以獲得諸如 升級(jí)到 核CPU 可以在保持響應(yīng)時(shí)間不變的情況下獲得超過(guò) % 的吞吐量增長(zhǎng) 或者 增加索引可以使查詢更快 的結(jié)論 如果需要更加科學(xué)化 建議在測(cè)試前讀讀null hypothesis 一書(shū) 但大部分情況下不會(huì)要求做這么嚴(yán)格的基準(zhǔn)測(cè)試

如何從數(shù)據(jù)中抽象出有意義的結(jié)果 依賴于如何收集數(shù)據(jù) 通常需要寫(xiě)一些腳本來(lái)分析數(shù)據(jù) 這不僅能減輕分析的工作量 而且和自動(dòng)化基準(zhǔn)測(cè)試一樣可以重復(fù)運(yùn)行 并易于文檔化 下面是一個(gè)非常簡(jiǎn)單的shell 腳本 演示了如何從前面的數(shù)據(jù)采集腳本采集到的數(shù)據(jù)中抽取時(shí)間維度信息 腳本的輸入?yún)?shù)是采集到的數(shù)據(jù)文件的名字

假設(shè)該腳本名為 *** yze 當(dāng)前面的腳本生成狀態(tài)文件以后 就可以運(yùn)行該腳本 可能會(huì)得到如下的結(jié)果

第一行是列的名字 第二行的數(shù)據(jù)應(yīng)該忽略 因?yàn)檫@是測(cè)試實(shí)際啟動(dòng)前的數(shù)據(jù) 接下來(lái)的行包含Unix 時(shí)間戳 日期 時(shí)間(注意時(shí)間數(shù)據(jù)是每 秒更新一次 前面腳本說(shuō)明時(shí)曾提過(guò)) 系統(tǒng)負(fù)載 數(shù)據(jù)庫(kù)的QPS(每秒查詢次數(shù))五列 這應(yīng)該是用于分析系統(tǒng)性能的最少數(shù)據(jù)需求了 接下來(lái)將演示如何根據(jù)這些數(shù)據(jù)快速地繪成圖形 并分析基準(zhǔn)測(cè)試過(guò)程中發(fā)生了什么

返回目錄 高性能MySQL

編輯推薦

ASP NET開(kāi)發(fā)培訓(xùn)視頻教程

數(shù)據(jù)倉(cāng)庫(kù)與數(shù)據(jù)挖掘培訓(xùn)視頻教程

lishixinzhi/Article/program/MySQL/201311/29735

網(wǎng)頁(yè)標(biāo)題:高性能的mysql怎么樣 mysql性能比較
分享路徑:http://muchs.cn/article22/doscdjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名云服務(wù)器、網(wǎng)站收錄、App開(kāi)發(fā)、Google、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站