mysql 配置參數詳解

[client]  port?=?3306??  socket?=?/var/lib/mysql/mysql.sock    [mysql]#這個配置段設置啟動MySQL服務的條件;在這種情況下,no-auto-rehash確保這個服務啟動得比較快。  no-auto-rehash    [mysqld]  user?=?mysql??  port?=?3306??  socket?=?/var/lib/mysql/mysql.sock??  basedir?=?/usr/local/mysql??  datadir?=?/data/mysql/data/??  open_files_limit?=?10240    back_log?=?600??  #在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。默認值80。    max_connections?=?3000??  #MySQL允許最大的進程連接數,如果經常出現Too?Many?Connections的錯誤提示,則需要增大此值。默認151    max_connect_errors?=?6000??  #設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,直到mysql服務器重啟或通過flush?hosts命令清空此host的相關信息。默認100    external-locking?=?FALSE??  #使用–skip-external-locking?MySQL選項以避免外部鎖定。該選項默認開啟    max_allowed_packet?=?32M??  #設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值?為4MB,最大值是1GB,必須設置1024的倍數。#sort_buffer_size?=?2M??  #?Sort_Buffer_Size?是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存。#Sort_Buffer_Size?并不是越大越好,由于是connection級的參數,過大的設置+高并發可能會耗盡系統內存資源。例如:500個連接將會消耗?500*sort_buffer_size(8M)=4G內存#Sort_Buffer_Size?超過2KB的時候,就會使用mmap()?而不是?malloc()?來進行內存分配,導致效率降低。?系統默認2M,使用默認值即可#join_buffer_size?=?2M??  #用于表間關聯緩存的大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。系統默認2M,使用默認值即可    thread_cache_size?=?300??  #默認38#?服務器線程緩存這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程將被放到緩存中,如果線程重新被請求,那么請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.通過比較?Connections?和?Threads_created?狀態的變量,可以看到這個變量的作用。設置規則如下:1GB?內存配置為8,2GB配置為16,3GB配置為32,4GB或更高內存,可配置更大。#thread_concurrency?=?8??  #系統默認為10,使用10先觀察#?設置thread_concurrency的值的正確與否,?對mysql的性能影響很大,?在多個cpu(或多核)的情況下,錯誤設置了thread_concurrency的值,?會導致mysql不能充分利用多cpu(或多核),?出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍.?比如有一個雙核的CPU,?那么thread_concurrency的應該為4;?2個雙核的cpu,?thread_concurrency的值應為8    query_cache_size?=?64M??  #在MyISAM引擎優化中,這個參數也是一個重要的優化參數。但也爆露出來一些問題。機器的內存越來越大,習慣性把參數分配的值越來越大。這個參數加大后也引發了一系列問題。我們首先分析一下?query_cache_size的工作原理:一個SELECT查詢在DB中工作后,DB會把該語句緩存下來,當同樣的一個SQL再次來到DB里調用時,DB在該表沒發生變化的情況下把結果從緩存中返回給Client。這里有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該表在發生變更時,Query_cache里的數據又怎么處理呢?首先要把Query_cache和該表相關的語句全部置為失效,然后在寫入更新。那么如果Query_cache非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎么這么慢了。所以在數據庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高并發,寫入量大的系統,建議把該功能禁掉。    query_cache_limit?=?4M??  #指定單個查詢能夠使用的緩沖區大小,缺省為1M    query_cache_min_res_unit?=?2k??  #默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成內存碎片和浪費#查詢緩存碎片率?=?Qcache_free_blocks?/?Qcache_total_blocks?*?100%#如果查詢緩存碎片率超過20%,可以用FLUSH?QUERY?CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數據量的話。#查詢緩存利用率?=?(query_cache_size?–?Qcache_free_memory)?/?query_cache_size?*?100%#查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes?>?50的話說明query_cache_size可能有點小,要不就是碎片太多。#查詢緩存命中率?=?(Qcache_hits?–?Qcache_inserts)?/?Qcache_hits?*?100%#default-storage-engine?=?MyISAM#default_table_type?=?InnoDB?#開啟失敗#thread_stack?=?192K??  #設置MYSQL每個線程的堆棧大小,默認值足夠大,可滿足普通操作。可設置范圍為128K至4GB,默認為256KB,使用默認觀察    transaction_isolation?=?READ-COMMITTED??  #?設定默認的事務隔離級別.可用的級別如下:READ?UNCOMMITTED-讀未提交?READ?COMMITTE-讀已提交?REPEATABLE?READ?-可重復讀?SERIALIZABLE?-串行    tmp_table_size?=?256M??  #?tmp_table_size?的默認大小是?32M。如果一張臨時表超出該大小,MySQL產生一個?The?table?tbl_name?is?full?形式的錯誤,如果你做很多高級?GROUP?BY?查詢,增加?tmp_table_size?值。如果超過該值,則會將臨時表寫入磁盤。  max_heap_table_size?=?256M    expire_logs_days?=?7??  key_buffer_size?=?2048M??  #批定用于索引的緩沖區大小,增加它可以得到更好的索引處理性能,對于內存在4GB左右的服務器來說,該參數可設置為256MB或384MB。    read_buffer_size?=?1M??  #默認128K#?MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。如果對表的順序掃描請求非常頻繁,并且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能。和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。    read_rnd_buffer_size?=?16M??  #?MySql的隨機讀(查詢操作)緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySql會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大。    bulk_insert_buffer_size?=?64M??  #批量插入數據緩存大小,可以有效提高插入效率,默認為8M    myisam_sort_buffer_size?=?128M??  #?MyISAM表發生變化時重新排序所需的緩沖?默認8M    myisam_max_sort_file_size?=?10G??  #?MySQL重建索引時所允許的最大臨時文件的大小?(當?REPAIR,?ALTER?TABLE?或者?LOAD?DATA?INFILE).#?如果文件大小比此值更大,索引會通過鍵值緩沖創建(更慢)#myisam_max_extra_sort_file_size?=?10G?5.6無此值設置#myisam_repair_threads?=?1???默認為1#?如果一個表擁有超過一個索引,?MyISAM?可以通過并行排序使用超過一個線程去修復他們.#?這對于擁有多個CPU以及大量內存情況的用戶,是一個很好的選擇.    myisam_recover??  #自動檢查和修復沒有適當關閉的?MyISAM?表  skip-name-resolve??  lower_case_table_names?=?1??  server-id?=?1    innodb_additional_mem_pool_size?=?16M??  #這個參數用來設置?InnoDB?存儲的數據目錄信息和其它內部數據結構的內存池大小,類似于Oracle的library?cache。這不是一個強制參數,可以被突破。    innodb_buffer_pool_size?=?2048M??  #?這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默認的?key_buffer_size?設置下運行的可以,然而Innodb在默認的?innodb_buffer_pool_size?設置下卻跟蝸牛似的。由于Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達?70-80%?的可用內存。一些應用于?key_buffer?的規則有?—?如果你的數據量不大,并且不會暴增,那么無需把?innodb_buffer_pool_size?設置的太大了#innodb_data_file_path?=?ibdata1:1024M:autoextend?設置過大導致報錯,默認12M觀察#表空間文件?重要數據#innodb_file_io_threads?=?4???不明確,使用默認值#文件IO的線程數,一般為?4,但是在?Windows?下,可以設置得較大。      innodb_thread_concurrency?=?8??  #服務器有幾個CPU就設置為幾,建議用默認設置,一般為8.    innodb_flush_log_at_trx_commit?=?2??  #?如果將此參數設置為1,將在每次提交事務后將日志寫入磁盤。為提供性能,可以設置為0或2,但要承擔在發生故障時丟失數據的風險。設置為0表示事務日志寫入日志文件,而日志文件每秒刷新到磁盤一次。設置為2表示事務日志將在提交時寫入日志,但日志文件每次刷新到磁盤一次。#innodb_log_buffer_size?=?16M???使用默認8M#此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據.MySQL開發人員建議設置為1-8M之間#innodb_log_file_size?=?128M??使用默認48M#此參數確定數據日志文件的大小,以M為單位,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時間#innodb_log_files_in_group?=?3???使用默認2#為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。推薦設置為3M#innodb_max_dirty_pages_pct?=?90??使用默認75觀察#推薦閱讀?http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html#?Buffer_Pool中Dirty_Page所占的數量,直接影響InnoDB的關閉時間。參數innodb_max_dirty_pages_pct?可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制數據塊Flush一段時間,則能夠大大縮短?MySQL關閉的時間。    innodb_lock_wait_timeout?=?120??  #默認為50秒?  #?InnoDB?有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock?tables?語句或第三方事務引擎,則InnoDB無法識別死鎖。為消除這種可能性,可以將innodb_lock_wait_timeout設置為一個整數值,指示?MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)    innodb_file_per_table?=?0??  #默認為No#獨享表空間(關閉)    [mysqldump]  quick??  #?max_allowed_packet?=?32M    [mysqld_safe]  log-error=/data/mysql/mysql_oldboy.err??  pid-file=/data/mysql/mysqld.pid    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享