当前位置:Gxlcms > mysql > 查看scnheadroom变化趋势的几种方法

查看scnheadroom变化趋势的几种方法

时间:2021-07-01 10:21:17 帮助过:24人阅读

查看scn headroom变化趋势的几种方法 scn headroom问题,本文不做解释。 本文为自己的总结,脚本来自于oracle sr技术工程师。 转载请注明出处http://blog.csdn.net/msdnchina/article/details/38404501 第一个方法:查询smon_scn_time表获得。conn / as sysdb

查看scn headroom变化趋势的几种方法

scn headroom问题,本文不做解释。

本文为自己的总结,脚本来自于oracle sr技术工程师。

转载请注明出处http://blog.csdn.net/msdnchina/article/details/38404501

第一个方法:查询smon_scn_time表获得。conn / as sysdba
set numwidth 17
set pages 1000
alter session set nls_date_format='DD/Mon/YYYY HH24:MI:SS';
with t1 as(
select time_dp , 24*60*60*(time_dp - lag(time_dp) over (order by time_dp)) timediff,
scn - lag(scn) over(order by time_dp) scndiff
from smon_scn_time
)
select time_dp , timediff, scndiff,
trunc(scndiff/timediff) rate_per_sec
from t1
order by 1;

第二个方法:查询awr报告的信息:

1. 通过How to extract the historical values of a statistic from AWR Repository (Doc ID 948272.1)
将Script 部分复制到您生成数据库两个实例本地,命名为 例如 awr.sql

