์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๊ฑฐ๋ ํ๋ํ ๋ ๊ผญ ์์์ผ ํ ํต์ฌ ์ค ํ๋๊ฐ ๋ฐ๋ก ํต๊ณ ์ ๋ณด ์์ง์ ๋๋ค. ํนํ ์ตํฐ๋ง์ด์ ๊ฐ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์ ๋๋ก ์๋ฆฝํ๋ ค๋ฉด ์ต์ ํต๊ณ๊ฐ ํ์์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ DBMS_STATS.GATHER_TABLE_STATS ํ๋ก์์ ๋ฅผ ์ด์ฉํด ์ค๋ผํด ํ ์ด๋ธ ํต๊ณ ์์งํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ๋๋ฆด๊ฒ์.
✅ DBMS_STATS.GATHER_TABLE_STATS๋?
DBMS_STATS.GATHER_TABLE_STATS๋ Oracle์์ ํ
์ด๋ธ ๋ฐ ์ธ๋ฑ์ค ํต๊ณ ์ ๋ณด๋ฅผ ์์งํ๋ ๊ณต์ API์
๋๋ค.
์ตํฐ๋ง์ด์ ๊ฐ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ์ฅ ์ค์ํ ๋๊ตฌ ์ค ํ๋์
๋๋ค.
๐งฑ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
EXEC DBMS_STATS.GATHER_TABLE_STATS( ownname => '์คํค๋ง์ด๋ฆ', tabname => 'ํ ์ด๋ธ์ด๋ฆ', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, cascade => TRUE, method_opt => 'FOR ALL COLUMNS SIZE AUTO' );
ํ๋ผ๋ฏธํฐ | ์ค๋ช |
ownname | ํต๊ณ๋ฅผ ์์งํ ์คํค๋ง ์ด๋ฆ |
tabname | ๋์ ํ ์ด๋ธ ์ด๋ฆ |
estimate_percent | ์ํ๋ง ๋น์จ (100=์ ์ฒด, 10=10%, AUTO_SAMPLE_SIZE ๊ถ์ฅ) |
cascade | ๊ด๋ จ ์ธ๋ฑ์ค๋ ํจ๊ป ์์งํ ์ง ์ฌ๋ถ |
method_opt | ํ์คํ ๊ทธ๋จ ์์ง ๋ฐฉ์ (์๋ ์ค์ ๊ถ์ฅ) |
๐ก ์ค๋ฌด ์์
1. ์ ์ฒด ํต๊ณ ์์ง
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES', estimate_percent => 100, cascade => TRUE);
2. ์๋ ์ํ๋ง ๋ฐฉ์ (๊ถ์ฅ)
EXEC DBMS_STATS.GATHER_TABLE_STATS( ownname => 'HR', tabname => 'EMPLOYEES', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, cascade => TRUE );
3. ํ์คํ ๊ทธ๋จ ํฌํจ
EXEC DBMS_STATS.GATHER_TABLE_STATS( ownname => 'HR', tabname => 'EMPLOYEES', method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE );
๐ ํ ์ด๋ธ ํต๊ณ ์กฐํ ๋ฐฉ๋ฒ
SELECT table_name, num_rows, blocks, last_analyzed
FROM dba_tables
WHERE owner = 'HR' AND table_name = 'EMPLOYEES';
์ด ์ฟผ๋ฆฌ๋ฅผ ํตํด ๋ง์ง๋ง ํต๊ณ ์์ง ์์ ๊ณผ ํ ์ ๋ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ ์ธ์ ํต๊ณ๋ฅผ ์์งํด์ผ ํ ๊น?
- ๋๋ ๋ฐ์ดํฐ INSERT, UPDATE, DELETE ์ดํ
- ์ ๊ท ํ ์ด๋ธ ์์ฑ ํ
- ์ฑ๋ฅ ์ ํ๊ฐ ์์ฌ๋ ๋
- ์ธ๋ฑ์ค ์์ฑ/์ญ์ ํ
๐ ์ฐธ๊ณ : ์๋ ํต๊ณ ์์ง์ด ์ ๋ ๋
Oracle์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ํต๊ณ ์์ง ์์ ์ ์ ๊ณตํฉ๋๋ค (AUTO_STATS_JOB). ํ์ง๋ง ์๋์ ๊ฐ์ ๊ฒฝ์ฐ ์๋ ์์ง์ด ํ์ํฉ๋๋ค:
- ์์ง ์ฃผ๊ธฐ ์ ์ ๋ฐ์ดํฐ๊ฐ ๊ธ๋ณํ์ ๊ฒฝ์ฐ
- ์๋ ์์ง์ด ๋นํ์ฑํ ๋์ด ์์ ๊ฒฝ์ฐ
- ๋น์ฆ๋์ค์ ๋ฏผ๊ฐํ ์์ ์ ์ฑ๋ฅ ํ๋์ด ํ์ํ ๊ฒฝ์ฐ
✅ ๋ง๋ฌด๋ฆฌ ์์ฝ
ํญ๋ชฉ | ์ค๋ช |
ํต์ฌ ๊ธฐ๋ฅ | ์ตํฐ๋ง์ด์ ํต๊ณ ์์ง |
์ฌ์ฉ ํ์ด๋ฐ | ๋๋ DML ์ดํ, ์ ๊ท ํ ์ด๋ธ ์์ฑ ํ |
์ถ์ฒ ์ต์ | AUTO_SAMPLE_SIZE, cascade => TRUE |
ํ์ธ ๋ฐฉ๋ฒ | DBA_TABLES ์กฐํ |
ํต๊ณ ์ ๋ณด๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํต์ฌ์
๋๋ค.
์ด์ํ๊ฒฝ์์ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ ๊ธฐ์ ์ผ๋ก DBMS_STATS.GATHER_TABLE_STATS๋ฅผ ํ์ฉํด ํ
์ด๋ธ ํต๊ณ๋ฅผ ์์งํด ์ฃผ์ธ์.