自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實(shí)例詳解Linux下MySQL數(shù)據(jù)庫(kù)性能調(diào)優(yōu)方法

數(shù)據(jù)庫(kù) MySQL 數(shù)據(jù)庫(kù)運(yùn)維
本文將以一個(gè)實(shí)際案例,為大家講解Linux下MySQL數(shù)據(jù)庫(kù)性能調(diào)優(yōu)方法,主要平臺(tái)是RedHat操作系統(tǒng)。

以下的環(huán)境具備一定的代表性,可以說(shuō)是中小企業(yè)一般配置和工作環(huán)境。希望通過(guò)本文能讓大家理解Linux下MySQL數(shù)據(jù)庫(kù)性能調(diào)優(yōu)方法。51CTO向您推薦《MySQL數(shù)據(jù)庫(kù)入門與精通教程》。

硬件準(zhǔn)備環(huán)境:

硬盤: 16塊 SAS 15K RAID5 帶512MCache

CPU: AMD 4核兩顆

內(nèi)存: 16G

 軟件環(huán)境:

操作系統(tǒng): RedHat AS4.6 2.6.9-67.ELsmp MySQL: 5.0

下面分別根據(jù)不同場(chǎng)景進(jìn)行性能調(diào)優(yōu):

使用場(chǎng)景A: 寫操作(插入/查詢/刪除)密集,而且數(shù)據(jù)容量遠(yuǎn)遠(yuǎn)超硬件準(zhǔn)備環(huán)境:

硬盤: 16塊 SAS 15K RAID5 帶512MCache

CPU:    AMD 4核兩顆

內(nèi)存: 16G

軟件環(huán)境

操作系統(tǒng): RedHat AS4.6 2.6.9-67.ELsmp

MySQL: 5.0

下面分別根據(jù)不同場(chǎng)景進(jìn)行性能調(diào)優(yōu):

使用場(chǎng)景A:

寫操作(插入/查詢/刪除)密集,而且數(shù)據(jù)容量遠(yuǎn)遠(yuǎn)超過(guò)內(nèi)存的大?。ㄗ钚∈?00G以上,甚至更大到1.5T以上), 每秒需要以千為單位的事務(wù)操作

數(shù)據(jù)可靠性要求不高,允許丟幾條記錄(硬件出故障時(shí))

優(yōu)化方式:

在這種情況下,數(shù)據(jù)庫(kù)的Cache基本上命中率是非常低的,對(duì)數(shù)據(jù)庫(kù)的操作基本上就是對(duì)磁盤進(jìn)行操作, 因此側(cè)重點(diǎn)應(yīng)該是對(duì)磁盤相關(guān)優(yōu)化。

首先是考慮數(shù)據(jù)庫(kù)存儲(chǔ)引擎,由于涉及插入/刪除/查詢等操作,而且要支持事務(wù),因此考慮使用InnoDB存儲(chǔ)引擎,不考慮MyIsam原因是該存儲(chǔ)引擎是表級(jí)鎖,有數(shù)據(jù)刪除時(shí)會(huì)非常慢。

設(shè)置合適的MySQL 參數(shù),由于有16G內(nèi)存,因此參數(shù)設(shè)置如下

 

  1. innodb_buffer_pool_size=8G  
  2. innodb_additional_mem_pool_size = 800M,  
  3. innodb_log_buffer_size = 4M  
  4. innodb_log_file_size = 500M  
  5. innodb_log_files_in_group = 4  
  6. log-bin 

 

因?yàn)槭褂弥鱾鋸?fù)制,因此需要打開(kāi)Log-Bin,這里就涉及一個(gè)sync-bin的概念,缺省情況下,sync-bin 在MySQL中是關(guān)閉的,但存在一個(gè)風(fēng)險(xiǎn),因?yàn)閷懭罩緵](méi)有刷新到硬盤中去的話,日志是寫在操作系統(tǒng)的文件系統(tǒng)里的Cache中,這樣若機(jī)器斷電,那么日志信息將部分丟失。為了減少數(shù)據(jù)丟失,我們測(cè)試了sync-bin=1,sync-bin=5和sync-bin=20,三種情況,sync-bin=1的情況下,丟失數(shù)據(jù)最壞概率是丟一個(gè)事務(wù)的數(shù)據(jù),但性能非常差;設(shè)置sync-bin=5的情況下,性能可以提高1倍左右;設(shè)置sync-bin=20時(shí),性能比sync-bin=5又可以提高1倍,設(shè)置大于20的值,基本上相差不大,性能提高不了多少,最壞20個(gè)事務(wù)數(shù)據(jù)丟失是在我們的允許范圍之內(nèi),因此設(shè)置20是個(gè)合理的值,這個(gè)值具體取決于你的系統(tǒng)能夠最壞允許丟少的事務(wù)數(shù)據(jù)。

若你的系統(tǒng)對(duì)數(shù)據(jù)丟失不于考慮,可以關(guān)閉sync-bin,這時(shí)數(shù)據(jù)刷新到硬盤完全取決于操作系統(tǒng)的配置,相關(guān)的配置參數(shù)有如下:

 

  1. /proc/sys/vm/dirty_ratio 

這 個(gè)參數(shù)控制一個(gè)進(jìn)程在文件系統(tǒng)中的文件系統(tǒng)寫緩沖區(qū)的大小,單位是百分比,表示系統(tǒng)內(nèi)存的百分比,表示當(dāng)一個(gè)進(jìn)程中寫緩沖使用到系統(tǒng)內(nèi)存多少的時(shí)候,再有 磁盤寫操作時(shí)開(kāi)始向磁盤寫出數(shù)據(jù)。增大之會(huì)使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當(dāng)你需要持續(xù)、恒定的寫入場(chǎng)合時(shí),應(yīng)該降 低其數(shù)值,一般缺省是 40。更新方法

 echo 30 >/proc/sys/vm/dirty_ratio (或則修改/etc/sysctl.conf文件,增加sys.vm.dirty_ratio=30 重起機(jī)器)

 

  1. /proc/sys/vm/dirty_background_ratio 

這個(gè)參數(shù)控制文件系統(tǒng)的pdflush進(jìn)程,在何時(shí)刷新磁盤。單位是百分比,表示系統(tǒng)總內(nèi)存的百分比,意思是當(dāng)磁盤的臟數(shù)據(jù)緩沖到系統(tǒng)內(nèi)存多少的時(shí)候,pdflush開(kāi)始把臟數(shù)據(jù)刷新到磁盤。增大會(huì)使用更多系統(tǒng)內(nèi)存用于磁盤寫緩沖,也可以極大提高系統(tǒng)的寫性能。但是,當(dāng)你需要持續(xù)、恒定的寫入場(chǎng)合時(shí),應(yīng)該降低其數(shù)值,一般缺省是10。

 

  1. /proc/sys/vm/dirty_writeback_centisecs 

Pdflush寫后臺(tái)進(jìn)程每隔多久被喚醒并執(zhí)行把臟數(shù)據(jù)寫出到硬盤。單位是 1/100 秒。缺省數(shù)值是500,也就是 5 秒。如果你的系統(tǒng)是持續(xù)地寫入動(dòng)作,那么實(shí)際上還是降低這個(gè)數(shù)值比較好,這樣可以把尖峰的寫操作削平成多次寫操作。設(shè)置方法如下:

 

  1. echo 200 >/proc/sys/vm/dirty_writeback_centisecs  
  2. /proc/sys/vm/dirty_expire_centisecs 

 

這個(gè)參數(shù)聲明Linux內(nèi)核寫緩沖區(qū)里面的臟數(shù)據(jù)多“舊”了之后,pdflush進(jìn)程就開(kāi)始考慮寫到磁盤中去。單位是 1/100秒。缺省是 30000,也就是 30 秒的數(shù)據(jù)就算舊了,將會(huì)刷新磁盤。對(duì)于特別重載的寫操作來(lái)說(shuō),這個(gè)值適當(dāng)縮小也是好的,但也不能縮小太多,因?yàn)榭s小太多也會(huì)導(dǎo)致IO提高太快。建議設(shè)置為 1500,也就是15秒算舊。

 

  1. echo 1500 >/proc/sys/vm/ dirty_expire_centisecs 

因此若沒(méi)有調(diào)整這些參數(shù),全部以缺省值,而且關(guān)閉sync-bin的話,那么最多丟失的數(shù)據(jù)是:

5秒種(dirty_writeback_centisecs)之內(nèi)的,小于1.6G的數(shù)據(jù)(dirty_background_ratio,16G/10=1.6G)

