프린트 하기

OS 환경 : Oracle Linux 8.4 (64bit)

 

DB 환경 : Oracle Database 19.3.0.0

 

방법 : 오라클 19c 테이블 ctas 생성 및 append 삽입시, 인덱스 생성시 자동 통계정보 수집

오라클 19c 환경에서 테이블 생성 또는 데이터삽입, 인덱스 생성시 통계정보가 자동으로 수집됨
어떤 설정에 의해 수집되는지 확인해보기 위해 테스트해봄
현재 db는 아래 게시글처럼 silent 모드로 설치함
Oracle Linux 8.4에 Oracle 19c Silent 모드 설치 가이드 ( https://positivemh.tistory.com/1152 )

 

 

테스트
사전 확인
1. _optimizer_gather_stats_on_load 파라미터 true 인 경우(기본값)
2. _optimizer_gather_stats_on_load 파라미터 false 인 경우
3. _optimizer_compute_index_stats 파라미터 false 인 경우
4. 관련 파라미터 확인

 

 

테스트
사전 확인
db 접속 후 pfile 생성

1
2
3
SQL> create pfile from spfile;
 
File created.

 

 

pfile 내용 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ cat $ORACLE_HOME/dbs/initoraclee19.ora
oraclee19.__data_transfer_cache_size=0
oraclee19.__db_cache_size=1124073472
oraclee19.__inmemory_ext_roarea=0
oraclee19.__inmemory_ext_rwarea=0
oraclee19.__java_pool_size=0
oraclee19.__large_pool_size=16777216
oraclee19.__oracle_base='/ORA19/app/oracle'#ORACLE_BASE set from environment
oraclee19.__pga_aggregate_target=536870912
oraclee19.__sga_target=1610612736
oraclee19.__shared_io_pool_size=83886080
oraclee19.__shared_pool_size=369098752
oraclee19.__streams_pool_size=0
oraclee19.__unified_pga_pool_size=0
*.audit_file_dest='/ORA19/app/oracle/admin/oraclee19/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/ORA19/app/oracle/oradata/ORACLEE19/control01.ctl','/ORA19/app/oracle/oradata/ORACLEE19/control02.ctl'
*.db_block_size=8192
*.db_name='oraclee1'
*.db_unique_name='oraclee19'
*.diagnostic_dest='/ORA19/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oraclee19XDB)'
*.local_listener='LISTENER_ORACLEE19'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=512m
*.processes=320
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1536m
*.undo_tablespace='UNDOTBS1'

 

 

자동 통계 잡 확인 후 비활성화

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SQL>
set lines 200 pages 1000
col client_name for a40
col attributes for a70
select client_name, status, attributes 
from dba_autotask_client;
 
CLIENT_NAME                              STATUS   ATTRIBUTES
---------------------------------------- -------- ----------------------------------------------------------------------
auto optimizer stats collection          ENABLED  ON BY DEFAULT, VOLATILE, SAFE TO KILL
auto space advisor                       ENABLED  ON BY DEFAULT, VOLATILE, SAFE TO KILL
sql tuning advisor                       ENABLED  ONCE PER WINDOW, ON BY DEFAULT, VOLATILE, SAFE TO KILL
 
SQL>
BEGIN
  DBMS_AUTO_TASK_ADMIN.DISABLE(
    client_name => 'auto optimizer stats collection',
    operation   => NULL,
    window_name => NULL
  );
END;
/
 
PL/SQL procedure successfully completed.
 
SQL>
set lines 200 pages 1000
col client_name for a40
col attributes for a70
select client_name, status, attributes 
from dba_autotask_client;
 
CLIENT_NAME                              STATUS   ATTRIBUTES
---------------------------------------- -------- ----------------------------------------------------------------------
auto optimizer stats collection          DISABLED ON BY DEFAULT, VOLATILE, SAFE TO KILL
auto space advisor                       ENABLED  ON BY DEFAULT, VOLATILE, SAFE TO KILL
sql tuning advisor                       ENABLED  ONCE PER WINDOW, ON BY DEFAULT, VOLATILE, SAFE TO KILL

 

 

imsi 유저 생성
오라클 19c 테스트 시 사용하는 imsi 유저 생성 쿼리 ( https://positivemh.tistory.com/1017 )

 

 

imsi 유저에 v$parameter 확인 권한도 부여

1
2
3
SQL> grant select on V_$PARAMETER to imsi;
 
Grant succeeded.

 

 

1. _optimizer_gather_stats_on_load 파라미터 true 인 경우(기본값)
*참고로 테이블 생성, 데이터 삽입, 인덱스 생성등은 imsi 유저로 진행하고, 통계확인은 sysdba로 확인함

 

 

_optimizer_gather_stats_on_load 파라미터 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL>
conn / as sysdba
set lines 200 pages 1000
col name for a50
col instance for a10
col desc for a80
select
a.ksppinm "name",
c.ksppstvl "instance",
a.ksppdesc "desc"
from x$ksppi a, x$ksppcv b, x$ksppsv c, v$parameter p
where 1=1
and a.indx=b.indx
and a.indx=c.indx
AND p.name(+) = a.ksppinm
AND SUBSTR(a.KSPPINM, 1, 1) = '_'
and a.ksppinm like '%_optimizer_gather_stats_on_load%'
order by 1;
 
name                                               instance   desc
-------------------------------------------------- ---------- --------------------------------------------------------------------------------
_optimizer_gather_stats_on_load                    TRUE       enable/disable online statistics gathering

TRUE 임

 

 

imsi 유저 접속 후 테이블 생성

1
2
3
4
5
SQL> 
conn imsi/imsi
create table t1 (col1 number, col2 varchar2(10));
 
Table created.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T1';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T1

통계가 존재하지 않음

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
SQL> select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T1';
 
no rows selected

통계가 존재하지 않음

 

 

t1 테이블에 데이터 단건 삽입

1
2
3
4
5
6
7
SQL> insert into t1 values (1,'A');
 
1 row created.
 
SQL> commit;
 
Commit complete.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

 

 

t1 테이블에 데이터 itas로 인서트로 삽입

1
2
3
4
5
6
7
SQL> insert into t1 select * from t1;
 
1 row created.
 
SQL> commit;
 
Commit complete.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

 

 

t1 테이블에 데이터 벌크인서트로 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL>
DECLARE
TYPE tbl_ins IS TABLE OF t1%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
BEGIN
FOR i IN 1..100000 LOOP 
   w_ins(i).col1   := i;
   w_ins(i).col2  := dbms_random.string('x',5);
END LOOP;
FORALL i in 1..100000 INSERT INTO t1 VALUES w_ins(i);
   COMMIT;
END;
/
 
PL/SQL procedure successfully completed.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

 

 

t1 테이블에 direct path insert 수행

1
2
3
4
5
6
7
SQL> insert /*+ append */ into t1 select * from t1;
 
100002 rows created.
 
SQL> commit;
 
Commit complete.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

 

 

인덱스 생성

1
2
3
SQL> create index t1_ix1 on t1(col1, col2);
 
Index created.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)
인덱스 통계정보 확인

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col index_name for a10
select index_name, table_name, num_rows, distinct_keys, leaf_blocks, clustering_factor, last_analyzed 
from dba_indexes 
where table_name = 'T1';
 
INDEX_NAME TABLE_NAME   NUM_ROWS DISTINCT_KEYS LEAF_BLOCKS CLUSTERING_FACTOR LAST_ANAL
---------- ---------- ---------- ------------- ----------- ----------------- ---------
T1_IX1     T1             200004        100001         611            200002 20-OCT-24

인덱스 통계정보는 자동으로 생성됨

 

 

t1_1 테이블 ctas로 생성

1
2
3
SQL> create table t1_1 as select * from t1;
 
Table created.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T1_1';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T1_1           200004        456            0          11 20-OCT-24

자동으로 통계가 수집됨

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
11
SQL> 
set lines 200 pages 1000
col column_name for a10
select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T1_1';
 
TABLE_NAME COLUMN_NAM NUM_DISTINCT    DENSITY  NUM_NULLS AVG_COL_LEN LAST_ANAL
---------- ---------- ------------ ---------- ---------- ----------- ---------
T1_1       COL1             100824 9.9183E-06          0           5 20-OCT-24
T1_1       COL2              99104  .00001009          0           6 20-OCT-24

자동으로 컬럼 통계가 수집됨

 

 

플랜 확인(xplan 이용)

1
2
3
4
5
6
7
8
9
10
SQL> SELECT * FROM DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ADVANCED ALLSTATS LAST');
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers | Writes |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | CREATE TABLE STATEMENT           |      |      1 |        |       |   242 (100)|          |      0 |00:00:00.13 |    2048 |    440 |       |       |          |
|   1 |  LOAD AS SELECT                  | T1_1 |      1 |        |       |            |          |      0 |00:00:00.13 |    2048 |    440 |    14M|    14M| 2070K (0)|
|   2 |   OPTIMIZER STATISTICS GATHERING |      |      1 |    197K|  3864K|   132   (1)| 00:00:01 |    200K|00:00:00.05 |     468 |      0 |   256K|   256K|  256K (0)|
|   3 |    TABLE ACCESS FULL             | T1   |      1 |    197K|  3864K|   132   (1)| 00:00:01 |    200K|00:00:00.01 |     468 |      0 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

플랜에 OPTIMIZER STATISTICS GATHERING 오퍼레이션이 표시됨

 

 

t1_2 테이블 생성 후 이 테이블에 direct path insert 수행

1
2
3
4
5
6
7
8
SQL> create table t1_2 (col1 number, col2 varchar2(10));
SQL> insert /*+ append */ into t1_2 select * from t1;
 
200004 rows created.
 
SQL> commit;
 
Commit complete.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T1_2';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T1_2           200004        456            0          11 20-OCT-24

자동으로 통계가 수집됨

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
11
SQL> 
set lines 200 pages 1000
col column_name for a10
select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T1_2';
 
TABLE_NAME COLUMN_NAM NUM_DISTINCT    DENSITY  NUM_NULLS AVG_COL_LEN LAST_ANAL
---------- ---------- ------------ ---------- ---------- ----------- ---------
T1_2       COL1             100824 9.9183E-06          0           5 20-OCT-24
T1_2       COL2              99104  .00001009          0           6 20-OCT-24

자동으로 컬럼 통계가 수집됨

 

 

플랜 확인(xplan 이용)

1
2
3
4
5
6
7
8
9
10
SQL> SELECT * FROM DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ADVANCED ALLSTATS LAST');
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers | Writes |  OMem |  1Mem | Used-Mem |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT                 |      |      1 |        |       |   132 (100)|          |      0 |00:00:00.07 |     982 |    440 |       |       |          |
|   1 |  LOAD AS SELECT                  | T1_2 |      1 |        |       |            |          |      0 |00:00:00.07 |     982 |    440 |  2070K|  2070K| 2070K (0)|
|   2 |   OPTIMIZER STATISTICS GATHERING |      |      1 |    197K|  3864K|   132   (1)| 00:00:01 |    200K|00:00:00.02 |     471 |      0 |   256K|   256K|          |
|   3 |    TABLE ACCESS FULL             | T1   |      1 |    197K|  3864K|   132   (1)| 00:00:01 |    200K|00:00:00.01 |     468 |      0 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

플랜에 OPTIMIZER STATISTICS GATHERING 오퍼레이션이 표시됨

 

 

2. _optimizer_gather_stats_on_load 파라미터 false 인 경우
_optimizer_gather_stats_on_load_all 파라미터 false로 변경

1
2
3
SQL> alter system set "_optimizer_gather_stats_on_load" = FALSE;
 
System altered.

 

 

_optimizer_gather_stats_on_load 파라미터 확인

1
2
3
4
5
6
7
8
SQL>
col name for a40
col value for a20
select name, value from v$parameter where name = '_optimizer_gather_stats_on_load';
 
NAME                                     VALUE
---------------------------------------- --------------------
_optimizer_gather_stats_on_load          FALSE

 

 

테이블 생성

1
2
3
SQL> create table t2 (col1 number, col2 varchar2(10));
 
Table created.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T2';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T2

통계가 존재하지 않음

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
SQL> select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T2';
 
no rows selected

통계가 존재하지 않음

 

 

t2 테이블에 데이터 단건 삽입(쿼리 생략)

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

t2 테이블에 데이터 itas로 인서트로 삽입(쿼리 생략)

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

t2 테이블에 데이터 벌크인서트로 삽입(쿼리 생략)

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

t2 테이블에 direct path insert 수행(쿼리 생략)

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)

 

 

