mysql 各參數詳解

innodb_data_home_dir


這是InnoDB表的目錄共用設置。如果沒有在 my.cnf 進行設置,InnoDB 將使用MySQL的datadir目錄爲缺省目錄。如果設定一個空字串,可以innodb_data_file_path中設定絕對路徑。
innodb_data_file_path單獨指定數據文件的路徑與大小。數據文件的完整路徑由 innodb_data_home_dir 與這裏所設定值的組合。 文件大小以 MB
單位指定。因此在文件大小指定後必有“M”。 InnoDB 也支持縮寫“G”, 1G = 1024M。從 3.23.44
開始,在那些支持大文件的操作系統上可以設置數據文件大小大於 4 GB。而在另一些操作系統上數據文件必須小於 2 GB。數據文件大小總和至少要達到
10 MB。在 MySQL-3.23
中這個參數必須在 my.cnf 中明確指定。在 MySQL-4.0.2 以及更新版本中則不需如此,系統會默認在 MySQL
的datadir目錄下創建一個 16 MB 自擴充(auto-extending)的數據文件ibdata1。你同樣可以使用一個
原生磁盤分區(RAW raw disk partitions(raw devices)) 作爲數據文件
innodb_mirrored_log_groups爲了保護數據而設置的日誌文件組的拷貝數目,默認設置爲 1。在my.cnf 中以數字格式設置。
innodb_log_group_home_dirInnoDB 日誌文件的路徑。必須與innodb_log_arch_dir設置相同值。 如果沒有明確指定將默認在 MySQL 的datadir目錄下建立兩個 5 MB 大小的 ib_logfile… 文件。
innodb_log_files_in_group日誌組中的日誌文件數目。InnoDB 以環型方式(circular fashion)寫入文件。數值 3 被推薦使用。在 my.cnf 中以數字格式設置。
innodb_log_file_size日誌組中的每個日誌文件的大小(單位 MB)。如果 n 是日誌組中日誌文件的數目,那麼理想的數值爲 1M 至下面設置的緩衝池(buffer
pool)大小的 1/n。較大的值,可以減少刷新緩衝池的次數,從而減少磁盤 I/O。但是大的日誌文件意味着在崩潰時需要更長的時間來恢復數據。
日誌文件總和必須小於 2 GB,3.23.55 和 4.0.9 以上爲小於 4 GB。在my.cnf 中以數字格式設置。
innodb_log_buffer_sizeInnoDB 將日誌寫入日誌磁盤文件前的緩衝大小。理想值爲 1M 至
8M。大的日誌緩衝允許事務運行時不需要將日誌保存入磁盤而只到事務被提交(commit)。
因此,如果有大的事務處理,設置大的日誌緩衝可以減少磁盤I/O。 在 my.cnf 中以數字格式設置。
innodb_flush_log_at_trx_commit通常設置爲 1,意味着在事務提交前日誌已被寫入磁盤, 事務可以運行更長以及服務崩潰後的修復能力。如果你願意減弱這個安全,或你運行的是比較小的事務處理,可以將它設置爲 0 ,以減少寫日誌文件的磁盤 I/O。這個選項默認設置爲 0。
innodb_log_arch_dirThe directory where fully written log files would be archived if we
used log archiving. 這裏設置的參數必須與innodb_log_group_home_dir相同。 從 4.0.6
開始,可以忽略這個參數。
innodb_log_archive這個值通常設爲 0。 既然從備份中恢復(recovery)適合於 MySQL 使用它自己的 log files,因而通常不再需要 archive InnoDB log files。這個選項默認設置爲 0。
innodb_buffer_pool_sizeInnoDB 用來高速緩衝數據和索引內存緩衝大小。 更大的設置可以使訪問數據時減少磁盤
I/O。在一個專用的數據庫服務器上可以將它設置爲物理內存的 80 %。
不要將它設置太大,因爲物理內存的使用競爭可能會影響操作系統的頁面調用。在 my.cnf 中以數字格式設置。
innodb_additional_mem_pool_sizeInnoDB 用來存儲數據字典(data dictionary)信息和其它內部數據結構(internal data structures)的存儲器組合(memory pool)大小。理想的值爲 2M,如果有更多的表你就需要在這裏重新分配。如果 InnoDB 用盡這個池中的所有內存,它將從操作系統中分配內存,並將錯誤信息寫入 MySQL 的錯誤日誌中。在 my.cnf 中以數字格式設置。
innodb_file_io_threadsInnoDB 中的文件 I/O 線程。 通常設置爲 4,但是在 Windows 下可以設定一個更大的值以提高磁盤 I/O。在 my.cnf 中以數字格式設置。
innodb_lock_wait_timeout在回滾(rooled back)之前,InnoDB 事務將等待超時的時間(單位 秒)。InnoDB 會自動檢查自身在鎖定表與事務回滾時的事務死鎖。如果使用LOCK TABLES命
令,或在同一個事務中使用其它事務安全型表處理器(transaction safe table handlers than
InnoDB),那麼可能會發生一個 InnoDB 無法注意到的死鎖。在這種情況下超時將用來解決這個問題。這個參數的默認值爲 50
秒。在 my.cnf 中以數字格式設置。
innodb_flush_method這個參數僅僅與 Unix 相關。這個參數默認值爲fdatasync。 另一個設置項爲O_DSYNC。這僅僅影響日誌文件的轉儲,在 Unix 下以fsync轉儲數據。InnoDB 版本從 3.23.40b 開始,在 Unix 下指定fdatasync