该脚本为:
  1. set trimspool on
  2. set pages 50000
  3. set lines 132
  4. set tab off
  5. set feedback off
  6. clear break compute;
  7. repfooter off;
  8. ttitle off;
  9. btitle off;
  10. set timing off veri off space 1 flush on pause off termout on numwidth 10;
  11. set echo off feedback off pagesize 50000 linesize 1000 newpage 1 recsep off;
  12. set trimspool on trimout on;
  13. --
  14. -- Request the DB Id and Instance Number, if they are not specified
  15. column instt_num heading "Inst Num" format 99999;
  16. column instt_name heading "Instance" format a12;
  17. column dbb_name heading "DB Name" format a12;
  18. column dbbid heading "DB Id" format a12 just c;
  19. column host heading "Host" format a20;
  20. prompt
  21. prompt
  22. prompt instances IN this workload repository SCHEMA
  23. prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  24. SELECT DISTINCT ( CASE
  25. WHEN cd.dbid = wr.dbid
  26. AND cd.name = wr.db_name
  27. AND ci.instance_number = wr.instance_number
  28. AND ci.instance_name = wr.instance_name THEN '* '
  29. ELSE ' '
  30. END )
  31. || wr.dbid dbbid,
  32. wr.instance_number instt_num,
  33. wr.db_name dbb_name,
  34. wr.instance_name inst_name,
  35. wr.host_name host
  36. FROM dba_hist_database_instance wr,
  37. v$database cd,
  38. v$instance ci;
  39. prompt
  40. prompt USING &&dbid FOR DATABASE id
  41. --
  42. -- Set up the binds for dbid and instance_number
  43. variable dbid NUMBER;
  44. BEGIN
  45. :dbid := &dbid;
  46. END;
  47. /
  48. -- Error reporting
  49. whenever SQLERROR EXIT;
  50. variable max_snap_time CHAR(10);
  51. DECLARE
  52. CURSOR cidnum IS
  53. SELECT 'X'
  54. FROM dba_hist_database_instance
  55. WHERE dbid = :dbid;
  56. CURSOR csnapid IS
  57. SELECT To_char(Max(end_interval_time), 'dd/mm/yyyy')
  58. FROM dba_hist_snapshot
  59. WHERE dbid = :dbid;
  60. vx CHAR(1);
  61. BEGIN
  62. -- Check Database Id/Instance Number is a valid pair
  63. OPEN cidnum;
  64. FETCH cidnum INTO vx;
  65. IF cidnum%NOTFOUND THEN
  66. Raise_application_error(-20200, 'Database/Instance '
  67. || :dbid
  68. || '/'
  69. ||
  70. ' does not exist in DBA_HIST_DATABASE_INSTANCE');
  71. END IF;
  72. CLOSE cidnum;
  73. -- Check Snapshots exist for Database Id/Instance Number
  74. OPEN csnapid;
  75. FETCH csnapid INTO :max_snap_time;
  76. IF csnapid%NOTFOUND THEN
  77. Raise_application_error(-20200,
  78. 'No snapshots exist for Database/Instance '
  79. ||:dbid
  80. ||'/');
  81. END IF;
  82. CLOSE csnapid;
  83. END;
  84. /
  85. whenever SQLERROR CONTINUE;
  86. --
  87. -- Ask how many days of snapshots to display
  88. set termout ON;
  89. column instart_fmt noprint;
  90. column inst_name format a12 heading 'Instance';
  91. column db_name format a12 heading 'DB Name';
  92. column snap_id format 99999990 heading 'Snap Id';
  93. column snapdat format a18 heading 'Snap Started' just c;
  94. column lvl format 99 heading 'Snap|Level';
  95. prompt
  96. prompt
  97. prompt specify the NUMBER OF days OF snapshots TO choose FROM
  98. prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  99. prompt entering the NUMBER OF days (n) will result IN the most recent
  100. prompt (n) days OF snapshots being listed. pressing without
  101. prompt specifying a NUMBER LISTS ALL completed snapshots.
  102. prompt
  103. prompt
  104. set heading OFF;
  105. column num_days new_value num_days noprint;
  106. SELECT 'Listing '
  107. || Decode(Nvl('&&num_days', 3.14), 0, 'no snapshots',
  108. 3.14, 'all Completed Snapshots',
  109. 1,
  110. 'the last day''s Completed Snapshots',
  111. 'the last &num_days days of Completed Snapshots'
  112. ),
  113. Nvl('&&num_days', 3.14) num_days
  114. FROM sys.dual;
  115. set heading ON;
  116. --
  117. -- List available snapshots
  118. break ON inst_name ON db_name ON host ON instart_fmt skip 1;
  119. ttitle OFF;
  120. SELECT To_char(s.startup_time, 'dd Mon "at" HH24:mi:ss') instart_fmt,
  121. di.instance_name inst_name,
  122. di.db_name db_name,
  123. s.snap_id snap_id,
  124. To_char(s.end_interval_time, 'dd Mon YYYY HH24:mi') snapdat,
  125. s.snap_level lvl
  126. FROM dba_hist_snapshot s,
  127. dba_hist_database_instance di
  128. WHERE s.dbid = :dbid
  129. AND di.dbid = :dbid
  130. AND di.dbid = s.dbid
  131. AND di.instance_number = s.instance_number
  132. AND di.startup_time = s.startup_time
  133. AND s.end_interval_time >= Decode(&num_days, 0, To_date('31-JAN-9999',
  134. 'DD-MON-YYYY'
  135. ),
  136. 3.14, s.end_interval_time,
  137. To_date(:max_snap_time,
  138. 'dd/mm/yyyy')
  139. - ( &num_days - 1 ))
  140. ORDER BY db_name,
  141. instance_name,
  142. snap_id;
  143. clear break;
  144. ttitle OFF;
  145. --
  146. -- Ask for the snapshots Id's which are to be compared
  147. prompt
  148. prompt
  149. prompt specify the BEGIN AND END SNAPSHOT ids
  150. prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  151. prompt BEGIN SNAPSHOT id specified: &&begin_snap
  152. prompt
  153. prompt END SNAPSHOT id specified: &&end_snap
  154. prompt
  155. --
  156. -- Set up the snapshot-related binds
  157. --
  158. variable bid NUMBER;
  159. variable eid NUMBER;
  160. BEGIN
  161. :bid := &begin_snap;
  162. :eid := &end_snap;
  163. END;
  164. /
  165. prompt
  166. --
  167. -- Ask for Statistics Name Filter
  168. --
  169. prompt
  170. prompt
  171. prompt search statistic
  172. prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  173. prompt search BY STATISTICS name. pressing without
  174. prompt specifying anything show ALL STATISTICS.
  175. set heading OFF;
  176. column stat_search new_value stat_search noprint;
  177. SELECT 'Statistic Name Filter: '
  178. || Nvl('&&stat_search', '%'),
  179. Nvl('&&stat_search', '%') stat_search
  180. FROM sys.dual;
  181. set heading ON;
  182. column stat_id heading "Statistic ID" format 9999999999999;
  183. column name heading "Statistic Name" format a64;
  184. column class_name heading "Statistic Class" format a10;
  185. SELECT stat_id,
  186. ( CASE
  187. WHEN class = 1 THEN 'USER'
  188. WHEN class = 2 THEN 'REDO'
  189. WHEN class = 4 THEN 'ENQUEUE'
  190. WHEN class = 8 THEN 'CACHE'
  191. WHEN class = 16 THEN 'OS'
  192. WHEN class = 32 THEN 'RAC'
  193. WHEN class = 40 THEN 'RAC-CACHE'
  194. WHEN class = 64 THEN 'SQL'
  195. WHEN class = 72 THEN 'SQL-CACHE'
  196. WHEN class = 128 THEN 'DEBUG'
  197. ELSE To_char(class)
  198. END ) CLASS_NAME,
  199. name
  200. FROM v$sysstat
  201. WHERE Upper(name) LIKE Trim(Upper('%&stat_search%'))
  202. ORDER BY class,
  203. name
  204. /
  205. --
  206. -- Ask for the statistics
  207. variable stat_filter_id NUMBER
  208. variable stat_filter_name VARCHAR2(64)
  209. prompt
  210. prompt
  211. prompt specify the STATISTICS
  212. prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  213. prompt enter STATISTICS id OR STATISTICS name.
  214. prompt
  215. BEGIN
  216. SELECT To_number('&&stat_input')
  217. INTO :stat_filter_id
  218. FROM dual;
  219. EXCEPTION
  220. WHEN invalid_number THEN
  221. :stat_filter_name := '&stat_input';
  222. END;
  223. /
  224. prompt STATISTICS specified : &&stat_input
  225. column end_interval_time heading 'Snap Started' format a18 just c;
  226. column dbid heading 'DB Id' format a12 just c;
  227. column instance_number heading 'Inst|Num' format 99999;
  228. column elapsed heading 'Elapsed' format 999999;
  229. column stat_value heading 'Stat Value' format 999999999999
  230. column stat_name heading 'Stat Name' format a64 just l;
  231. SELECT snap_id,
  232. To_char(dbid) DBID,
  233. instance_number,
  234. elapsed,
  235. To_char(end_interval_time, 'dd Mon YYYY HH24:mi') END_INTERVAL_TIME,
  236. --stat_name,
  237. ( CASE
  238. WHEN stat_value > 0 THEN stat_value
  239. ELSE 0
  240. END ) STAT_VALUE
  241. FROM (SELECT snap_id,
  242. dbid,
  243. instance_number,
  244. elapsed,
  245. end_interval_time,
  246. stat_name,
  247. ( stat_value - Lag (stat_value, 1, stat_value)
  248. over (
  249. PARTITION BY dbid, instance_number
  250. ORDER BY snap_id) ) AS STAT_VALUE
  251. FROM (SELECT snap_id,
  252. dbid,
  253. instance_number,
  254. elapsed,
  255. end_interval_time,
  256. stat_name,
  257. SUM(stat_value) AS STAT_VALUE
  258. FROM (SELECT X.snap_id,
  259. X.dbid,
  260. X.instance_number,
  261. Trunc(SN.end_interval_time, 'mi')
  262. END_INTERVAL_TIME,
  263. X.stat_name,
  264. Trunc(( Cast(SN.end_interval_time AS DATE) -
  265. Cast(SN.begin_interval_time AS DATE) ) *
  266. 86400) ELAPSED,
  267. ( CASE
  268. WHEN ( X.stat_name = :stat_filter_name
  269. OR X.stat_id = :stat_filter_id ) THEN
  270. X.value
  271. ELSE 0
  272. END ) AS STAT_VALUE
  273. FROM dba_hist_sysstat X,
  274. dba_hist_snapshot SN,
  275. (SELECT instance_number,
  276. Min(startup_time) STARTUP_TIME
  277. FROM dba_hist_snapshot
  278. WHERE snap_id BETWEEN :bid AND :eid
  279. GROUP BY instance_number) MS
  280. WHERE X.snap_id = sn.snap_id
  281. AND X.dbid = sn.dbid
  282. AND x.dbid = :dbid
  283. AND x.snap_id BETWEEN :bid AND :eid
  284. AND SN.startup_time = MS.startup_time
  285. AND SN.instance_number = MS.instance_number
  286. AND X.instance_number = sn.instance_number
  287. AND ( X.stat_name = :stat_filter_name
  288. OR X.stat_id = :stat_filter_id ))
  289. GROUP BY snap_id,
  290. dbid,
  291. instance_number,
  292. elapsed,
  293. end_interval_time,
  294. stat_name));
  295. undefine dbid
  296. undefine num_days
  297. undefine begin_snap
  298. undefine end_snap
  299. undefine stat_id
  300. undefine stat_search
  301. undefine stat_filter_name
  302. undefine stat_filter_id
  303. undefine stat_input
  304. ---该脚本结束。
  305. 2. 在SQLPLUS中运行该脚本,并根据您系统实际情况输入
  306. instances IN this workload repository SCHEMA
  307. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  308. DB Id Inst Num DB Name INST_NAME Host
  309. ------------ -------- ------------ ---------------- --------------------
  310. * 1163866261 1 RBIG5 RBIG5 xxx
  311. m
  312. Enter value for dbid: 1163866261 《=====输入实例ID
  313. USING 1163866261 FOR DATABASE id
  314. specify the NUMBER OF days OF snapshots TO choose FROM
  315. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  316. entering the NUMBER OF days (n) will result IN the most recent
  317. (n) days OF snapshots being listed. pressing without
  318. specifying a NUMBER LISTS ALL completed snapshots.
  319. Enter value for num_days: 2 <===输入AWR采样天数
  320. specify the BEGIN AND END SNAPSHOT ids
  321. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  322. Enter value for begin_snap: 1605
  323. BEGIN SNAPSHOT id specified: 1605 《===根据对话输入起始snapshot 序号
  324. Enter value for end_snap: 1639
  325. END SNAPSHOT id specified: 1639《===根据对话输入结束snapshot 序号
  326. search statistic
  327. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  328. search BY STATISTICS name. pressing without
  329. specifying anything show ALL STATISTICS.
  330. Enter value for stat_search: calls to kcmgas 《======输入需要显示的统计项: calls to kcmgas
  331. Statistic Name Filter: calls to kcmgas
  332. Statistic ID Statistic Statistic Name
  333. -------------- ---------- ----------------------------------------------------------------
  334. 4072914524 DEBUG calls to kcmgas
  335. specify the STATISTICS
  336. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  337. enter STATISTICS id OR STATISTICS name.
  338. Enter value for stat_input: 4072914524 《======输入统计项返回的ID
  339. 最后,将返回一个列表,例如
  340. Inst
  341. Snap Id DB Id Num Elapsed Snap Started Stat Value
  342. --------- ------------ ------ ------- ------------------ -------------
  343. 1605 1163866261 1 3600 08 Sep 2013 00:00 0
  344. 1606 1163866261 1 3601 08 Sep 2013 01:00 170
  345. 1607 1163866261 1 3600 08 Sep 2013 02:00 164
  346. 。。。
  347. 1626 1163866261 1 3600 08 Sep 2013 21:00 155
  348. 1627 1163866261 1 3600 08 Sep 2013 22:00 165
  349. 1628 1163866261 1 3600 08 Sep 2013 23:00 2065《===如果有类似跳变发生,则表示数据库内部交易产生的剧烈变化,非DBLINK造成。
  350. 。。。
  351. 1636 1163866261 1 3600 09 Sep 2013 07:00 145
  352. 1637 1163866261 1 3601 09 Sep 2013 08:00 174
  353. 1638 1163866261 1 3600 09 Sep 2013 09:00 156
  354. 1639 1163866261 1 3600 09 Sep 2013 10:00 142
  355. 请提供您的