인덱스 생성

1
2
3
SQL> create index t2_ix1 on t2(col1, col2);
 
Index created.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음(쿼리 생략)
인덱스 통계정보 확인

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col index_name for a10
select index_name, table_name, num_rows, distinct_keys, leaf_blocks, clustering_factor, last_analyzed 
from dba_indexes 
where table_name = 'T2';
 
INDEX_NAME TABLE_NAME   NUM_ROWS DISTINCT_KEYS LEAF_BLOCKS CLUSTERING_FACTOR LAST_ANAL
---------- ---------- ---------- ------------- ----------- ----------------- ---------
T2_IX1     T2             200004        100001         611            200002 20-OCT-24

인덱스 통계정보는 자동으로 생성됨

 

 

t2_1 테이블 ctas로 생성

1
2
3
SQL> create table t2_1 as select * from t2;
 
Table created.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T2_1';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T2_1

자동으로 통계가 수집되지 않음

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
SQL> 
set lines 200 pages 1000
col column_name for a10
select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T2_1';
 
no rows selected

자동으로 통계가 수집되지 않음

 

 

t2_2 테이블 생성 후 이 테이블에 direct path insert 수행

1
2
3
4
5
6
7
8
SQL> create table t2_2 (col1 number, col2 varchar2(10));
SQL> insert /*+ append */ into t2_2 select * from t2;
 
