程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL MyISAM 優化設置點滴

MySQL MyISAM 優化設置點滴

編輯:MySQL綜合教程

MySQL MyISAM 優化設置點滴。本站提示廣大學習愛好者:(MySQL MyISAM 優化設置點滴)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL MyISAM 優化設置點滴正文


比來在設置裝備擺設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 優化設置的一些小我經歷,感激這些人的分享。願望年夜家今後多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved