Centos6.4下mysql5.6.10的性能優(yōu)化
掃描二維碼
隨時(shí)隨地手機(jī)看文章
測試配置腳本時(shí)使用如下命令:
rm?-rf??/var/log/mysqld.log /usr/local/mysql/bin/mysqld_safe?--log-error=/var/log/mysqld.log vi?/var/log/mysqld.log
然后查看 /var/log/mysqld.log就能看出來為什么mysql沒有正常啟動(dòng)了。
?
?
vi /etc/my.cnf
在[mysqld]配置節(jié)下添加:
[mysqld]
#myslqd服務(wù)運(yùn)行時(shí)的端口號
port=3306
#socket文件是在Linux環(huán)境下特有的,用戶的客戶端軟件連接可以不通過TCP/IP網(wǎng)絡(luò)而直接使用unix socket連接到Mysql。
socket=/tmp/mysql.sock
#避免Mysql的外部鎖定,減少出錯(cuò)幾率,增強(qiáng)穩(wěn)定性。
skip-external-locking
#禁止MySql對外部連接進(jìn)行DNS解析,使用這一選項(xiàng)可以消除MySQL進(jìn)行NDS解析的時(shí)間。但需要注意的是:如果開啟該選項(xiàng),則所有遠(yuǎn)程主機(jī)連
接授權(quán)都要使用IP地址方式了,否則MYSQL將無法正常處理連接請求。
skip-name-resolve
#back_log參數(shù)的值指出在MySQL暫時(shí)停止響應(yīng)新請求之前,短時(shí)間內(nèi)的多少個(gè)請求可以被存在對堆棧中,如果系統(tǒng)短時(shí)間內(nèi)有很多連接,則需>要增大該參數(shù)的值,該參數(shù)值指定到來的TCP/IP連接的監(jiān)聽隊(duì)列的大小。不同的操作系統(tǒng)在這個(gè)隊(duì)列的大小有自己的限制,如果試圖將back_log設(shè)定得高于操作系統(tǒng)的限制將是無效的,其默認(rèn)值為50,對于LINUX系統(tǒng)而言,推薦設(shè)置為小于512的整數(shù)。
back_log=384
#索引緩沖區(qū)大小,增加它可得到更好的索引處理性能,對于內(nèi)存在4GB左右的服務(wù)器,該參數(shù)可設(shè)置為256M或384M。如果該參數(shù)值設(shè)置的過大>反而會(huì)使服務(wù)器的整體效率降低。
key_buffer_size=384M
#設(shè)定在網(wǎng)絡(luò)傳輸中一次消息傳輸量的最大值,系統(tǒng)默認(rèn)值為1MB,最大值是1GB,必須設(shè)定為1024的倍數(shù),單位為字節(jié)。
max_allowed_packet=4M
#設(shè)置MySQL每個(gè)線程的堆棧大小,默認(rèn)值足夠大,可滿足普通操作??稍O(shè)置范圍為128KB至4GB,默認(rèn)192K。
thread_stack=256k
#設(shè)定查詢排序時(shí)所能使用的緩沖區(qū)大小,系統(tǒng)默認(rèn)大小為2MB,從5.1.23版本開始,在除了WINDOWS 之外的64位平臺上可以4GB的限制。該參數(shù)
對應(yīng)的分配內(nèi)在是每個(gè)連接獨(dú)占的,如果有100個(gè)連接,那么實(shí)際分配的總排序緩沖區(qū)大小為100*6=600MB,那么對于內(nèi)存4GB左右的服務(wù)器來>說,推薦將其設(shè)置為6MB-8MB。
sort_buffer_size=6M
#讀查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對應(yīng)的分配內(nèi)在也是每個(gè)連接獨(dú)享。
read_buffer_size=4M
#設(shè)置Thread Cache池中可以緩存的連接池線程最大數(shù)量,可設(shè)置為0-16384,默認(rèn)為0。1GB內(nèi)存我們配置為8,2GB內(nèi)存我們配置為16,4GB或4GB以上內(nèi)在我們配置為64。
thread_cache_size=64
#指定Mysql查詢緩沖區(qū)的大小,可以通過在Mysql控制臺觀察,如果Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況,如果
Qcache_hits的值非常大,則表明查詢緩沖使用的非常頻繁
query_cache_size=64M
#設(shè)置內(nèi)在臨時(shí)表最大值,如果超過該值,則會(huì)將臨時(shí)表寫入磁盤,其范圍為1KB至4GB。
tmp_table_size=256M
#指定MYSQL允許的最大連接進(jìn)程數(shù),如果在訪問程序時(shí)經(jīng)常出現(xiàn)TOO MANY CONNECTIONS的錯(cuò)誤提示,則需要增大該參數(shù)值。
max_connections=5000
#指定一個(gè)請求的最大連接時(shí)間,對于4GB左右內(nèi)在的服務(wù)器來說,可以將其設(shè)置為5-10
wait_timeout=120
#該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量*2,比如,服務(wù)器有兩個(gè)物理CPU,每個(gè)物理CPU支持HT超線程,所以實(shí)際取值4*2=8,這也是目前雙四核主流
服務(wù)器的配置。
thread_concurrency=8
#開啟該選項(xiàng)可以徹底關(guān)閉MYSQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問MYSQL的數(shù)據(jù)庫服務(wù)器,則不要開啟該選項(xiàng),否則>將無法正常連接。
skip-networking
innodb_flush_log_at_trx_commit
#抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了調(diào)整這個(gè)值。默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush)
硬盤,這是很費(fèi)時(shí)的。特別是使用電池供電緩存(Battery backed up cache)時(shí)。設(shè)成2對于很多運(yùn)用,特別是從MyISAM表轉(zhuǎn)過來的是可以的>,它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會(huì)每秒flush到硬 盤,所以你一般不會(huì)丟失超過1-2秒的更新。設(shè)成0會(huì)更快一點(diǎn),但安>全方面比較差,即使MySQL掛了也可能會(huì)丟失事務(wù)的數(shù)據(jù)。而值2只會(huì)在整個(gè)操作系統(tǒng) 掛了時(shí)才可能丟數(shù)據(jù)。
innodb_flush_log_at_trx_commit=2
#這是 InnoDB 存儲引擎的事務(wù)日志所使用的緩沖區(qū)。類似于 Binlog Buffer,InnoDB 在寫事務(wù)日志的時(shí)候,為了提高性能,也是先將信息寫>入 Innofb Log Buffer 中,當(dāng)滿足 innodb_flush_log_trx_commit 參數(shù)所設(shè)置的相應(yīng)條件(或者日志緩沖區(qū)寫滿)之后,才會(huì)將日志寫到文>件(或者同步到磁盤)中??梢酝ㄟ^ innodb_log_buffer_size
參數(shù)設(shè)置其可以使用的最大內(nèi)存空間。
innodb_log_buffer_size=2M
#這個(gè)數(shù)字要根據(jù)實(shí)際的情況來設(shè)定,但對于大多數(shù)的情況,是一個(gè)比較合適的設(shè)置
innodb_thread_concurrency=8
#tmp_table_size 的默認(rèn)大小是 32M。如果一張臨時(shí)表超出該大小,MySQL產(chǎn)生一個(gè) The table tbl_name is full 形式的錯(cuò)誤,如果你做很多
高級 GROUP BY 查詢,增加 tmp_table_size 值。
tmp_table_size=64M
#隨機(jī)讀取數(shù)據(jù)緩沖區(qū)使用內(nèi)存(read_rnd_buffer_size):和順序讀取相對應(yīng),當(dāng) MySQL 進(jìn)行非順序讀?。S機(jī)讀?。?shù)據(jù)塊的時(shí)候,會(huì)利用>這個(gè)緩沖區(qū)暫存讀取的數(shù)據(jù)。如根據(jù)索引信息讀取表數(shù)據(jù),根據(jù)排序后的結(jié)果集與表進(jìn)行Join等等??偟膩碚f,就是當(dāng)數(shù)據(jù)塊的讀取需要滿足>一定的順序的情況下,MySQL 就需要產(chǎn)生隨機(jī)讀取,進(jìn)而使用到 read_rnd_buffer_size
參數(shù)所設(shè)置的內(nèi)存緩沖區(qū)。
read_rnd_buffer_size=16M
#你最好在定義數(shù)據(jù)庫命名規(guī)則的時(shí)候就全部采用小寫字母加下劃線的組合,而不使用任何的大寫字母。
lower_case_table_names=1
#設(shè)置校驗(yàn)?zāi)J?br />sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#默認(rèn)配置沒開查詢緩存哦親
explicit_defaults_for_timestamp
功能:
#關(guān)閉MYSQL日志
執(zhí)行: /usr/local/mysql/bin/mysql?-u?root?-p 輸入密碼,登陸到mysql,然后執(zhí)行 reset?master; 退出后執(zhí)行: vi?/etc/my.cnf 查找 log-bin=mysql-bin?binlog_format=mixed 再這兩行前面加上#,將其注釋掉,再執(zhí)行重啟mysql命令 這樣就關(guān)閉了mysql日志了 /etc/init.d/mysql?restart
?MySql 的批量操作,要加rewriteBatchedStatements參數(shù)
http://elf8848.iteye.com/blog/770032
MySql 插入(insert)性能測試
http://elf8848.iteye.com/blog/1547398