200004 rows created.
 
SQL> commit;
 
Commit complete.

 

 

테이블 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col table_name for a10
select table_name, num_rows, blocks, empty_blocks, avg_row_len, last_analyzed 
from dba_tables 
where table_name = 'T2_2';
 
TABLE_NAME   NUM_ROWS     BLOCKS EMPTY_BLOCKS AVG_ROW_LEN LAST_ANAL
---------- ---------- ---------- ------------ ----------- ---------
T2_2

자동으로 통계가 수집되지 않음

 

 

컬럼 통계정보 확인(dba 권한계정으로)

1
2
3
4
5
6
7
8
SQL> 
set lines 200 pages 1000
col column_name for a10
select table_name, column_name, num_distinct, density, num_nulls, avg_col_len, last_analyzed 
from dba_tab_col_statistics 
where table_name = 'T2_2';
 
no rows selected

자동으로 통계가 수집되지 않음

 

 

3. _optimizer_compute_index_stats 파라미터 false 인 경우
_optimizer_compute_index_stats 파라미터 false로 변경

 

 

1
2
3
SQL> alter system set "_optimizer_compute_index_stats" = FALSE;
 
System altered.

 

 

_optimizer_compute_index_stats 파라미터 확인

1
2
3
4
5
6
7
8
SQL>
col name for a40
col value for a20
select name, value from v$parameter where name = '_optimizer_compute_index_stats';
 