爲使用fsync方式、指定O_DSYNC爲使用O_SYNC方式。由於這在某些 Unix 環境下還有些問題所以在 ‘data’ versions 並沒有被使用。
innodb_force_recovery警告:此參數只能在你希望從一個被損壞的數據庫中轉儲(dump)數據的緊急情況下使用! 可能設置的值範圍爲 1 – 6。查看下面的章節
‘Forcing recovery’ 以瞭解這個參數的具體含義。參數設置大於 0 的值代表着 InnoDB 防止用戶修改數據的安全度。從
3.23.44 開始,這個參數可用。在 my.cnf 中以數字格式設置。
innodb_fast_shutdownInnoDB 缺少在關閉之前清空插入緩衝。這個操作可能需要幾分鐘,在極端的情況下可以需要幾個小時。如果這個參數據設置爲 1
,InnoDB 將跳過這個過程而直接關閉。從 3.23.44 和 4.0.1 開始,此參數可用。從 3.23.50 開始,此參數的默認值爲 1。
innodb_thread_concurrencyInnoDB 會試圖將 InnoDB 服務的使用的操作系統進程小於或等於這裏所設定的數值。此參數默認值爲
8。如果計算機系統性能較低或innodb_monitor顯示有很多線程等侍信號,應該將這個值設小一點。如果你的計算機系統有很我的處理器與磁盤系
統,則可以將這個值設高一點以充分利用你的系統資源。建議設值爲處理器數目+ 磁盤數目。 從 3.23.44 和 4.0.1
開始,此參數可用。在 my.cnf 中以數字格式設置。

 

介紹:
InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風
格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴大鎖定的需要,因爲在InnoDB中行級鎖定適合非常小的空間。InnoDB
也支持FOREIGN
KEY強制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
Innodb 的創始人:Heikki Tuuri
Heikki Tuuri在Innodb的Bug社區裏也是很活躍的,如果遇到Bug也可以直接提到社區,得到作者的解答。

爲什麼要學習Innodb的調優:
目前來說:InnoDB是爲Mysql處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基於磁盤的關係數據庫引擎所不能匹敵的。在數據量大的網站或是應用中Innodb是倍受青睞的。
另一方面,在數據庫的複製操作中Innodb也是能保證master和slave數據一致有一定的作用。

參數調優內容:
1. 內存利用方面
2. 日值控制方面
3. 文件IO分配,空間佔用方面
4. 其它相關參數

1.內存利用方面:首先介紹一個Innodb最重要的參數:
innodb_buffer_pool_size
這個參數和MyISAM的key_buffer_size有相似之處,但也是有差別的。這個參數主要緩存innodb表的索引,數據,插入數據時的緩衝。爲Innodb加速優化首要參數。
該參數分配內存的原則:這個參數默認分配只有8M,可以說是非常小的一個值。如果是一個專用DB服務器,那麼他可以佔到內存的70%-80%。這個參數不
能動態更改,所以分配需多考慮。分配過大,會使Swap佔用過多,致使Mysql的查詢特慢。如果你的數據比較小,那麼可分配是你的數據大小+10%左右
做爲這個參數的值。例如:數據大小爲50M,那麼給這個值分配innodb_buffer_pool_size=64M
設置方法:
innodb_buffer_pool_size=4G
這個參數分配值的使用情況可以根據show innodb statusG;中的
———————-
BUFFER POOL AND MEMORY
———————-
Total memory allocated 4668764894;
去確認使用情況。
第二個:
innodb_additional_mem_pool:
作用:用來存放Innodb的內部目錄
這個值不用分配太大,系統可以自動調。不用設置太高。通常比較大數據設置16M夠用了,如果表比較多,可以適當的增大。如果這個值自動增加,會在error log有中顯示的。
分配原則:
show innodb statusG;去查看運行中的DB是什麼狀態(參考BUFFER POOL AND MEMORY段中),然後可以調整到適當的值。
———————-
BUFFER POOL AND MEMORY
———————-
Total memory allocated 4668764894; in additional pool allocated 16777216
參考:in additional pool allocated 16777216
根據你的參數情況,可以適當的調整。
設置方法:
innodb_additional_mem_pool=16M
2.關於日值方面:
innodb_log_file_size
作用:指定日值的大小
分配原則:幾個日值成員大小加起來差不多和你的innodb_buffer_pool_size相等。上限爲每個日值上限大小爲4G.一般控制在幾個LOG文件相加大小在2G以內爲佳。具體情況還需要看你的事務大小,數據大小爲依據。
說明:這個值分配的大小和數據庫的寫入速度,事務大小,異常重啓後的恢復有很大的關係。
設置方法:
innodb_log_file_size=256M
innodb_log_files_in_group作用:指定你有幾個日值組。
分配原則: 一般我們可以用2-3個日值組。默認爲兩個。
設置方法:
innodb_log_files_in_group=3
innodb_log_buffer_size:作用:事務在內存中的緩衝。
分配原則:控制在2-8M.這個值不用太多的。他裏面的內存一般一秒鐘寫到磁盤一次。具體寫入方式和你的事務提交方式有關。在Oracle等數據庫瞭解這個,一般最大指定爲3M比較合適。
參考:Innodb_os_log_written(show global status 可以拿到)
如果這個值增長過快,可以適當的增加innodb_log_buffer_size
另外如果你需要處理大理的TEXT,或是BLOB字段,可以考慮增加這個參數的值。
設置方法:
innodb_log_buffer_size=3M

