如何設定ASH buffer大小
Ash Buffer是SGA裡的一塊迴圈使用的記憶體區域,用於存放MMON捕捉到的active session資訊,MMNL每隔60min將Ash buffer的內容經過過濾後dump到AWR,對應的檢視是DBA_HIST_ACTIVE_SESS_HISTORY,以騰出Ash buffer空間用於之後的採集。Ash Buffer的大小在instance啟動時就已經決定了,並且在instance執行期間不能被動態調整,那麼Ash Buffer的大小是由哪些因素決定的?
關於ASH buffer的大小MOS 243132.1上有如下描述
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]
###看下實際環境裡和ash buffer有關的引數
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 16
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 1312M
---計算一下ash buffer應該為多少大小
Max [Min [ 16 * 2 MB, 5%*1312M, 30MB ], 1MB ]=30MB
---實際Ash buffer大小可以從v$sgastat、v$ash_info獲得,均為32MB,和公式提供的稍有差別,選擇32MB作為Ash Buffer
select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 33554432
select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
33554432 33554432 1000
###更改一下cpu_count
alter system set cpu_count=8 scope=spfile;
startup force
show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 8
---按照公式Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]計算
Ash buffer=Max [Min [ 8 * 2 MB, 5%*1312M, 30MB ], 1MB ]=16MB
---下面的查詢結果應驗了上面的計算
select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
16777216 16777216 1000
select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 16777216
###"_ash_size"隱含引數控制ash buffer的大小
公式Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]裡的1MB是_ash_size的預設值
---_ash_size的預設值為1MB
select ksppinm,ksppstvl from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and ksppinm like '_ash_size%'
KSPPINM KSPPSTVL
------------------------------ ------------------------------
_ash_size 1048618
---我們把_ash_size改大,改成64MB
alter system set "_ash_size"=67108864 scope=spfile;
startup force
---計算一下此時的Ash buffer值
ASH Circular Buffer = Max [Min [ 8 * 2 MB, 5%*1315M, 30MB ], 64MB ]=64MB
---下面的查詢結果應驗了上面的計算
SQL> select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
67108864 67108864 1000
SQL> select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 67108864
因此Ash Buffer的計算公式可以修正為
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], _ash_size ]
如果要調整ash buffer的大小,需要修改_ash_size引數,且確保_ash_size> Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ]
關於ASH buffer的大小MOS 243132.1上有如下描述
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]
###看下實際環境裡和ash buffer有關的引數
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 16
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 1312M
---計算一下ash buffer應該為多少大小
Max [Min [ 16 * 2 MB, 5%*1312M, 30MB ], 1MB ]=30MB
---實際Ash buffer大小可以從v$sgastat、v$ash_info獲得,均為32MB,和公式提供的稍有差別,選擇32MB作為Ash Buffer
select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 33554432
select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
33554432 33554432 1000
###更改一下cpu_count
alter system set cpu_count=8 scope=spfile;
startup force
show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 8
---按照公式Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]計算
Ash buffer=Max [Min [ 8 * 2 MB, 5%*1312M, 30MB ], 1MB ]=16MB
---下面的查詢結果應驗了上面的計算
select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
16777216 16777216 1000
select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 16777216
###"_ash_size"隱含引數控制ash buffer的大小
公式Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], 1MB ]裡的1MB是_ash_size的預設值
---_ash_size的預設值為1MB
select ksppinm,ksppstvl from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and ksppinm like '_ash_size%'
KSPPINM KSPPSTVL
------------------------------ ------------------------------
_ash_size 1048618
---我們把_ash_size改大,改成64MB
alter system set "_ash_size"=67108864 scope=spfile;
startup force
---計算一下此時的Ash buffer值
ASH Circular Buffer = Max [Min [ 8 * 2 MB, 5%*1315M, 30MB ], 64MB ]=64MB
---下面的查詢結果應驗了上面的計算
SQL> select total_size,fixed_size,sampling_interval from v$ash_info;
TOTAL_SIZE FIXED_SIZE SAMPLING_INTERVAL
---------- ---------- -----------------
67108864 67108864 1000
SQL> select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 67108864
因此Ash Buffer的計算公式可以修正為
Size of ASH Circular Buffer = Max [Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ], _ash_size ]
如果要調整ash buffer的大小,需要修改_ash_size引數,且確保_ash_size> Min [ #CPUs * 2 MB, 5% of Shared Pool Size, 30MB ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/53956/viewspace-1397886/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- win10電腦字型大小怎麼設定_win10如何設定字型大小Win10
- Git中如何設定區分檔名大小寫Git
- VS Code 如何設定大小寫轉換快捷鍵
- win10固定視窗大小怎麼設定_win10如何鎖定視窗大小Win10
- Latex_設定介面大小
- Echarts 設定地圖大小Echarts地圖
- 如何設定PowerBI報告展示在螢幕的大小?
- hdwiki 附件上傳大小設定
- win10怎麼設定滑鼠大小 win10設定滑鼠大小的步驟Win10
- fedora系統怎麼設定滑鼠指標大小?fedora滑鼠指標設定大小的教程指標
- win10設定滑鼠大小方法 win10 滑鼠指標怎麼設定大小Win10指標
- win10 怎麼設定小圖示_win10如何設定桌面圖示大小Win10
- MySQL不區分大小寫設定MySql
- 聊聊flink JobManager的heap大小設定
- CSS 設定字型顏色和大小CSS
- 最佳化mysql之key_buffer_size設定MySql
- 系統文字大小怎麼設定_win10電腦系統字型大小在哪裡設定Win10
- pyqt-工具欄圖示大小設定QT
- JavaScript動態設定文字字型大小JavaScript
- [20211223]tpt ash ash_index_helperx指令碼.txtIndex指令碼
- win10 視窗文字大小怎麼設定_win10怎麼設定視窗文字大小Win10
- 【PDB】Oracle資料庫如何檢查和設定pdb最大儲存大小Oracle資料庫
- 辦公小技巧:excel紙張大小設定Excel
- [20220129]完善tpt ash ash_index_helperx指令碼.txtIndex指令碼
- 如何正確設定資料庫連線池的大小?我的天,原來之前都設定錯了!資料庫
- Qt 彈窗置頂國定尺寸大小等樣式設定QT
- win10畫板調整大小為A4怎麼設定_win10畫板如何調整大小Win10
- IDEA-idea設定導航欄字型大小程式碼編輯區字型大小Idea
- cad游標大小怎麼調 cad游標中心正方形大小設定
- 最新版idea不區分大小寫設定Idea
- Sort_Buffer_Size 設定對伺服器效能的影響伺服器
- excel表格剛好適應a4紙大小如何設定 excel怎麼剛好做A4大小的表Excel
- [20220422]完善tpt ash ash_index_helperx指令碼2.txtIndex指令碼
- win10桌面圖示字型大小怎麼調_win10桌面圖示字型大小如何設定Win10
- win10如何設定自動顯示資料夾大小_win10怎麼顯示資料夾的大小Win10
- MD語言 裡連結圖片大小的設定
- {:hook('adminArticleEdit')} 怎麼設定編輯框的大小啊Hook
- MySQL表名不區分大小寫的設定方法MySql
- openpyxl設定單元格大小(行高和列寬)