NAME                                     VALUE
---------------------------------------- --------------------
_optimizer_compute_index_stats           FALSE

 

 

t4 테이블 생성

1
2
3
SQL> create table t4 as select * from T2;
 
Table created.

 

 

인덱스 생성

1
2
3
SQL> create index t4_ix1 on t4(col1, col2);
 
Index created.

 

 

테이블, 컬럼 통계정보 확인시 여전히 통계가 없음
인덱스 통계정보 확인

1
2
3
4
5
6
7
8
9
10
SQL>
set lines 200 pages 1000
col index_name for a10
select index_name, table_name, num_rows, distinct_keys, leaf_blocks, clustering_factor, last_analyzed 
from dba_indexes 
where table_name = 'T4';
 
INDEX_NAME TABLE_NAME   NUM_ROWS DISTINCT_KEYS LEAF_BLOCKS CLUSTERING_FACTOR LAST_ANAL
---------- ---------- ---------- ------------- ----------- ----------------- ---------
T4_IX1     T4

인덱스 통계도 수집되지 않음

 

 

4. 통계 관련 파라미터 확인
gather_stat 이 포함되는 히든 파라미터들 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SQL>
set lines 200 pages 1000
col name for a50
col instance for a10
col desc for a80
select
a.ksppinm "name",
c.ksppstvl "instance",
a.ksppdesc "desc"
from x$ksppi a, x$ksppcv b, x$ksppsv c, v$parameter p
where 1=1
and a.indx=b.indx
and a.indx=c.indx
AND p.name(+) = a.ksppinm
AND SUBSTR(a.KSPPINM, 1, 1) = '_'
and a.ksppinm like '%gather_stat%'
order by 1;
 
