mysql學習:配置參數優化說明

http://blog.csdn.net/nightelve/article/details/17393631

經典面試題:http://blog.csdn.net/u013252072/article/details/52912385

####:for innodb
default_storage_engine=innodb
default_tmp_storage_engine=innodb
innodb_data_file_path=ibdata1:2048M:autoextend
innodb_temp_data_file_path=ibtmp1:12M:autoextend
innodb_log_group_home_dir=/mydata
innodb_log_files_in_group=3
innodb_log_file_size=500M
innodb_undo_directory = /mydata
innodb_undo_tablespaces = 3
innodb_undo_logs = 1
innodb_file_format=Barracuda
innodb_file_per_table=on
innodb_page_size=16k
innodb_thread_concurrency=0
innodb_read_io_threads=24
innodb_write_io_threads=40
innodb_purge_threads=4
innodb_print_all_deadlocks=on
innodb_deadlock_detect=on
innodb_lock_wait_timeout=50
innodb_spin_wait_delay=6
innodb_autoinc_lock_mode=2
innodb_stats_persistent=on
innodb_stats_persistent_sample_pages=20
innodb_adaptive_hash_index=on
innodb_change_buffering=all
innodb_change_buffer_max_size=25
innodb_flush_neighbors=1
innodb_flush_method=O_DIRECT
innodb_doublewrite=on
innodb_log_buffer_size=16M
innodb_flush_log_at_timeout=1
innodb_flush_log_at_trx_commit=1
innodb_buffer_pool_size=60G
autocommit=1
根據實際情況把具體值改動一下。

-

innodb_additional_mem_pool_size = 16M
參數默認值:1048576(1M)
這個參數用來設置 InnoDB 存儲的數據目錄信息和其它內部數據結構的內存池大小,類似於Oracle的library cache。這不是一個強制參數,可以被突破。

innodb_buffer_pool_size = 2048M
參數默認值:8388608(8M)
這對Innodb表來說非常重要。Innodb相比MyISAM表對緩衝更爲敏感。MyISAM可以在默認的 key_buffer_size 設置下運行的可以,然而Innodb在默認的
innodb_buffer_pool_size 設置下卻跟蝸牛似的。由於Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的
話則可以設置它高達 70-80% 的可用內存。
這是你安裝完InnoDB後第一個應該設置的選項。緩衝池是數據和索引緩存的地方:這個值越大越好,這能保證你在大多數的讀取操作時使用的是內存而
不是硬盤。典型的值是5-6GB(8GB內存),20-25GB(32GB內存),100-120GB(128GB內存)。

innodb_data_file_path = ibdata1:1024M:autoextend
參數默認值:ibdata1:10M:autoextend
表空間文件 重要數據

innodb_file_io_threads = 4
參數默認值:4
文件IO的線程數,一般爲 4,但是在 Windows 下,可以設置得較大。

innodb_thread_concurrency = 8
參數默認值:8
服務器有幾個CPU就設置爲幾,建議用默認設置,一般爲8.

innodb_flush_log_at_trx_commit = 0
參數默認值:1
當 innodb_flush_log_at_trx_commit 取值爲 0 的時候,log buffer 會 每秒寫入到日誌文件並刷寫(flush)到磁盤。但每次事務提交不會有任何影響,
也就是 log buffer 的刷寫操作和事務提交操作沒有關係。在這種情況下,MySQL性能最好,但如果 mysqld 進程崩潰,通常會導致最後 1s 的日誌丟失。
當取值爲 1 時,每次事務提交時,log buffer 會被寫入到日誌文件並刷寫到磁盤。這也是默認值。這是最安全的配置,但由於每次事務都需要進行磁盤I/O,所以也最慢。
當取值爲 2 時,每次事務提交會寫入日誌文件,但並不會立即刷寫到磁盤,日誌文件會每秒刷寫一次到磁盤。這時如果 mysqld 進程崩潰,由於日誌已經
寫入到系統緩存,所以並不會丟失數據;在操作系統崩潰的情況下,通常會導致最後 1s 的日誌丟失。

innodb_log_buffer_size = 4M
參數默認值:1048576
這項配置決定了爲尚未執行的事務分配的緩存。其默認值(1MB)一般來說已經夠用了,但是如果你的事務中包含有二進制大對象或者大文本字段的話,這
點緩存很快就會被填滿並觸發額外的I/O操作。看看Innodb_log_waits狀態變量,如果它不是0,增加innodb_log_buffer_size。

innodb_log_file_size = 128M
參數默認值:5242880
這是redo日誌的大小。redo日誌被用於確保寫操作快速而可靠並且在崩潰時恢復。一直到MySQL 5.1,它都難於調整,因爲一方面你想讓它更大來提高性能,
另一方面你想讓它更小來使得崩潰後更快恢復。幸運的是從MySQL 5.5之後,崩潰恢復的性能的到了很大提升,這樣你就可以同時擁有較高的寫入性能和崩
潰恢復性能了。一直到MySQL 5.5,redo日誌的總尺寸被限定在4GB(默認可以有2個log文件)。這在MySQL 5.6裏被提高。

一開始就把innodb_log_file_size設置成512M(這樣有1GB的redo日誌)會使你有充裕的寫操作空間。如果你知道你的應用程序需要頻繁的寫入數據並且你使
用的時MySQL 5.6,你可以一開始就把它這是成4G。

innodb_log_files_in_group = 3
參數默認值:2
爲提高性能,MySQL可以以循環方式將日誌文件寫到多個文件。推薦設置爲3M