innodb_flush_logs_at_trx_commit
作用:控制事務的提交方式
分配原則:這個參數只有3個值,0,1,2請確認一下自已能接受的級別。默認爲1,主庫請不要更改了。
性能更高的可以設置爲0或是2,但會丟失一秒鐘的事務。
說明:
這個參數的設置對Innodb的性能有很大的影響,所以在這裏給多說明一下。
當這個值爲1時:innodb 的事務LOG在每次提交後寫入日值文件,並對日值做刷新到磁盤。這個可以做到不丟任何一個事務。
當這個值爲2時:在每個提交,日誌緩衝被寫到文件,但不對日誌文件做到磁盤操作的刷新,在對日誌文件的刷新在值爲2的情況也每秒發生一次。但需要注意的
是,由於進程調用方面的問題,並不能保證每秒100%的發生。從而在性能上是最快的。但操作系統崩潰或掉電纔會刪除最後一秒的事務。
當這個值爲0時:日誌緩衝每秒一次地被寫到日誌文件,並且對日誌文件做到磁盤操作的刷新,但是在一個事務提交不做任何操作。mysqld進程的崩潰會刪除崩潰前最後一秒的事務。

從以上分析,當這個值不爲1時,可以取得較好的性能,但遇到異常會有損失,所以需要根據自已的情況去衡量。
設置方法:
innodb_flush_logs_at_trx_commit=1

3. 文件IO分配,空間佔用方面
innodb_file_per_table
作用:使每個Innodb的表,有自已獨立的表空間。如刪除文件後可以回收那部分空間。
分配原則:只有使用不使用。但DB還需要有一個公共的表空間。
設置方法:
innodb_file_per_table=1

innodb_file_io_threads
作用:文件讀寫IO數,這個參數只在Windows上起作用。在LINUX上只會等於4
設置方法:
innodb_file_io_threads=4

innodb_open_files
作用:限制Innodb能打開的表的數據。
分配原則:如果庫裏的表特別多的情況,請增加這個。這個值默認是300。
設置方法:
innodb_open_files=800請適當的增加table_cache
4. 其它相關參數
這裏說明一個比較重要的參數:
innodb_flush_method
作用:Innodb和系統打交道的一個IO模型
分配原則:Windows不用設置。
Unix可以設置:fsync() or O_SYNC/O_DSYNC
如果系統可以禁止系統的Cache那就把他禁了。
Linux可以選擇:O_DIRECT
直接寫入磁盤,禁止系統Cache了
設置方法:
innodb_flush_method=O_DIRECT

innodb_max_dirty_pages_pct
作用:控制Innodb的髒頁在緩衝中在那個百分比之下,值在範圍1-100,默認爲90.
這個參數的另一個用處:當Innodb的內存分配過大,致使Swap佔用嚴重時,可以適當的減小調整這個值,使達到Swap空間釋放出來。建義:這個值最大在90%,最小在15%。太大,緩存中每次更新需要致換數據頁太多,太小,放的數據頁太小,更新操作太慢。
設置方法:
innodb_max_dirty_pages_pct=90
動態更改需要有Super權限:
set global innodb_max_dirty_pages_pct=50;

總結:
這裏只算是列出了Innodb部分的重要參數,不能認爲是對MySQL的整體調優。MySQL的參數一般分爲:全局參數,具體引擎的參數。

https://www.lvtao.net/database/mysql_innodb.html 轉載地址


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