#oracle #plsql #archive #ddl #dml
#Oracle #plsql #Архив #ddl #dml
Вопрос:
Я работаю над Oracle DB. Архивное хранилище объемом до ТБ в день. Мне нужно это исправить. Как определить выражения (dml ddl), которые вызывают наибольшее изменение в базе данных? Вы можете проверить это с помощью этого изображения.
Ответ №1:
Хотя я не думаю, что существует способ напрямую измерить объем пространства архива, создаваемого для каждого оператора, существует несколько простых запросов, которые могут измерять вещи, которые сильно коррелируют с пространством архива.
Используйте представление GV$SQL
, чтобы найти операторы SQL, не являющиеся SELECT, которые использовали больше всего времени. Самые продолжительные инструкции 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, которые произвели наибольшее количество операций записи за последний день. Эти результаты также могут вводить в заблуждение, поскольку при записи по прямому пути не будут создаваться данные повтора и архивирования. Но велика вероятность, что виновник находится в верхней части результатов этого запроса. (Для этого представления требуется лицензирование пакета диагностики — это часть 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;
Ответ №2:
существует интеллектуальный анализ журналов pl / sql, вы можете включить функцию oracle, sql может видеть содержимое archivelog, затем вы можете узнать, что генерирует все эти archivelog.
смотрите следующую ссылку (но вам необходимо в роли администратора базы данных включить и отслеживать содержимое архивных журналов)
https://docs.oracle.com/cd/B19306_01/server.102/b14215/logminer.htm
Скотт
Комментарии:
1. мы должны увидеть запрос, который вы использовали для получения доказательств. Кроме того, если бы вы показывали время , а также дату, это помогло бы вам сузить область поиска, когда вы начнете создавать отчеты из data miner.
Ответ №3:
Это даст вам графическое представление о том, когда в течение дня происходит переключение журналов. 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",
to_char(sum(decode(to_char(first_time,'HH24'),'01',1,0)),'999') "01",
to_char(sum(decode(to_char(first_time,'HH24'),'02',1,0)),'999') "02",
to_char(sum(decode(to_char(first_time,'HH24'),'03',1,0)),'999') "03",
to_char(sum(decode(to_char(first_time,'HH24'),'04',1,0)),'999') "04",
to_char(sum(decode(to_char(first_time,'HH24'),'05',1,0)),'999') "05",
to_char(sum(decode(to_char(first_time,'HH24'),'06',1,0)),'999') "06",
to_char(sum(decode(to_char(first_time,'HH24'),'07',1,0)),'999') "07",
to_char(sum(decode(to_char(first_time,'HH24'),'08',1,0)),'999') "08",
to_char(sum(decode(to_char(first_time,'HH24'),'09',1,0)),'999') "09",
to_char(sum(decode(to_char(first_time,'HH24'),'10',1,0)),'999') "10",
to_char(sum(decode(to_char(first_time,'HH24'),'11',1,0)),'999') "11",
to_char(sum(decode(to_char(first_time,'HH24'),'12',1,0)),'999') "12",
to_char(sum(decode(to_char(first_time,'HH24'),'13',1,0)),'999') "13",
to_char(sum(decode(to_char(first_time,'HH24'),'14',1,0)),'999') "14",
to_char(sum(decode(to_char(first_time,'HH24'),'15',1,0)),'999') "15",
to_char(sum(decode(to_char(first_time,'HH24'),'16',1,0)),'999') "16",
to_char(sum(decode(to_char(first_time,'HH24'),'17',1,0)),'999') "17",
to_char(sum(decode(to_char(first_time,'HH24'),'18',1,0)),'999') "18",
to_char(sum(decode(to_char(first_time,'HH24'),'19',1,0)),'999') "19",
to_char(sum(decode(to_char(first_time,'HH24'),'20',1,0)),'999') "20",
to_char(sum(decode(to_char(first_time,'HH24'),'21',1,0)),'999') "21",
to_char(sum(decode(to_char(first_time,'HH24'),'22',1,0)),'999') "22",
to_char(sum(decode(to_char(first_time,'HH24'),'23',1,0)),'999') "23"
from
v$log_history
group by to_char(first_time,'MMDD')
order by 1;
Удачи!