當(dāng)然,實(shí)際上5秒之內(nèi)不太可能寫1.6G的數(shù)據(jù),因此最壞就是5秒鐘之內(nèi)的數(shù)據(jù)丟失。因此若要關(guān)閉sync-bin,又不想丟失太多數(shù)據(jù)的話,可以通過(guò)調(diào)整dirty_writeback_centisecs這個(gè)參數(shù),如調(diào)整到200(2秒),這樣最多就丟2秒鐘的數(shù)據(jù)。又可以提高數(shù)據(jù)的寫能力。

MySQL里還有一個(gè)參數(shù)可以調(diào)整,提高數(shù)據(jù)庫(kù)的寫能力,那就是

 

  1. innodb_flush_log_at_trx_commit 

這個(gè)參數(shù)默認(rèn)是1,即每次事務(wù)Commit時(shí),都刷新日志,以免數(shù)據(jù)丟失。因?yàn)槲覀兊南到y(tǒng)允許丟失少量數(shù)據(jù),因此可以把innodb_flush_log_at_trx_commit設(shè)置為2,允許丟失一個(gè)事務(wù)的數(shù)據(jù),經(jīng)測(cè)試,發(fā)現(xiàn)2可以提高25%左右的性能。

另外對(duì)于文件系統(tǒng)的mount方式,noatime方式也可以提高部分性能(數(shù)據(jù)庫(kù)專用的服務(wù)器,一般是noatime)

當(dāng)數(shù)據(jù)有刪除更新操作后,時(shí)間長(zhǎng)后一般有碎片,導(dǎo)致索引空間不緊湊,占用更多的硬盤空間,因此會(huì)導(dǎo)致查詢編碼,解決辦法是定期執(zhí)行下面的語(yǔ)句:

 

  1. ALTER TABLE tbl_name ENGINE=INNODB 

另外若sql語(yǔ)句中有sort 和group by之類,需要增大sort_buffer_size

這個(gè)參數(shù) 是每客戶端連接的,當(dāng)有sort/group查詢時(shí),會(huì)分配sort_buffer_size大小的內(nèi)存,因此若連接很多,則要小心;合適的值可以查看 SHOW GLOBAL STATUS里面Sort_merge_passes的信息以及Created_tmp_tables之類信息。

【編輯推薦】

  1. MySQL創(chuàng)始人打造MariaDB 全面兼容MySQL 5.1
  2. 從MySQL 5.5發(fā)布看開(kāi)源數(shù)據(jù)庫(kù)版本升級(jí)新模式
  3. MySQL 5.5發(fā)布 支持半同步復(fù)制
  4. 詳解MySQL中EXPLAIN解釋命令
  5. MySQL數(shù)據(jù)庫(kù)中的外鍵約束詳解
責(zé)任編輯:彭凡 來(lái)源: ChinaUnix
相關(guān)推薦

2011-07-08 16:02:54

HBase

2022-05-10 10:02:51

openGauss性能調(diào)優(yōu)數(shù)據(jù)庫(kù)

2019-08-13 08:32:14

MySQL數(shù)據(jù)庫(kù)性能調(diào)優(yōu)

2011-04-25 09:12:47

LinuxIO數(shù)據(jù)庫(kù)

2023-04-03 10:25:00

數(shù)據(jù)庫(kù)性能調(diào)優(yōu)

2009-04-01 11:17:52

內(nèi)存分配調(diào)優(yōu)Oracle

2011-05-24 09:45:41

Oracle數(shù)據(jù)庫(kù)系統(tǒng)調(diào)優(yōu)

2010-05-04 17:08:24

Oracle數(shù)據(jù)庫(kù)

2019-07-08 14:05:53

數(shù)據(jù)庫(kù)JVMSQL

2010-04-07 13:32:39

Oracle調(diào)優(yōu)

2011-03-10 14:40:54

LAMPMysql

2023-10-04 11:16:03

數(shù)據(jù)庫(kù)MySQL

2017-07-04 13:02:02

Linux系統(tǒng)性能調(diào)優(yōu)工具

2011-04-18 13:46:24

數(shù)據(jù)庫(kù)設(shè)計(jì)

2022-03-24 10:57:18

數(shù)據(jù)庫(kù)MySQLSQL

2010-10-15 13:45:20

安裝MySql數(shù)據(jù)庫(kù)

2013-03-18 15:35:30

2011-08-15 18:09:46

查詢性能調(diào)優(yōu)索引優(yōu)化

2018-01-15 15:35:15

數(shù)據(jù)庫(kù)性能調(diào)優(yōu)案例

2009-03-30 14:19:26

優(yōu)化數(shù)據(jù)庫(kù)MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)