使用shell指令碼檢視資料庫負載情況(第二篇)
在之前寫了一個shell指令碼,能夠得到一個基於時間點的資料庫負載報告。
使用shell指令碼檢視資料庫負載情況 http://blog.itpub.net/23718752/viewspace-1168027/
在生產環境中快照的生成頻率可能10分鐘或者半個小時就會生成,頻率要快些,使用原先的指令碼執行起來會有一定的延時。
想檢視在快照的時間間隔內資料庫的負載情況。這樣能夠更高效的定位某個問題。比如10點到11點,每10分鐘生成一次快照。可能問題發生在10:40~10:50,如果透過一個小時的快照就不一定能夠準確的定位問題。
我嘗試瞭如下的指令碼,能夠很清晰地 列出快照資訊和資料庫的負載情況。
sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF
break on db_name
set pages 50
set linesize 100
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid dbid
, d.name db_name
, i.instance_number inst_num
, i.instance_name inst_name
from v\$database d,
v\$instance i;
select
db_name
,begin_snap
,end_snap
,snapdate
,lvl
,round(((END_INTERVAL_TIME+0)-(BEGIN_INTERVAL_TIME+0 ))*24*60) duration_mins
,round((select round((sum(e.value) -
sum(b.value)) / 1000000 /60,2) dbtime
FROM DBA_HIST_SYS_TIME_MODEL e, DBA_HIST_SYS_TIME_MODEL b
WHERE
e.STAT_NAME = 'DB time'
and b.snap_id=begin_snap
and e.snap_id =end_snap
AND b.STAT_NAME = 'DB time'
group by e.snap_id,b.snap_id)) dbtime
from
(
select
di.db_name db_name
, s.snap_id begin_snap
,lead(s.snap_id ,1,s.snap_id ) over(order by s.end_interval_time ) end_snap
, to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdate
, s.snap_level lvl
,s.end_interval_time
,s.begin_interval_time
from dba_hist_snapshot s
, dba_hist_database_instance di
where
( di.dbid,di.instance_number) in
(select d.dbid dbid
, i.instance_number inst_num
from v\$database d,
v\$instance i)
and di.dbid = s.dbid
and di.instance_number = s.instance_number
and di.startup_time = s.startup_time
and to_char(END_INTERVAL_TIME,'yyyymmdd')='$1'
and EXTRACT(HOUR FROM END_INTERVAL_TIME) between $2-1 and $3+1
order by db_name, instance_name, snap_id
);
EOF
指令碼的執行情況如下,生成的快照資訊會前後順延一個小時,比如檢視10點到11點的資訊,會列出9點到12點的資訊。
> ksh showsnap2.sh 20141222 10 11
Current Instance
~~~~~~~~~~~~~~~~
DBID DB_NAME INST_NUM INST_NAME
---------- --------- ---------- ----------------
3100077577 XXXXXX 1 XXXXXX
DB_NAME BEGIN_SNAP END_SNAP SNAPDATE LVL DURATION_MINS DBTIME
--------- ---------- ---------- ----------------- ---------- ------------- ----------
XXXXXX 24597 24598 22 Dec 2014 09:00 1 10 374
24598 24599 22 Dec 2014 09:10 1 10 180
24599 24600 22 Dec 2014 09:20 1 10 193
24600 24601 22 Dec 2014 09:30 1 10 114
24601 24602 22 Dec 2014 09:40 1 9 156
24602 24603 22 Dec 2014 09:50 1 10 171
24603 24604 22 Dec 2014 10:00 1 10 220
24604 24605 22 Dec 2014 10:10 1 10 214
24605 24606 22 Dec 2014 10:20 1 10 256
24606 24607 22 Dec 2014 10:30 1 10 270
24607 24608 22 Dec 2014 10:40 1 10 1288
24608 24609 22 Dec 2014 10:50 1 10 346
24609 24610 22 Dec 2014 11:00 1 10 350
24610 24611 22 Dec 2014 11:10 1 10 398
24611 24612 22 Dec 2014 11:20 1 10 355
24612 24613 22 Dec 2014 11:30 1 10 295
24613 24614 22 Dec 2014 11:40 1 10 318
24614 24615 22 Dec 2014 11:50 1 10 338
24615 24616 22 Dec 2014 12:00 1 10 355
24616 24617 22 Dec 2014 12:10 1 10 288
24617 24618 22 Dec 2014 12:20 1 10 257
24618 24619 22 Dec 2014 12:30 1 10 255
24619 24620 22 Dec 2014 12:40 1 10 255
24620 24620 22 Dec 2014 12:50 1 10 0
可以很清晰的看到在10:40~10:550的時候,負載異常的高,可以針對這種情況抓取一個awr報告來詳細的分析一下。
使用shell指令碼檢視資料庫負載情況 http://blog.itpub.net/23718752/viewspace-1168027/
在生產環境中快照的生成頻率可能10分鐘或者半個小時就會生成,頻率要快些,使用原先的指令碼執行起來會有一定的延時。
想檢視在快照的時間間隔內資料庫的負載情況。這樣能夠更高效的定位某個問題。比如10點到11點,每10分鐘生成一次快照。可能問題發生在10:40~10:50,如果透過一個小時的快照就不一定能夠準確的定位問題。
我嘗試瞭如下的指令碼,能夠很清晰地 列出快照資訊和資料庫的負載情況。
sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF
break on db_name
set pages 50
set linesize 100
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid dbid
, d.name db_name
, i.instance_number inst_num
, i.instance_name inst_name
from v\$database d,
v\$instance i;
select
db_name
,begin_snap
,end_snap
,snapdate
,lvl
,round(((END_INTERVAL_TIME+0)-(BEGIN_INTERVAL_TIME+0 ))*24*60) duration_mins
,round((select round((sum(e.value) -
sum(b.value)) / 1000000 /60,2) dbtime
FROM DBA_HIST_SYS_TIME_MODEL e, DBA_HIST_SYS_TIME_MODEL b
WHERE
e.STAT_NAME = 'DB time'
and b.snap_id=begin_snap
and e.snap_id =end_snap
AND b.STAT_NAME = 'DB time'
group by e.snap_id,b.snap_id)) dbtime
from
(
select
di.db_name db_name
, s.snap_id begin_snap
,lead(s.snap_id ,1,s.snap_id ) over(order by s.end_interval_time ) end_snap
, to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdate
, s.snap_level lvl
,s.end_interval_time
,s.begin_interval_time
from dba_hist_snapshot s
, dba_hist_database_instance di
where
( di.dbid,di.instance_number) in
(select d.dbid dbid
, i.instance_number inst_num
from v\$database d,
v\$instance i)
and di.dbid = s.dbid
and di.instance_number = s.instance_number
and di.startup_time = s.startup_time
and to_char(END_INTERVAL_TIME,'yyyymmdd')='$1'
and EXTRACT(HOUR FROM END_INTERVAL_TIME) between $2-1 and $3+1
order by db_name, instance_name, snap_id
);
EOF
指令碼的執行情況如下,生成的快照資訊會前後順延一個小時,比如檢視10點到11點的資訊,會列出9點到12點的資訊。
> ksh showsnap2.sh 20141222 10 11
Current Instance
~~~~~~~~~~~~~~~~
DBID DB_NAME INST_NUM INST_NAME
---------- --------- ---------- ----------------
3100077577 XXXXXX 1 XXXXXX
DB_NAME BEGIN_SNAP END_SNAP SNAPDATE LVL DURATION_MINS DBTIME
--------- ---------- ---------- ----------------- ---------- ------------- ----------
XXXXXX 24597 24598 22 Dec 2014 09:00 1 10 374
24598 24599 22 Dec 2014 09:10 1 10 180
24599 24600 22 Dec 2014 09:20 1 10 193
24600 24601 22 Dec 2014 09:30 1 10 114
24601 24602 22 Dec 2014 09:40 1 9 156
24602 24603 22 Dec 2014 09:50 1 10 171
24603 24604 22 Dec 2014 10:00 1 10 220
24604 24605 22 Dec 2014 10:10 1 10 214
24605 24606 22 Dec 2014 10:20 1 10 256
24606 24607 22 Dec 2014 10:30 1 10 270
24607 24608 22 Dec 2014 10:40 1 10 1288
24608 24609 22 Dec 2014 10:50 1 10 346
24609 24610 22 Dec 2014 11:00 1 10 350
24610 24611 22 Dec 2014 11:10 1 10 398
24611 24612 22 Dec 2014 11:20 1 10 355
24612 24613 22 Dec 2014 11:30 1 10 295
24613 24614 22 Dec 2014 11:40 1 10 318
24614 24615 22 Dec 2014 11:50 1 10 338
24615 24616 22 Dec 2014 12:00 1 10 355
24616 24617 22 Dec 2014 12:10 1 10 288
24617 24618 22 Dec 2014 12:20 1 10 257
24618 24619 22 Dec 2014 12:30 1 10 255
24619 24620 22 Dec 2014 12:40 1 10 255
24620 24620 22 Dec 2014 12:50 1 10 0
可以很清晰的看到在10:40~10:550的時候,負載異常的高,可以針對這種情況抓取一個awr報告來詳細的分析一下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1961096/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用shell指令碼檢視資料庫負載情況指令碼資料庫負載
- 使用shell指令碼檢測資料庫連線訪問情況指令碼資料庫
- 通過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- 透過shell指令碼檢視資料庫表空間使用情況指令碼資料庫
- check_postgres指令碼集檢查資料庫健康情況指令碼資料庫
- 檢視過去的session鎖情況指令碼Session指令碼
- 巧用shell生成資料庫檢查指令碼資料庫指令碼
- 通過shell指令碼同時監控多個資料庫負載指令碼資料庫負載
- 檢視PG資料庫的許可權情況資料庫
- 檢視mount掛載情況
- 檢視空間使用情況的指令碼指令碼
- 檢查備份情況的指令碼指令碼
- 檢視mysql資料庫空間使用情況MySql資料庫
- 巧用shell指令碼分析資料庫使用者指令碼資料庫
- Oracle 時段負載情況Oracle負載
- 【轉載】監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 指令碼實現檢視錶空間使用情況指令碼
- 使用shell 指令碼備份資料指令碼
- 檢視資料庫中tablespace和datafile的使用情況。資料庫
- oracle 資料庫裡檢視錶空間使用狀況;Oracle資料庫
- Shell指令碼 – 檢視網路介面資訊指令碼
- 透過shell指令碼檢視鎖資訊指令碼
- 通過shell指令碼檢視鎖資訊指令碼
- 透過閃回事務檢視資料dml的情況
- 通過閃回事務檢視資料dml的情況
- 檢視資料庫中的隱藏引數(指令碼)資料庫指令碼
- 巧用shell指令碼統計磁碟使用情況指令碼
- 監控系統使用情況shell指令碼指令碼
- 檢視oracle資料庫表空間使用情況 非常慢!Oracle資料庫
- 檢視SQLServer的LCK資源等待情況SQLServer
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- 建立管理MySQL資料庫的shell指令碼MySql資料庫指令碼
- 透過shell指令碼檢視procedure的資訊指令碼
- 透過shell指令碼檢視package的資訊指令碼Package
- 通過shell指令碼檢視procedure的資訊指令碼
- 通過shell指令碼檢視package的資訊指令碼Package
- Oracle 查詢DB的負載情況Oracle負載
- Linux 檢視程式情況Linux