通過shell定製ash指令碼
當然個人在使用ash的時候感覺最慢的地方就是在於輸入時間戳了,每次輸入側時候都得一邊看著樣例,一邊按照格式,一份ash的報告,至少20%以上的時間耗在這個時間戳上了。
有時候想檢視幾個時間點的資料,如果精確到分鐘,那麼執行ashrpt.sql就得一次又一次的輸入時間戳,雖然報告生成的速度還是很快,但是老是感覺手工勞動的部分太多,畢竟有很多的選項我們並不需要。
所以使用瞭如下的指令碼來定製ash,只需要通過shell指令碼輸入兩個時間戳即可。
print "
WHENEVER SQLERROR EXIT 5
SET FEEDBACK OFF
SET HEAD OFF
SET PAGES 0
connect ${DB_CONN_STR}@${SH_DB_SID}\n
set linesize 150
select d.dbid||','||i.instance_number||',to_date('||chr(39)||$1||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||'),to_date('||chr(39)||$2||chr(39)||','||chr(39)||'yyyymmddHH24MISS'||chr(39)||')' text
from v\$database d,
v\$instance i ;
" | sqlplus -s /nolog > ash_inputs.lst
sqlplus -s ${DB_CONN_STR}@${SH_DB_SID} <
set long 1000000 pagesize 6000 linesize 80
spool ashrpt_$1_$2.lst
select output from table(dbms_workload_repository.ash_report_text(`cat ash_inputs.lst`));
spool off;
EOF
比如我想檢視22號7點25分到7點26分的ash資料,就直接輸入下面的命令即可。
ksh genashtext.sh 20141022072500 20141022072600
OUTPUT
--------------------------------------------------------------------------------
ASH Report For TEST01/TEST01
DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
TEST01 3645037571 TEST01 1 11.2.0.3.0 NO rac1
CPUs SGA Size Buffer Cache Shared Pool ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
2 299M (100%) 48M (16.1%) 200M (67.0%) 4.0M (1.3%)
Analysis Begin Time: 22-Oct-14 07:25:00
Analysis End Time: 22-Oct-14 07:26:00
Elapsed Time: 1.0 (mins)
Begin Data Source: V$ACTIVE_SESSION_HISTORY
End Data Source: V$ACTIVE_SESSION_HISTORY
關於ash還是有一些額外的東西需要補充,ash和awr的部分還是有一些不同,比如ash的資料有在記憶體中的有在硬碟中歸檔了的。
在生成ash報告的時候就可以選擇。
完整的方法和引數是下面的樣子。
FUNCTION ash_report_text(l_dbid IN NUMBER,
l_inst_num IN NUMBER,
l_btime IN DATE,
l_etime IN DATE,
l_options IN NUMBER DEFAULT 0,
l_slot_width IN NUMBER DEFAULT 0,
l_sid IN NUMBER DEFAULT NULL,
l_sql_id IN VARCHAR2 DEFAULT NULL,
l_wait_class IN VARCHAR2 DEFAULT NULL,
l_service_hash IN NUMBER DEFAULT NULL,
l_module IN VARCHAR2 DEFAULT NULL,
l_action IN VARCHAR2 DEFAULT NULL,
l_client_id IN VARCHAR2 DEFAULT NULL,
l_plsql_entry IN VARCHAR2 DEFAULT NULL,
l_data_src IN NUMBER DEFAULT 0
)
其中l_data_src就決定了資料來源是從記憶體,硬碟還是兩者兼有。預設是都有。
當然了還可以根據需要來繫結sql/session來更有針對性的檢視資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1307974/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過shell定製ash指令碼指令碼
- 使用shell定製awr指令碼指令碼
- 通過shell指令碼分析足彩指令碼
- 使用shell定製addm指令碼指令碼
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- 通過shell指令碼防止埠掃描指令碼
- 通過shell指令碼檢視鎖資訊指令碼
- 通過shell指令碼監控oracle session指令碼OracleSession
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 通過shell指令碼來得到不穩定的執行計劃指令碼
- 通過shell指令碼 批量新增使用者指令碼
- 通過shell指令碼新增備庫日誌指令碼
- 通過shell指令碼來統計段大小指令碼
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 如何通過簡單的shell指令碼操作MongoDB指令碼MongoDB
- 通過shell指令碼快速定位active session問題指令碼Session
- 通過shell指令碼得到資料字典的資訊指令碼
- 通過shell定製dbms_advisor.quick_tuneUI
- 通過 Redis 定時執行指令碼Redis指令碼
- 通過shell指令碼監控sql執行頻率指令碼SQL
- 通過shell指令碼定位效能sql和生成報告指令碼SQL
- 通過shell指令碼得到資料庫的基本資訊(一)指令碼資料庫
- 通過shell指令碼監控日誌切換頻率指令碼
- 通過shell指令碼批量驗證dataguard的有效性指令碼
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- shell常用指令碼&crontab設定指令碼
- 透過shell指令碼分析足彩指令碼
- 《通過指令碼檢視哪些ip被佔用》shell筆記指令碼筆記
- 通過shell指令碼生成資料統計資訊的報表指令碼
- 通過shell指令碼抓取awr報告中的問題sql指令碼SQL
- 通過shell得到資料庫中許可權的指令碼資料庫指令碼
- Linux通過Shell指令碼命令修改密碼不需要互動Linux指令碼密碼
- mysql定時備份shell指令碼MySql指令碼
- 通過POWERDESIGER指令碼批量設定表主鍵指令碼
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql