最近在配置mysql伺服器需要用到的一些設定,經過測試發現比較不錯的配置方案,亮點在最後啊
先說一點問題:
Mysql中的InnoDB和MyISAM是在使用MySQL中最常用的兩個表類型,各有優缺點.兩種類型最主要的差別就是 InnoDB 支援交易處理與外鍵和行級鎖.而MyISAM不支援.所以Myisam往往就容易被人認為只適合在小項目中使用。但是從資料庫需求角度講,要求99.9%的穩定性,方便的擴充性和高可用性來說的話,那MyISAM絕對應該是首選。MyISAM類型的表強調的是效能,其執行數度比InnoDB類型更快, 只是不提供事務支援.大部分項目是讀多寫少的項目,而Myisam的讀效能是比innodb強不少的.
最佳化設定:
key_buffer_size – 這對MyISAM表來說非常重要。如果只是使用MyISAM表,可以把它設定為可用記憶體的 30-40%。但是注意,分多少記憶體應該是根據需求決 定,而不是不管什麼機器,都砍掉一半記憶體用作 key_buffer_size .合理的值取決於索引大小、資料量以及負載 — 記住,MyISAM表會使用作業系統的緩衝來快取資料,因此需要留出部分記憶體給它們,很多情況下資料比索引大多了。可以通過SHOW GLOBAL STATUS 時的 Key_blocks_unused來查看,只要還有剩餘,就說明 key_buffer_size 沒用滿。如果你很少使用MyISAM表,那麼也保留低於 16-32MB 的 key_buffer_size 以適應給予磁碟的暫存資料表索引所需。
query_cache — 如果你的應用程式有大量讀,而且沒有應用程式層級的緩衝,那麼這很有用。不要把它設定太大了,因為想要維護它也需要不少開銷,這會導致MySQL變慢。通 常設定為 32-512Mb。設定完之後最好是跟蹤一段時間,查看是否運行良好。在一定的負載壓力下,如果快取命中率太低了,就啟用它。
sort_buffer_size –如果你只有一些簡單的查詢,那麼就無需增加它的值了,儘管你有 64GB 的記憶體。搞不好也許會降低效能。
query_cache_size -查詢緩衝常被用來緩衝 SELECT 的結果並且在下一次同樣查詢的時候不再執行直接返回結果.開啟查詢緩衝可以極大的提高伺服器速度, 如果你有大量的相同的查詢並且很少修改表.查看 “Qcache_lowmem_prunes” 狀態變數來檢查是否當前值對於你的負載來說是否足夠高.注意: 在你表經常變化的情況下或者如果你的查詢原文每次都不同,查詢緩衝也許引起效能下降而不是效能提升.注意:設定query_cache_limit,只有小於此設定值的結果才會被緩衝, 此設定用來保護查詢緩衝,防止一個極大的結果集將其他所有的查詢結果都覆蓋.
bulk_insert_buffer_size -MyISAM 使用特殊的類似樹的cache來使得突發插入, (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE) 更快. 此變數限制每個進程中緩衝樹的位元組數. 設定為 0 會關閉此最佳化.為了最佳化不要將此值設定大於 “key_buffer_size”.當突發插入被檢測到時此緩衝將被分配.
read_rnd_buffer_size -當在排序之後,從一個已經排序好的序列中讀取行時,行資料將從這個緩衝中讀取來防止磁碟尋道.如果你增高此值,可以提高很多ORDER BY的效能.當需要時由每個線程分配
thread_cache_size - 我們在cache中保留多少線程用於重用,當一個用戶端中斷連線後,如果cache中的線程還少於thread_cache_size,則用戶端線程被放入cache中.這可以在你需要大量新串連的時候極大的減少線程建立的開銷
附錄:適用於日IP 50-100w,PV 100-300w的網站,針對Dell R710,雙至強E5620、16G記憶體的硬體設定。CentOS 5.6 64位系統,MySQL 5.5.x 穩定版的部分資料庫設定檔,供大家參考
複製代碼 代碼如下:
back_log = 300
max_connections = 3000
max_connect_errors = 30
table_cache = 4096
max_allowed_packet = 32M
#external-locking
#skip-networking
binlog_cache_size = 4M
max_heap_table_size = 128M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
thread_concurrency = 8
query_cache_size = 128M
ft_min_word_len = 8
#memlock
thread_stack = 512K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 128M
#log_slave_updates
#log
#log_warnings
log_slow_queries
long_query_time = 6
log_long_format
................
最佳化配置:經過雲棲社區測試
1.伺服器的運行環境
硬體伺服器:Dell R710,雙至強E5620 CPU、16G記憶體、6*500G硬碟
作業系統:CentOS5.5 X86_64 系統
Mysql版本:MySQL 5.5.32
適用於:日IP 100-200W ,日PV 200-500W 的網站
2.具體最佳化配置如下
複製代碼 代碼如下:
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8 #設定用戶端的字元編碼
[mysqld]
# generic configuration options
port = 3306
socket = /tmp/mysql.sock
#*** char set ***
character-set-server = utf8 #設定伺服器端的字元編碼
#*** network ***
back_log = 512
#skip-networking #預設沒有開啟
max_connections = 3000
max_connect_errors = 30
table_open_cache = 4096
#external-locking #預設沒有開啟
max_allowed_packet = 32M
max_heap_table_size = 128M
# *** global cache ***
read_buffer_size = 8M
read_rnd_buffer_size = 64M
sort_buffer_size = 16M
join_buffer_size = 16M
# *** thread ***
thread_cache_size = 16
thread_concurrency = 8
thread_stack = 512K
# *** query cache ***
query_cache_size = 128M
query_cache_limit = 4M
# *** index ***
ft_min_word_len = 8
#memlock #預設沒有開啟
default-storage-engine = INNODB
transaction_isolation = REPEATABLE-READ
# *** tmp table ***
tmp_table_size = 64M
# *** bin log ***
log-bin=mysql-bin
binlog_cache_size = 4M
binlog_format=mixed
#log_slave_updates #預設沒有開啟
#log #預設沒有開啟,此處是查詢日誌,開啟會影響伺服器效能
log_warnings #開啟警告日誌
# *** slow query log ***
slow_query_log
long_query_time = 10
# *** Replication related settings
server-id = 1
#server-id = 2
#master-host = <hostname>
#master-user = <username>
#master-password = <password>
#master-port = <port>
#read_only
#*** MyISAM Specific options
key_buffer_size = 128M
bulk_insert_buffer_size = 256M
myisam_sort_buffer_size = 256M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
# *** INNODB Specific options ***
#skip-innodb #預設沒有開啟
innodb_additional_mem_pool_size = 64M
innodb_buffer_pool_size = 6G #注意在32位系統上你每個進程可能被限制在 2-3.5G 使用者層面記憶體限制, 所以不要設定的太高.
innodb_data_file_path = ibdata1:10M:autoextend
#innodb_data_home_dir = <directory>
innodb_write_io_threads = 8
innodb_read_io_threads = 8
#innodb_force_recovery=1
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 2
#說明:innodb_flush_log_at_trx_commit = 2 如果是遊戲伺服器,建議此值設定為2;如果是對資料安全要求極高的應用,建議設定為1;設定為0效能最高,但如果發生故障,資料可能會有丟失的危險!預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。特別是使用電池供電緩衝(Battery backed up cache)時。設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統緩衝。日誌仍然會每秒flush到硬碟,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料。而值2隻會在整個作業系統掛了時才可能丟資料。
#innodb_fast_shutdown
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
#innodb_log_group_home_dir
innodb_max_dirty_pages_pct = 90
#innodb_flush_method=O_DSYNC
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 2048M
sort_buffer_size = 2048M
read_buffer = 32M
write_buffer = 32M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 10240
好了,上面就是MySQL MyISAM 最佳化設定的一些個人經驗,感謝這些人的分享。希望大家以後多多支援雲棲社區。