innodb_lock_wait_timeout = 50
參數默認值:50
InnoDB 有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別
死鎖。爲消除這種可能性,可以將innodb_lock_wait_timeout設置爲一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)

innodb_file_per_table = 1
參數默認值:0
這項設置告知InnoDB是否需要將所有表的數據和索引存放在共享表空間裏(innodb_file_per_table = OFF) 或者爲每張表的數據單獨放在一個.ibd文件
(innodb_file_per_table = ON)。每張表一個文件允許你在drop、truncate或者rebuild表時回收磁盤空間。這對於一些高級特性也是有必要的,比如數
據壓縮。但是它不會帶來任何性能收益。你不想讓每張表一個文件的主要場景是:有非常多的表(比如10k+)。
MySQL 5.6中,這個屬性默認值是ON,因此大部分情況下你什麼都不需要做。對於之前的版本你必須在加載數據之前將這個屬性設置爲ON,因爲它只對新創建的表有影響。

sync_binlog = 0
參數默認值:0
MySQL 的二進制日誌(binary log)同步到磁盤的頻率。MySQL server 在 binary log 每寫入 sync_binlog 次後,刷寫到磁盤。

如果 autocommit 開啓,每個語句都寫一次 binary log,否則每次事務寫一次。默認值是 0,不主動同步,而依賴操作系統本身不定期把文件內容 flush
到磁盤。設爲 1 最安全,在每個語句或事務後同步一次 binary log,即使在崩潰時也最多丟失一個語句或事務的日誌,但因此也最慢。

大多數情況下,對數據的一致性並沒有很嚴格的要求,所以並不會把 sync_binlog 配置成 1. 爲了追求高併發,提升性能,可以設置爲 100 或直接用 0.
而和 innodb_flush_log_at_trx_commit 一樣,對於支付服務這樣的應用,還是比較推薦 sync_binlog = 1.

max_connections = 200
參數默認值:151
如果你經常看到‘Too many connections’錯誤,是因爲max_connections的值太低了。這非常常見因爲應用程序沒有正確的關閉數據庫連接,你需要比默
認的151連接數更大的值。max_connection值被設高了(例如1000或更高)之後一個主要缺陷是當服務器運行1000個或更高的活動事務時會變的沒有響應。在
應用程序裏使用連接池或者在MySQL裏使用進程池有助於解決這一問題。

interactive_timeout:
參數默認值:28800秒(8小時)
參數含義:(交互式)服務器在客戶端連接處於非活動狀態時等待interactive_timeout秒後關閉連接。

wait_timeout:
參數默認值:28800秒(8小時)
參數含義:(非交互式)服務器在客戶端連接處於非活動狀態時等待wait_timeout秒後關閉連接。

MySQL服務器所支持的最大連接數是有上限的,因爲每個連接的建立都會消耗內存,因此我們希望客戶端在連接到MySQL Server處理完相應的操作後,應該斷
開連接並釋放佔用的內存。如果你的MySQL Server有大量的閒置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL
Server的連接上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的運行情況來判斷。在系統運行一段時間後,可
以通過show processlist命令查看當前系統的連接狀態,如果發現有大量的sleep狀態的連接進程,則說明該參數設置的過大,可以進行適當的調整小些。

注:在配置文件中要同時設置interactive_timeout和wait_timeout纔會生效。
wait_timeout=100
interactive_timeout=100

back_log = 600
參數默認值:50
在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來
的TCP/IP連接的監聽隊列的大小。默認值50。

max_allowed_packet = 32M
參數默認值:1048576
設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。

join_buffer_size = 2M
參數默認值:
用於表間關聯緩存的大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。

thread_cache_size = 300
參數默認值:
如果我們在MySQL服務器配置文件中設置了thread_cache_size,當客戶端斷開之後,服務器處理此客戶的線程將會緩存起來以響應下一個客戶而不是銷燬
(前提是緩存數未達上限)。Threads_created表示創建過的線程數,如果發現Threads_created值過大的話,表明 MySQL服務器一直在創建線程,這也是
比較耗資源,可以適當增加配置文件中thread_cache_size值,

thread_concurrency = 8
參數默認值:
設置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
參數默認值:0
對於使用MySQL的用戶,對於這個變量大家一定不會陌生。前幾年的MyISAM引擎優化中,這個參數也是一個重要的優化參數。但隨着發展,這個參數也爆
露出來一些問題。機器的內存越來越大,人們也都習慣性的把以前有用的參數分配的值越來越大。這個參數加大後也引發了一系列問題。我們首先分析一
下 query_cache_size的工作原理:一個SELECT查詢在DB中工作後,DB會把該語句緩存下來,當同樣的一個SQL再次來到DB裏調用時,DB在該表沒發生變化
的情況下把結果從緩存中返回給Client。這裏有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如
果該表在發生變更時,Query_cache裏的數據又怎麼處理呢?首先要把Query_cache和該表相關的語句全部置爲失效,然後在寫入更新。那麼如果Query_cache
非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。所以在數據庫寫
入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高併發,寫入量大的系統,建議把該功能禁掉。
#重點優化參數(主庫 增刪改-MyISAM)

transaction_isolation = READ-COMMITTED
參數默認值:
設定默認的事務隔離級別.可用的級別如下:
READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重複讀4.SERIALIZABLE -串行

key_buffer_size = 2048M
參數默認值:
#批定用於索引的緩衝區大小,增加它可以得到更好的索引處理性能,對於內存在4GB左右的服務器來說,該參數可設置爲256MB或384MB。

下面是常規

expire_logs_days = 30
參數默認值:0
來指定超過多少天的二進制日誌將被自動清除。

server-id = 1

open_files_limit = 10240

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章