轉之Eygle的文章:http://www.eygle.com/archives/2009/03/db_file_multiblock_read_count_auto.html
關於這個參數,經過幾多變化,在Oracle10gR2中終於修成了正果,實現了自動調整。
很久以前演過過這個參數,有過這樣的記敘: 初始化參數db_file_multiblock_read_count 影響Oracle在執行全表掃描時一次讀取的block的數量.
db_file_multiblock_read_count的設定要受OS最大IO能力影響,也就是說,如果你系統的硬體IO能力有限,即使設定再大的db_file_multiblock_read_count也是沒有用的。
理論上,最大db_file_multiblock_read_count和系統IO能力應該有如下關係:
Max(db_file_multiblock_read_count) = MaxOsIOsize/db_block_size
當然這個Max(db_file_multiblock_read_count)還要受Oracle的限制,
目前Oracle所支援的最大db_file_multiblock_read_count 值為128.
我們可以通過db_file_multiblock_read_count來測試Oracle在不同系統下,單次IO最大所能讀取得資料量
這個參數的設定可能影響到CBO最佳化器的執行計畫選擇,所以Oracle通常預設設定為16,不推薦設定高於32的值。
引用一段Kamus同學的描述: db_file_multiblock_read_count曾經是一個經過熱烈討論的初始化參數。該參數只有在對錶或者索引進行Full Scan的時候才起作用。
在Oracle10gR2以前的版本中,DBA必鬚根據db_block_size參數,以及應用系統的特性,來調整db_file_multiblock_read_count參數。該參數值將影響CBO在該產生何種SQL執行計畫上的判斷。
我們知道如下的公式,其中max I/O chunk size跟作業系統有關,但是Oracle文檔中也指出大多數作業系統上該值為1M。
db_file_multiblock_read_count = max I/O chunk size / db_block_size
在Oracle10gR2之後的版本(10gR2和11g)中,Oracle資料庫已經可以根據系統的IO能力以及Buffer Cache的大小來動態調整該參數值,Oracle建議不要顯式設定該參數值。
在我的一個11.1.0.7的環境中,這個值被自動調整為73:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
SQL> show parameter multi
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 73
parallel_adaptive_multi_user boolean TRUE