name                                               instance   desc
-------------------------------------------------- ---------- --------------------------------------------------------------------------------
_datapump_gather_stats_on_load                     FALSE      Gather table statistics during Data Pump load rather thanimporting statistics fr
                                                              om the dump file. This should be set to TRUE in the lockdown profile in a DWCS e
                                                              nvironment.
 
_optimizer_gather_stats_on_conventional_config     0          settings for optimizer online stats gathering on conventional DML
_optimizer_gather_stats_on_conventional_dml        TRUE       optimizer online stats gathering for conventional DML
_optimizer_gather_stats_on_load                    FALSE      enable/disable online statistics gathering
_optimizer_gather_stats_on_load_all                FALSE      enable/disable online statistics gathering for nonempty segments
_optimizer_gather_stats_on_load_hist               FALSE      enable/disable online histogram gathering for loads
_optimizer_gather_stats_on_load_index              TRUE       enable/disable online index stats gathering for loads
 
7 rows selected.

본문에서 조작한 _optimizer_gather_stats_on_load 파라미터 외에도 여러가지 파라미터들이 존재함

 

 

참고용
테스트 후 파라미터 원복

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> alter system set "_optimizer_compute_index_stats" = TRUE;
 
System altered.
 
SQL> alter system set "_optimizer_gather_stats_on_load" = TRUE;
 
System altered.
 
SQL> alter system reset "_optimizer_compute_index_stats";
 
System altered.
 
SQL> alter system reset "_optimizer_gather_stats_on_load";
 
System altered.

 

 

결론 :
테이블을 일반적인 방법으로 생성하거나 데이터를 삽입할때는 통계가 자동으로 생성되지 않음
하지만 ctas나 append insert 를 사용해 신규 테이블(통계정보가 없는)을 생성하거나 데이터를 삽입하는 경우
_optimizer_gather_stats_on_load 파라미터에 의해(기본값 true) 자동으로 통계정보가 생성됨
(기존테이블 데이터로 기존테이블에 append insert 시에는 통계가 자동으로 생성되지 않았음)
참고로 이 기능은 12c 부터 나온 Online Statistics Gathering 기능이라고함, 파티션 테이블에도 동일하게 동작함
그리고 인덱스 생성시에는 _optimizer_compute_index_stats 파라미터에 의해(기본값 true) 자동으로 통계정보가 생성됨
만약 이렇게 자동으로 통계정보가 생성되는것을 막고 싶은경우 이 파라미터들을 false 로 설정해두면됨

 

 

참조 : 

2019634.1
https://www.oracle.com/technetwork/database/bi-datawarehousing/twp-bp-for-stats-gather-12c-1967354.pdf
https://oracle-base.com/articles/12c/online-statistics-gathering-for-bulk-loads-12cr1
https://positivemh.tistory.com/829
https://positivemh.tistory.com/1017
https://positivemh.tistory.com/1152
https://swpju.tistory.com/entry/오라클-자동-통계자료-수집-공간-어드바이스-튜닝-어드바이스-onoff
https://dbcafe.co.kr/w/index.php/오라클_자동_통계정보_스케줄
https://hrjeong.tistory.com/223