Как узнать, какие столбцы наиболее доступны или часто используются в Oracle 12c - PullRequest
1 голос
/ 27 марта 2020

Я имею дело с огромной таблицей, которая имеет 618 столбцов. Команда не хочет исследовать, какие столбцы не используются, и изменять код для их удаления, и я понимаю, что время ограничено. Одно из предложений состоит в том, чтобы определить, какие столбцы из этой таблицы являются наиболее доступными или часто используемыми, и изменить порядок столбцов. Я оставил настройку экспертам, и мне поручили идентифицировать такие столбцы.

Итак, я запрашиваю all_tab_columns, пытаясь выяснить простой способ выполнить задачу. Четыре колонки привлекли мое внимание: Num_distinct, Density, Num_nulls, Sample_size. Я думал, что соотношение между sample_size и num_nulls может быть способом идентификации наиболее используемых столбцов. Чем ближе это отношение к 1, тем выше вероятность его использования. Но, как обычно, это не может быть так просто, потому что я обнаружил, что я схожу с ума по крысе ios, поскольку у меня есть столбцы в NUM-NULLS в 80Millions-i sh, а SAMPLE_SIZE - только 141.

Интересно, была ли у кого-то похожая ситуация или у кого-то есть предложение о том, что лучше для этого подходит. Заранее спасибо.

Я выполнил запрос ниже и сгенерировал список столбцов на основе статистики. По крайней мере, так у меня есть представление о том, что мне нужно доставить.

выберите ts.owner, ts.table_name, ts.column_name, t c .column_id, t.num_rows, ts.num_nulls, случай, когда nvl (ts.num_nulls, 0)> 0 затем (1 - round (((ts.num_nulls / t.num_rows)), 6)) когда nvl (ts.num_nulls, 0) = 0, затем 1 end UsagePer c, ts.num_distinct, ts.density из all_tables t присоединиться к all_tab_col_statistics ts on ts.owner = t.owner и ts.table_name = t.table_name объединяют all_tab_columns t c в t c .owner = ts.owner и t c .table_name = ts.table_name и t c .column_name = ts.column_name где t.owner = 'THE_OWNER' и t.table_name = 'THE_HUGE_TABLE' упорядочены по ts.num_nulls, ts.density des c

1 Ответ

0 голосов
/ 27 марта 2020

Лучший способ узнать, как часто используются столбцы, - включить (детальный) аудит и дать ему поработать некоторое время. Затем просмотрите захваченные операторы:

grant create session, unlimited tablespace 
  to u 
  identified by u;

create table u.t (
  c1 int, c2 int, c3 int
);

exec dbms_fga.add_policy ( 'U', 'T', 'AUDIT_COLS', enable => true, statement_types => 'INSERT,UPDATE,DELETE,SELECT' );

conn u/u

insert into t ( c1 ) values ( 1 );
insert into t values ( 2, 2, 2 );

select c2 from t;
select * from t;

update t
set    c3 = 1
where  c1 = 1;

delete t
where  c2 is null;
commit;

conn chris

select sql_text 
from   dba_fga_audit_trail;

SQL_TEXT                               
insert into t ( c1 ) values ( 1 )       
insert into t values ( 2, 2, 2 )        
select c2 from t                        
select * from t                         
update t
set    c3 = 1
where  c1 = 1    
delete t
where  c2 is null  

Обратите внимание, что вы получили полные операторы, поэтому вам придется немного поспорить, чтобы извлечь столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...