日常監測分析資料庫的DBA_Monitor.sql程式
日常監測分析資料庫的DBA_Monitor.sql程式
[@more@]rem 日常監測分析資料庫的DBA_Monitor.sql程式rem 我兩年前的實際經驗總結,以筆記奉獻於眾。
rem 主要參考《Oracle8 DBA Handbook》,《Oracle8 Tuning》。
rem 作者:丁聚崗 dingju@eastday.com
rem 參考
set echo on
spool user_DBA_report.txt
set pages 333 lin 96
rem ---------------------------------------------------
rem 執行說明:本程式第一部分需要DBA許可權,
rem 第二部分針對實際使用者,它們擁有表,索引,Source等。
rem # cat> ding92sql
rem sqlplus system/passwd@standax <
rem connect standaxxx/passwd@standax
rem @getuser_objects.sql
rem EOFa1
rem exit
rem 使用時伺服器並不一定要設定為timed_statistics=true。
rem 《ORACLE資料庫情況統計分析程式》, 2001.05創作,2003.08整理 Ding Jugang
rem 資料庫效能調整包括三方面的內容:(硬體,軟體,資料庫)
rem 硬體,分別從CPU,Memory,Disk,NetWork提高;軟體,就是應用程式的結構最佳化。
rem 資料庫是我們DBA重點關心的,首先了解自己:
rem 表sys.DBA_tables : |名稱|行數.變化|列數|Initail|Cache|TSpace|
rem 索引sys.DBA_indexes:|名稱|表名|列數|型別|Initial|
rem 約束user_...:|名稱|表名|相關性|型別|
rem 查詢SQL的頻率和效率v_$sqlarea,跟蹤記錄到sqls表中
rem 定期重建索引,做成指令碼: index1rebld.sql, index2rebld.sql
rem 1、 引數dbwr_io_slave等三個從屬程式可以分別設定為 40:12:6
rem 2、 引數process 一般是實際程式資料的1.5倍, 是為限制程式總數.
rem process過大則佔用系統資源,將降低系統的效能,可適當考慮降低該數值到600
rem 3、 當LOG FILE SWITCH時出現等待時,建議加大REDO LOG FILE,一般是30分鐘
rem 一次切換。目前是128MB, 配合4MB LOG_BUFFER已經可以了(8M也不顯效果).
rem 4、 在整個系統較繁忙時檢測SHARED_POOL(一般情況下應該空餘1/4)
rem 5、 SGA應該小於整個實體記憶體的一半,太大會導致OS記憶體換頁出現(PI/PO)
rem 6、 MTS對於網站應用是理想選擇,但在過分繁忙的客戶端壓力下,MTS會自動失敗
rem 而重啟專用程式(例如過多的PHP連線),估計是應用型別不相容。
rem 7、 命令instat,vmstat,top,w 能從OS級評估系統負荷。
rem 監測下面語句的執行結果的變化率,能得出資料庫級的硬碟讀寫流量。
rem select count(FILE#),sum(PHYRDS),sum(PHYWRTS),sum(PHYBLKRD) from sys.V_$filestat;
rem================================================================
rem 建立SQL跟蹤表SQLS
rem create table SQLS as select * from sys.v_$sqlarea where disk_reads>500;
rem當需要查詢效能時,設定為跟蹤模式,並執行下面的查詢:
rem insert into sqls select * from sys.v_$sqlarea where disk_reads>500 and executions<10;
rem 1)最高頻率的SQL
rem select disk_reads,executions,rows_processed,sql_text from SQLS
rem where executions> 99 ;
rem 2)查詢效能最差的SQL:
rem select disk_reads,executions,rows_processed,first_load_time,sql_text from SQLS
rem order by first_load_time;
select disk_reads,executions,rows_processed,first_load_time,sql_text
from sys.v_$sqlarea where disk_reads>10 and executions <10 order by first_load_time;
rem ========================================================================
rem 567890123456789_1234567890123456789_1234567890123456789_1234567890123456
rem ==RowCache,LibraryCache 依賴於Shared_pool,參看sys.v_$sgastat ===
rem 此二者應當達到95%,實際系統已經達到99%
select (sum(pins - reloads)) / sum(pins) "lib cache" from sys.v_$librarycache;
select (sum(gets-getmisses-usage-fixed)) / sum(gets) from sys.v_$rowcache;
rem ==================== SGA ==============================================
rem ======= sys.v_$sgastat,SGA中詳細說明 =====================
rem 剩餘共享池: 保留Free Memory 大於25%
column name format A46
column value format 999999,999,999
select * from sys.v_$sgastat where rownum<5;
rem =================== SYS ===============================================
rem ========= sys.v_$SYSstat 詳細列表,下面是幾個指標的演算法=======
rem 資料緩衝命中率:1- 40#/(39#+38#) = 99.8% > 95%
rem 記憶體排序成功率:1- 162#/(161#) = 99.4% > 92%
rem 髒緩衝區平均長度(oracle8i已廢除之): 41#/42#=0.06
column class format 99999
column value format 999999,999,999
select * from sys.v_$sysstat
where STATISTIC# in (38,39,40,41,42,43,139,140,141,106,161,162,163);
select name, value from v$parameter
where name in ('db_block_buffers',
'db_block_size', 'shared_pool_size','sort_area_size');
rem DETERMINE IF THE DATA BLOCK BUFFERS IS SET HIGH ENOUGH
select 1-(sum(decode(name, 'physical reads', value,0))/
(sum(decode(name, 'db block gets', value,0)) +
sum(decode(name, 'consistent gets', value,0))))
"Read Hit Ratio" from v$sysstat;
rem 日誌快取要滿足空間請求極小,每日300次,還可更小:
rem LOG_BUFFER=4MB,還可再大。
rem select * from sys.v_$sysstat where name like 'redo%';
rem
rem ==================回滾段1==============================================
rem 回滾段有效率:waits/gets<1% 即: 無等待命中率NoWait_Hit_Ratio接近於1
rem 回滾段資料量在4---100個,同樣規格大小,儘可能穩定不變。
rem alter TABLESPACE RBS DEFAULT STORAGE
rem (INITIAL 1M NEXT 1M MINEXTENTS 8 PCTINCREASE 0);
rem CREATE PUBLIC ROLLBACK SEGMENT RB21 TABLESPACE RBS;
rem ALTER ROLLBACK SEGMENT RB21 storage( minextents 4 optimal 8M);
rem CREATE PUBLIC ROLLBACK SEGMENT RB55 TABLESPACE RBS2 storage(minextents 8 optimal 8M);
column Ratios? format 99.9999
select count(*), sum(waits)/sum(gets) from sys.v_$rollstat;
rem rssize>=最優保留值optimal,shrinks是動態收縮次數,每小時2次是允許的。
rem 例如,統計資訊:rssize=8M,extents=8, waits和shrinks 小於每天2次
select usn,extents,gets,writes,rssize,waits,shrinks
from sys.v_$rollstat;
rem =======****** 回滾段2 ****===========
rem 這裡是回滾段的彙總統計,分析其擴充套件段之定義。其命中率統計見v_$roolstat
rem dba_rollback_segs 下面驗證一致性。
select owner,initial_extent,NEXT_EXTENT,Min_EXTENTS,MAX_EXTENTS,count(*),
TABLESPACE_NAME,STATUS
from dba_rollback_segs
group by owner,initial_extent,NEXT_EXTENT,min_extents,
MAX_EXTENTS,TABLESPACE_NAME,STATUS;
rem dba_rollback_segs --> detail 定義
column SEGMENT_name format a6
column TABLESPACE_NAME format a12
select SEGMENT_name,owner,initial_extent,NEXT_EXTENT,Min_EXTENTS,MAX_EXTENTS,
TABLESPACE_NAME,STATUS from dba_rollback_segs;
rem ======================== 閂 ===========================================
rem 閂-Oracle內部鎖,無等待命中率NoWait_Hit_Ratio接近於1
column name format A30
select name, immediate_gets "Imme_gets", immediate_misses "Imme_Mis",
round(immediate_gets/(immediate_gets+immediate_misses),3) "nowait_hit_ratio"
from sys.v_$latch where immediate_gets+immediate_misses != 0 order by name;
rem 閂-Oracle內部鎖,命中率HITRATIO(即misses/gets)接近於0
rem sleeps, immediate_gets "Imme_gets", 為了易於閱覽,不要換行
column Mis/Get? format 99.999;
select name, gets, misses, misses/gets "Mis/Get?",
immediate_misses "Imme_Mis"
from sys.v_$latch where gets > 0 order by name;
rem ================== 系統等待 ===========================================
rem 系統等待累計次
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/64429/viewspace-915809/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 效能測試之資料庫監控分析工具PMM資料庫
- 使用SqlDependency監測資料庫SQL資料庫
- 資料庫監聽夯故障分析資料庫
- 效能測試之資料庫監控分析工具Grafana+Prometheus資料庫GrafanaPrometheus
- zabbix資料庫日常處理資料庫
- Oracle資料庫日常維護Oracle資料庫
- 資料庫管理日常sql列表資料庫SQL
- oracle資料庫監聽啟動不了的原因分析Oracle資料庫
- 資料庫日常遇到的需求筆記(自用)資料庫筆記
- 資料庫的日常管理經驗淺談資料庫
- Oracle資料庫管理員的日常工作Oracle資料庫
- 達夢資料庫日常運維資料庫運維
- DB2 資料庫日常管理DB2資料庫
- MySQL 資料庫日常運維文件MySql資料庫運維
- 資料庫監控資料庫
- Access資料庫日常維護和Access資料庫最佳化方法資料庫
- 監控資料庫效能的SQL資料庫SQL
- SAP資料庫的分析資料庫
- 【轉】Oracle資料庫日常維護手冊Oracle資料庫
- MySQL資料庫系統日常管理職責MySql資料庫
- Oracle資料庫日常維護手冊 (zt)Oracle資料庫
- 資料庫日常健康檢查方式方法資料庫
- 分析型資料庫:分散式分析型資料庫資料庫分散式
- Oracle資料庫監聽Oracle資料庫
- 資料庫效能監控資料庫
- 監控資料庫活動資料庫
- 資料庫日常運維中的幾個操作建議資料庫運維
- ORACLE資料庫日常維護的九大知識點Oracle資料庫
- 基於Prometheus的資料庫監控Prometheus資料庫
- Oracle資料庫的監控內容Oracle資料庫
- ORACLE資料庫日常維護知識總結Oracle資料庫
- UT 資料庫日常維護指導手冊資料庫
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 啟動資料庫監聽資料庫
- 資料庫繁忙程度監控資料庫
- 資料庫監控軟體資料庫
- SQL Server資料庫監控SQLServer資料庫
- 監視閃回資料庫資料庫