《Java磨礪分清濁,實(shí)戰(zhàn)定乾坤:MySQL性能優(yōu)化感悟》要點(diǎn):
本文介紹了Java磨礪分清濁,實(shí)戰(zhàn)定乾坤:MySQL性能優(yōu)化感悟,希望對您有用。如果有疑問,可以聯(lián)系我們。
曾幾何時,我工作以后很長一段時間不知道該學(xué)些什么,月薪也穩(wěn)穩(wěn)地定格在了那里,我明白如果不做些什么,遲早會被應(yīng)屆生替換下去,因?yàn)榈览砗芎唵?你除了經(jīng)驗(yàn)沒有任何地方比他強(qiáng),公司不會花兩倍的錢來雇一個沒什么區(qū)其余人.
直到我看了xxx的《打造扛得住的MySQL數(shù)據(jù)庫架構(gòu)》,我好像重新找到了最初開始學(xué)習(xí)的激情和未來的發(fā)展方向.
課程一開始讓我有種山重水復(fù)疑無路,柳暗花明又一村的感覺,打開了一個MySQL的新世界,我第一次知道MySQL還有存儲引擎這個東西,而且它還是那么的重要,對于課程其中一部分的感悟分享給大家,篇幅有限不能傾囊道來,大家有條件的可以本身去看一下視頻. MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中.這些技術(shù)中的每一種技術(shù)都使用不同的存儲機(jī)制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力.通過選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善你的應(yīng)用的整體功能.而MySQL是支持自定義存儲引擎的,所以除了第三方存儲引擎,如果實(shí)力足夠甚至可以本身開發(fā)出一套存儲引擎.
我們來看一下MySQL常用存儲引擎的特點(diǎn):
在MySQL5.58版本以前,默認(rèn)是使用MyISAM存儲引擎的,也便是說5.58以前的MySQL默認(rèn)是不支持事務(wù)的,而5.58以后呢,默認(rèn)使用的是Innodb存儲引擎,是支持事務(wù)的.Innodb實(shí)現(xiàn)事務(wù)的方式是通過Redo Log 和 Undo Log來實(shí)現(xiàn)的.
Redo Log:主要用來實(shí)現(xiàn)事務(wù)的持久性,存儲的是已提交的事務(wù).由兩部門組成,一個是內(nèi)存中的重做日志緩沖區(qū),由innodb_log_buffer_size決定其大小,我們可以在MySQL命令行下使用show variables like 命令來查看,另一個則是重做日志文件是以id_logfile開頭的文件,存儲在MySQL的data目錄下,它的數(shù)量是由innodb_log_files_in_group參數(shù)來決定的,同樣可以使用show variables like命令來查看.
Undo Log:主要作用是實(shí)現(xiàn)MVCC(多版本并發(fā)控制),存儲的是未提交的事務(wù).當(dāng)事務(wù)進(jìn)行回滾的時候,就必要使用到Undo Log中的信息了.
Redo Log進(jìn)行的是順序?qū)懭?在數(shù)據(jù)庫運(yùn)行的時候,不必要對Redo Log進(jìn)行讀取操作,而Undo Log則是必要進(jìn)行隨機(jī)的讀寫的,從MySQL5.6版本開始,Undo Log可以獨(dú)立于系統(tǒng)表空間的存在,如果條件允許,可以把它放置在固態(tài)硬盤中,能大大增加服務(wù)器的性能.
那么如何選擇一個合適的存儲引擎來優(yōu)化MySQL的性能呢,首先要考慮一下如果必要事務(wù)的支持則最好使用Innodb,如果不必要使用事務(wù),并且大部分都是插入和查詢的操作,可以使用MyISAM,如果只是插入,很少查詢的話Archive也是個不錯的選擇.
但是我們的數(shù)據(jù)庫在生產(chǎn)環(huán)境中是需要進(jìn)行備份的,前面所介紹的所有存儲引擎中,只有Innodb有免費(fèi)的在線熱備份方案,要么就是收費(fèi)的方案.而且瓦解后恢復(fù)數(shù)據(jù),MyISAM損壞的幾率要高于Innodb,所以即使不需要事務(wù)的支持,也要優(yōu)先考慮Innodb,除非是某些比較特別的情況.
同時對于Innodb的事務(wù)有一個重要的參數(shù)Innodb_flush_log_at_trx_commit,它有三個選項(xiàng):
0:每秒進(jìn)行一次log寫入cache,并flush log到磁盤,事務(wù)提交時不作任何操作
1[默認(rèn)]:在每次事務(wù)提交以后,將log寫入cache,并flush log到磁盤
2[建議]:事務(wù)提交提交以后,執(zhí)行l(wèi)og數(shù)據(jù)寫入到cache,而且每秒執(zhí)行一次flush log到磁盤
第一種,容易丟失數(shù)據(jù);第二種,平安高但性能最差;第三種,性能相對較高并且相對平安.需要注意的是,第一種設(shè)置MySQL進(jìn)程崩潰就會至少丟失一秒數(shù)據(jù).第三種則是提交到內(nèi)存以后,準(zhǔn)備寫入磁盤時服務(wù)器死機(jī),才可能丟失一秒的數(shù)據(jù).
關(guān)于MySQL的優(yōu)化還有大量的操作,比如我們操作系統(tǒng)參數(shù)的配置,MySQL默認(rèn)參數(shù)的修改,硬件的選擇,表的結(jié)構(gòu)設(shè)計,索引的設(shè)計,查詢優(yōu)化,主從同步等等,這些能夠從根本上辦理MySQL的性能問題,打造真正扛得住的MySQL數(shù)據(jù)庫,也為大家突破兩萬月薪保駕護(hù)航.
最后我想說的是:寶劍鋒從磨礪出,梅花香自苦寒來.希望大家都能賡續(xù)的學(xué)習(xí)進(jìn)取,突破一個又一個的技術(shù)巔峰!
學(xué)習(xí)Java的同學(xué)注意了!!!
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎參加Java學(xué)習(xí)交流,裙號碼:253772578【長按復(fù)制】 我們一起學(xué)Java!
《Java磨礪分清濁,實(shí)戰(zhàn)定乾坤:MySQL性能優(yōu)化感悟》是否對您有啟發(fā),歡迎查看更多與《Java磨礪分清濁,實(shí)戰(zhàn)定乾坤:MySQL性能優(yōu)化感悟》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8688.html