qileilove

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

          MySQL數(shù)據(jù)庫(kù)性能優(yōu)化之存儲(chǔ)引擎選擇

           InnoDB

            1、特性

            具有較好的事務(wù)支持:支持4個(gè)事務(wù)隔離級(jí)別,支持多版本讀

            行級(jí)鎖定:通過索引實(shí)現(xiàn),全表掃描仍然會(huì)是表鎖,注意間隙鎖的影響

            讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)

            具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)

            整個(gè)表和主鍵以Cluster方式存儲(chǔ),組成一顆平衡樹

            所有Secondary Index都會(huì)保存主鍵信息

            2、適用場(chǎng)景

            需要事務(wù)支持(具有較好的事務(wù)特性)

            行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力,但需要確保查詢是通過索引完成

            數(shù)據(jù)更新較為頻繁的場(chǎng)景

            數(shù)據(jù)一致性要求較高

            硬件設(shè)備內(nèi)存較大,可以利用InnoDB較好的緩存能力來(lái)提高內(nèi)存利用率,盡可能減少磁盤 IO

            3、最佳實(shí)踐

            主鍵盡可能小,避免給Secondary index帶來(lái)過大的空間負(fù)擔(dān)

            避免全表掃描,因?yàn)闀?huì)使用表鎖

            盡可能緩存所有的索引和數(shù)據(jù),提高響應(yīng)速度

            在大批量小插入的時(shí)候,盡量自己控制事務(wù)而不要使用autocommit自動(dòng)提交

            合理設(shè)置innodb_flush_log_at_trx_commit參數(shù)值,不要過度追求安全性

            避免主鍵更新,因?yàn)檫@會(huì)帶來(lái)大量的數(shù)據(jù)移動(dòng)

            NDBCluster

            1、特性

            分布式:分布式存儲(chǔ)引擎,可以由多個(gè)NDBCluster存儲(chǔ)引擎組成集群分別存放整體數(shù)據(jù)的一部分

            支持事務(wù):和Innodb一樣,支持事務(wù)

            可與mysqld不在一臺(tái)主機(jī):可以和mysqld分開存在于獨(dú)立的主機(jī)上,然后通過網(wǎng)絡(luò)和mysqld通信交互

            內(nèi)存需求量巨大:新版本索引以及被索引的數(shù)據(jù)必須存放在內(nèi)存中,老版本所有數(shù)據(jù)和索引必須存在與內(nèi)存中

            2、適用場(chǎng)景

            具有非常高的并發(fā)需求

            對(duì)單個(gè)請(qǐng)求的響應(yīng)并不是非常的critical

            查詢簡(jiǎn)單,過濾條件較為固定,每次請(qǐng)求數(shù)據(jù)量較少,又不希望自己進(jìn)行水平Sharding

            3、最佳實(shí)踐

            盡可能讓查詢簡(jiǎn)單,避免數(shù)據(jù)的跨節(jié)點(diǎn)傳輸

            盡可能滿足SQL節(jié)點(diǎn)的計(jì)算性能,大一點(diǎn)的集群SQL節(jié)點(diǎn)會(huì)明顯多余Data節(jié)點(diǎn)

            在各節(jié)點(diǎn)之間盡可能使用萬(wàn)兆網(wǎng)絡(luò)環(huán)境互聯(lián),以減少數(shù)據(jù)在網(wǎng)絡(luò)層傳輸過程中的延時(shí)

            注:以上三個(gè)存儲(chǔ)引擎是目前相對(duì)主流的存儲(chǔ)引擎,還有其他類似如:Memory,Merge,CSV,Archive等存儲(chǔ)引擎的使用場(chǎng)景都相對(duì)較少,這里就不一一分析了,如果有朋友感興趣,后面再補(bǔ)充吧。

            MySQL 的存儲(chǔ)引擎可能是所有關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品中最具有特色的了,不僅可以同時(shí)使用多種存儲(chǔ)引擎,而且每種存儲(chǔ)引擎和MySQL之間使用插件方式這種非常松的耦合關(guān)系。

           

            由于各存儲(chǔ)引擎功能特性差異較大,這篇文章主要是介紹如何來(lái)選擇合適的存儲(chǔ)引擎來(lái)應(yīng)對(duì)不同的業(yè)務(wù)場(chǎng)景。

            系列的第五篇文章:MySQL數(shù)據(jù)庫(kù)性能優(yōu)化之存儲(chǔ)引擎選擇

            系列的第四篇文章:MySQL數(shù)據(jù)庫(kù)性能優(yōu)化之SQL優(yōu)化

            系列的第三篇文章:MySQL數(shù)據(jù)庫(kù)性能優(yōu)化之索引優(yōu)化

            系列的第二篇文章:MySQL 數(shù)據(jù)庫(kù)性能優(yōu)化之表結(jié)構(gòu)優(yōu)化

            系列的第一篇文章:MySQL 數(shù)據(jù)庫(kù)性能優(yōu)化之緩存參數(shù)優(yōu)化

            MyISAM

            1、特性

            不支持事務(wù):MyISAM存儲(chǔ)引擎不支持事務(wù),所以對(duì)事務(wù)有要求的業(yè)務(wù)場(chǎng)景不能使用

            表級(jí)鎖定:其鎖定機(jī)制是表級(jí)索引,這雖然可以讓鎖定的實(shí)現(xiàn)成本很小但是也同時(shí)大大降低了其并發(fā)性能

            讀寫互相阻塞:不僅會(huì)在寫入的時(shí)候阻塞讀取,MyISAM還會(huì)在讀取的時(shí)候阻塞寫入,但讀本身并不會(huì)阻塞另外的讀

            只會(huì)緩存索引:MyISAM可以通過key_buffer緩存以大大提高訪問性能減少磁盤IO,但是這個(gè)緩存區(qū)只會(huì)緩存索引,而不會(huì)緩存數(shù)據(jù)

            2、適用場(chǎng)景

            不需要事務(wù)支持(不支持)

            并發(fā)相對(duì)較低(鎖定機(jī)制問題)

            數(shù)據(jù)修改相對(duì)較少(阻塞問題)

            以讀為主

            數(shù)據(jù)一致性要求不是非常高

            3、最佳實(shí)踐

            盡量索引(緩存機(jī)制)

            調(diào)整讀寫優(yōu)先級(jí),根據(jù)實(shí)際需求確保重要操作更優(yōu)先

            啟用延遲插入改善大批量寫入性能

            盡量順序操作讓insert數(shù)據(jù)都寫入到尾部,減少阻塞

            分解大的操作,降低單個(gè)操作的阻塞時(shí)間

            降低并發(fā)數(shù),某些高并發(fā)場(chǎng)景通過應(yīng)用來(lái)進(jìn)行排隊(duì)機(jī)制

            對(duì)于相對(duì)靜態(tài)的數(shù)據(jù),充分利用Query Cache可以極大的提高訪問效率

            MyISAM的Count只有在全表掃描的時(shí)候特別高效,帶有其他條件的count都需要進(jìn)行實(shí)際的數(shù)據(jù)訪問

           InnoDB

            1、特性

            具有較好的事務(wù)支持:支持4個(gè)事務(wù)隔離級(jí)別,支持多版本讀

            行級(jí)鎖定:通過索引實(shí)現(xiàn),全表掃描仍然會(huì)是表鎖,注意間隙鎖的影響

            讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)

            具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)

            整個(gè)表和主鍵以Cluster方式存儲(chǔ),組成一顆平衡樹

            所有Secondary Index都會(huì)保存主鍵信息

            2、適用場(chǎng)景

            需要事務(wù)支持(具有較好的事務(wù)特性)

            行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力,但需要確保查詢是通過索引完成

            數(shù)據(jù)更新較為頻繁的場(chǎng)景

            數(shù)據(jù)一致性要求較高

            硬件設(shè)備內(nèi)存較大,可以利用InnoDB較好的緩存能力來(lái)提高內(nèi)存利用率,盡可能減少磁盤 IO

            3、最佳實(shí)踐

            主鍵盡可能小,避免給Secondary index帶來(lái)過大的空間負(fù)擔(dān)

            避免全表掃描,因?yàn)闀?huì)使用表鎖

            盡可能緩存所有的索引和數(shù)據(jù),提高響應(yīng)速度

            在大批量小插入的時(shí)候,盡量自己控制事務(wù)而不要使用autocommit自動(dòng)提交

            合理設(shè)置innodb_flush_log_at_trx_commit參數(shù)值,不要過度追求安全性

            避免主鍵更新,因?yàn)檫@會(huì)帶來(lái)大量的數(shù)據(jù)移動(dòng)

            NDBCluster

            1、特性

            分布式:分布式存儲(chǔ)引擎,可以由多個(gè)NDBCluster存儲(chǔ)引擎組成集群分別存放整體數(shù)據(jù)的一部分

            支持事務(wù):和Innodb一樣,支持事務(wù)

            可與mysqld不在一臺(tái)主機(jī):可以和mysqld分開存在于獨(dú)立的主機(jī)上,然后通過網(wǎng)絡(luò)和mysqld通信交互

            內(nèi)存需求量巨大:新版本索引以及被索引的數(shù)據(jù)必須存放在內(nèi)存中,老版本所有數(shù)據(jù)和索引必須存在與內(nèi)存中

            2、適用場(chǎng)景

            具有非常高的并發(fā)需求

            對(duì)單個(gè)請(qǐng)求的響應(yīng)并不是非常的critical

            查詢簡(jiǎn)單,過濾條件較為固定,每次請(qǐng)求數(shù)據(jù)量較少,又不希望自己進(jìn)行水平Sharding

            3、最佳實(shí)踐

            盡可能讓查詢簡(jiǎn)單,避免數(shù)據(jù)的跨節(jié)點(diǎn)傳輸

            盡可能滿足SQL節(jié)點(diǎn)的計(jì)算性能,大一點(diǎn)的集群SQL節(jié)點(diǎn)會(huì)明顯多余Data節(jié)點(diǎn)

            在各節(jié)點(diǎn)之間盡可能使用萬(wàn)兆網(wǎng)絡(luò)環(huán)境互聯(lián),以減少數(shù)據(jù)在網(wǎng)絡(luò)層傳輸過程中的延時(shí)

            注:以上三個(gè)存儲(chǔ)引擎是目前相對(duì)主流的存儲(chǔ)引擎,還有其他類似如:Memory,Merge,CSV,Archive等存儲(chǔ)引擎的使用場(chǎng)景都相對(duì)較少,這里就不一一分析了,如果有朋友感興趣,后面再補(bǔ)充吧。

          posted on 2012-05-09 10:04 順其自然EVO 閱讀(1472) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫(kù)

          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 甘泉县| 个旧市| 宁武县| 合阳县| 嘉禾县| 吉安县| 西宁市| 托克托县| 东山县| 枣庄市| 孝昌县| 蒲江县| 八宿县| 辰溪县| 察隅县| 从化市| 大埔县| 杭州市| 三江| 若尔盖县| 巩留县| 龙南县| 乾安县| 平昌县| 濮阳县| 宝坻区| 广饶县| 刚察县| 密山市| 石门县| 琼中| 靖宇县| 庆云县| 姚安县| 泾川县| 房产| 石楼县| 山阴县| 揭阳市| 桐柏县| 巨野县|