问题描述
我正在研究Oracle DB。 每天将存储归档至TB级。我需要解决这个问题。 如何检测导致数据库变化最大的表达式(dml + ddl)? 您可以检查这张图片。
解决方法
有日志挖掘pl / sql,您可以在oracle功能中打开,sql可以查看archivelog的内容,然后您可以找出生成所有这些archivelog的内容。
请参阅以下链接(但是您需要以dba角色来启用和跟踪存档日志的内容)
https://docs.oracle.com/cd/B19306_01/server.102/b14215/logminer.htm
斯科特
,虽然我不认为有一种方法可以直接测量每个语句生成的归档日志空间量,但是有几个简单的查询可以测量与归档日志空间高度相关的事物。
使用视图GV$SQL
查找使用时间最多的非SELECT SQL语句。运行时间最长的DML和DDL语句通常是写入最多数据的语句。以我的经验,仅查看此查询的结果,其中一条SQL语句就会成为罪魁祸首。
select round(elapsed_time/1000000) seconds,gv$sql.*
from gv$sql
where command_type <> 3 --ignore SELECT statements.
order by seconds desc;
使用视图DBA_HIST_SQLSTAT
查找在过去一天中物理写入次数最多的SQL语句。这些结果也可能会产生误导,因为直接路径写入将不会生成REDO和archivelog数据。但是,罪魁祸首很可能位于此查询结果的顶部。 (此视图需要获得诊断包的许可-它是AWR的一部分。)
select sql_id,round(physical_write_bytes_total/1024/1024) mb,dba_hist_sqlstat.*
from dba_hist_sqlstat
where (snap_id,dbid) in
(
--Snapshots in the last 24 hours.
select snap_id,dbid
from dba_hist_snapshot
where begin_interval_time >= sysdate - interval '240' hour
)
order by dba_hist_sqlstat.physical_write_bytes_total desc;
,
这将为您提供全天日志切换时间的图形视图。 https://www.morganslibrary.org/reference/log_files.html
set echo on
/*
Look for anomalies in log switch frequency and
switch frequencies greater than 12 per hour.
*/
set echo off
select
to_char(first_time,'MMDD') MMDD,to_char(sum(decode(to_char(first_time,'HH24'),'00',1,0)),'999') "00",'01','999') "01",'02','999') "02",'03','999') "03",'04','999') "04",'05','999') "05",'06','999') "06",'07','999') "07",'08','999') "08",'09','999') "09",'10','999') "10",'11','999') "11",'12','999') "12",'13','999') "13",'14','999') "14",'15','999') "15",'16','999') "16",'17','999') "17",'18','999') "18",'19','999') "19",'20','999') "20",'21','999') "21",'22','999') "22",'23','999') "23"
from
v$log_history
group by to_char(first_time,'MMDD')
order by 1;
祝你好运!