source

오라클에서 인덱스 생성 시간 추정

ittop 2023. 7. 21. 21:57
반응형

오라클에서 인덱스 생성 시간 추정

Oracle 환경에 새 인덱스의 이점을 얻을 수 있는 테이블이 몇 개 있습니다.하지만 1M 레지스터부터 300M 레지스터까지 다양한 큰 테이블이기 때문에 먼저 인덱스 생성에 걸리는 시간을 추정해 보겠습니다. 그러면 적어도 크기의 순서(시간, 일, 주)는 알 수 있을까요?

이 문제를 해결하는 데 도움이 될 만한 휴리스틱/오라클 기능/엄지의 법칙이 있습니까?

Oracle은 다음을 사용하여 인덱스 생성 시간 및 인덱스 크기를 추정할 수 있습니다.EXPLAIN PLAN명령:

샘플 스키마

--Create a table with 1 million rows.
drop table table1;
create table table1(a number);
insert into table1 select level from dual connect by level <= 1000000;
--Gather statistics.
begin
    dbms_stats.gather_table_stats(user, 'table1');
end;
/
--Estimate index creation and size.
explain plan for create index table1_idx on table1(a);
select * from table(dbms_xplan.display);

결과.

Plan hash value: 290895522

-------------------------------------------------------------------------------------
| Id  | Operation              | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | CREATE INDEX STATEMENT |            |  1000K|  4882K|   683   (2)| 00:00:10 |
|   1 |  INDEX BUILD NON UNIQUE| TABLE1_IDX |       |       |            |          |
|   2 |   SORT CREATE INDEX    |            |  1000K|  4882K|            |          |
|   3 |    TABLE ACCESS FULL   | TABLE1     |  1000K|  4882K|   254   (5)| 00:00:04 |
-------------------------------------------------------------------------------------

Note
-----
   - automatic DOP: skipped because of IO calibrate statistics are missing
   - estimated index size: 24M bytes

메모들

시스템의 실제 생성 시간은 2.5초로 예상되는 10초와 비교됩니다.하지만 규모의 추정치만 찾는다면 그것으로 충분합니다.정확도는 정확한 테이블 통계와 우수한 시스템 통계를 보유하는 것에 따라 달라집니다. (그러나 시스템 통계를 수집하기 전에 주의하십시오. 이는 많은 실행 계획에 영향을 미칠 수 있습니다.수동으로 수정하여 설정을 추가로 조정할 수 있습니다.sys.aux_stats$이 표는 수정할 수 있는 몇 안 되는 SYS 표 중 하나입니다. 그래도 주의해야 합니다.

생성 시간에 영향을 미칠 수 있는 기계 속도, 메모리 등 고려해야 할 요소가 너무 많습니다.또한 데이터의 특성 자체가 생성 시간에 상당한 영향을 미칠 수 있습니다.

제가 할 일은 더 큰 테이블 중 하나를 선택해서 그 테이블에 인덱스를 만들고 얼마나 걸리는지 보는 것입니다.그런 다음 시간을 들여 표의 행 수로 나누면 예상되는 값에 대한 대략적인 메트릭을 얻을 수 있습니다.다시 한 번 말씀드리지만, 이것은 정확하지는 않을 것입니다. 하지만 단지 경험칙일 뿐입니다.일부 테이블에는 열이 더 많고 희소한 열 값이 더 적은 등이 있기 때문에 많이 달라질 수 있지만, 이는 시작점입니다.

Ex.  It takes 3600 seconds to create a index on table X, which has 3 million rows.
So the metric is 3600 / 3,000,000 = 0.0012 seconds per row.

So if table Y has 8 million rows, you could expect
.0012 * 8,000,000 = 9600 seconds (or 160 minutes) to create the index.

언급URL : https://stackoverflow.com/questions/3071930/estimating-index-creation-time-in-oracle

반응형