Архивное хранилище размером в терабайт в день

#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;
  

Удачи!