??? MYSQL用了好多年了,一次次的優(yōu)化,一次次的頂過崩潰的邊緣,相信能有這樣經(jīng)歷的人也不多。這里我寫一點(diǎn)這么多年來優(yōu)化MYSQL的經(jīng)驗(yàn)。
??? 讓我們從頭開始
???? 什么機(jī)器比較適合跑MYSQL?原則就是IO操作一定要快,要少。在這個(gè)原則下,內(nèi)存肯定是越大越好,硬盤肯定是越快越好。1快硬盤不夠快,那就兩塊,做RAID0。
??? 什么操作系統(tǒng)比較適合跑MYSQL?我試過Linux,FreeBSD,Solaris。solaris是最差的,因?yàn)镮O慢,的確比其他兩個(gè)慢,所以我都不用它了。FBSD和linux哪個(gè)好?這個(gè)我倒是沒認(rèn)真比過,感覺上,fbsd的IO比linux快,所以我有一個(gè)5千萬條記錄的mysql跑在fbsd上,訪問量很高的情況下,感覺還是很快。最近的項(xiàng)目都統(tǒng)一到Linux下了,感覺mysql在linux下跑,也不錯(cuò)。看過不少評(píng)測(cè),都說mysql在linux比fbsd快,因?yàn)槲覜]有實(shí)際對(duì)比,只有各自的體會(huì),所以也不多評(píng)論了。不過fbsd有一點(diǎn)要注意,它默認(rèn)的數(shù)據(jù)段大小只有1G,你想開大緩存,就必須重新編譯內(nèi)核,不然會(huì)數(shù)據(jù)段錯(cuò)。
??? MYSQL5.1都已經(jīng)在測(cè)試了,我們應(yīng)該用什么版本?如果你是新開發(fā)一個(gè)產(chǎn)品,建議用5.0,不過我沒實(shí)際用過,不好說。我用的最多的是3.23.x和4.1.x。由于沒有在相同的環(huán)境下測(cè)試,所以不敢說哪個(gè)版本性能最好。所以還是只推薦5.0或者4.1畢竟是現(xiàn)在MYSQL主推的,比較有保證。
??? 我最近用的最多的是4.1。現(xiàn)在我一般會(huì)下載for linux+icc編譯的二進(jìn)制包,以前我一般下源文件自己編譯,源代碼編譯的是否好,直接影響性能。關(guān)于編譯mysql的選項(xiàng),足夠另外寫一篇東西了。這里就不提了,有興趣的看看BUILD目錄下的東西。現(xiàn)在我常用的是編譯好的二進(jìn)制包,因?yàn)樗木幾g環(huán)境已經(jīng)基本最優(yōu)化,而且加上icc編譯器的優(yōu)化,性能還能有一點(diǎn)提升。
??? 接著就是my.cnf了。我一般在support-files目錄下的my-innodb-heavy-4G.cnf文件的基礎(chǔ)上來修改。對(duì)性能影響比較大的,有table_cache,sort_buffer_size,join_buffer_size,query_cache_size,key_buffer_size,read_buffer_size,innodb_additional_mem_pool_size,innodb_buffer_pool_size。用INNODB是肯定的。innodb_additional_mem_pool_size可以大一點(diǎn),我一般設(shè)256M,可以減少不斷增加緩存的操作,innodb_buffer_pool_size是初始化的緩存,我覺得2G有點(diǎn)太大了,我傾向于給操作系統(tǒng)本身留點(diǎn)緩存空間。我一般設(shè)到1.2G,他自己有需要,也會(huì)慢慢漲到2G。
??? 讓我們從頭開始
???? 什么機(jī)器比較適合跑MYSQL?原則就是IO操作一定要快,要少。在這個(gè)原則下,內(nèi)存肯定是越大越好,硬盤肯定是越快越好。1快硬盤不夠快,那就兩塊,做RAID0。
??? 什么操作系統(tǒng)比較適合跑MYSQL?我試過Linux,FreeBSD,Solaris。solaris是最差的,因?yàn)镮O慢,的確比其他兩個(gè)慢,所以我都不用它了。FBSD和linux哪個(gè)好?這個(gè)我倒是沒認(rèn)真比過,感覺上,fbsd的IO比linux快,所以我有一個(gè)5千萬條記錄的mysql跑在fbsd上,訪問量很高的情況下,感覺還是很快。最近的項(xiàng)目都統(tǒng)一到Linux下了,感覺mysql在linux下跑,也不錯(cuò)。看過不少評(píng)測(cè),都說mysql在linux比fbsd快,因?yàn)槲覜]有實(shí)際對(duì)比,只有各自的體會(huì),所以也不多評(píng)論了。不過fbsd有一點(diǎn)要注意,它默認(rèn)的數(shù)據(jù)段大小只有1G,你想開大緩存,就必須重新編譯內(nèi)核,不然會(huì)數(shù)據(jù)段錯(cuò)。
??? MYSQL5.1都已經(jīng)在測(cè)試了,我們應(yīng)該用什么版本?如果你是新開發(fā)一個(gè)產(chǎn)品,建議用5.0,不過我沒實(shí)際用過,不好說。我用的最多的是3.23.x和4.1.x。由于沒有在相同的環(huán)境下測(cè)試,所以不敢說哪個(gè)版本性能最好。所以還是只推薦5.0或者4.1畢竟是現(xiàn)在MYSQL主推的,比較有保證。
??? 我最近用的最多的是4.1。現(xiàn)在我一般會(huì)下載for linux+icc編譯的二進(jìn)制包,以前我一般下源文件自己編譯,源代碼編譯的是否好,直接影響性能。關(guān)于編譯mysql的選項(xiàng),足夠另外寫一篇東西了。這里就不提了,有興趣的看看BUILD目錄下的東西。現(xiàn)在我常用的是編譯好的二進(jìn)制包,因?yàn)樗木幾g環(huán)境已經(jīng)基本最優(yōu)化,而且加上icc編譯器的優(yōu)化,性能還能有一點(diǎn)提升。
??? 接著就是my.cnf了。我一般在support-files目錄下的my-innodb-heavy-4G.cnf文件的基礎(chǔ)上來修改。對(duì)性能影響比較大的,有table_cache,sort_buffer_size,join_buffer_size,query_cache_size,key_buffer_size,read_buffer_size,innodb_additional_mem_pool_size,innodb_buffer_pool_size。用INNODB是肯定的。innodb_additional_mem_pool_size可以大一點(diǎn),我一般設(shè)256M,可以減少不斷增加緩存的操作,innodb_buffer_pool_size是初始化的緩存,我覺得2G有點(diǎn)太大了,我傾向于給操作系統(tǒng)本身留點(diǎn)緩存空間。我一般設(shè)到1.2G,他自己有需要,也會(huì)慢慢漲到2G。