输出结果来作为SCN 非外部数据库DBLINK造成跳变的调查结果。 第三个方法:查询v$archived_log视图(前提是数据库开启归档模式)
  1. set numwidth 17
  2. set pages 1000
  3. alter session set nls_date_format='DD/Mon/YYYY HH24:MI:SS';
  4. SELECT tim, gscn,
  5. round(rate),
  6. round((chk16kscn - gscn)/24/3600/16/1024,1) "Headroom"
  7. FROM
  8. (
  9. select tim, gscn, rate,
  10. ((
  11. ((to_number(to_char(tim,'YYYY'))-1988)*12*31*24*60*60) +
  12. ((to_number(to_char(tim,'MM'))-1)*31*24*60*60) +
  13. (((to_number(to_char(tim,'DD'))-1))*24*60*60) +
  14. (to_number(to_char(tim,'HH24'))*60*60) +
  15. (to_number(to_char(tim,'MI'))*60) +
  16. (to_number(to_char(tim,'SS')))
  17. ) * (16*1024)) chk16kscn
  18. from
  19. (
  20. select FIRST_TIME tim , FIRST_CHANGE# gscn,
  21. ((NEXT_CHANGE#-FIRST_CHANGE#)/
  22. ((NEXT_TIME-FIRST_TIME)*24*60*60)) rate
  23. from v$archived_log
  24. where (next_time > first_time)
  25. )
  26. )
  27. order by 1,2
  28. ;

人气教程排行