DML ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ ์์
์ธ๋ฑ์ค์ DML ์ฑ๋ฅ
- ํ
์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์
๋ ฅํ๋ฉด, ์ธ๋ฑ์ค์๋ ์
๋ ฅํด์ผ ํจ
- ํ ์ด๋ธ์ Freelist๋ฅผ ํตํด ์ ๋ ฅํ ๋ธ๋ก์ ํ ๋น
- ์ธ๋ฑ์ค๋ ์ ๋ ฌ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฏ๋ก, ์์ง์ ํ์์ ํตํด ์ ๋ ฅํ ๋ธ๋ก์ ์ฐพ์์ผ ํจ
- ์ธ๋ฑ์ค์ ์ ๋ ฅํ๋ ๊ณผ์ ์ด ๋ ๋ณต์กํ๋ฏ๋ก, DML ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ๋ ํผ
- DELETE๋ก ํ ์ด๋ธ์์ ๋ ์ฝ๋ ํ๋๋ฅผ ์ญ์ ํ๋ฉด, ์ธ๋ฑ์ค ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ์ฐพ์์ ์ญ์ ํด์ผ ํจ

- UPDATE๋ ๋ณ๊ฒฝ๋ ์ปฌ๋ผ์ ์ฐธ์กฐํ๋ ์ธ๋ฑ์ค๋ง ์ฐพ์์ ๋ณ๊ฒฝ
- ํ
์ด๋ธ์์ ํ ๊ฑด ๋ณ๊ฒฝํ ๋๋ง๋ค ์ธ๋ฑ์ค์๋ ๋ ๊ฐ ์คํผ๋ ์ด์
์ด ๋ฐ์
- ์ธ๋ฑ์ค๋ ์ ๋ ฌ๋ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ
- 'A'๋ฅผ 'K'๋ก ๋ณ๊ฒฝํ๋ฉด ์ ์ฅ ์์น๋ ๋ฌ๋ผ์ง๋ฏ๋ก ์ญ์ ํ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ
- ํ
์ด๋ธ์์ ํ ๊ฑด ๋ณ๊ฒฝํ ๋๋ง๋ค ์ธ๋ฑ์ค์๋ ๋ ๊ฐ ์คํผ๋ ์ด์
์ด ๋ฐ์

- ์ธ๋ฑ์ค ๊ฐ์๊ฐ DML ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ด ํฐ ๋งํผ, ์ค๊ณ์ ์ฌํ์ ๊ธฐ์ธ์ฌ์ผ ํจ
- ํต์ฌ ํธ๋์ญ์ ํ ์ด๋ธ์์ ์ธ๋ฑ์ค๋ฅผ ํ๋๋ผ๋ ์ค์ด๋ฉด TPS๋ ํฅ์๋จ
SQL> create table source
2 as
3 select b.no, a.*
4 from (select * from emp where rownum <= 10) a
5 ,(select rownum as no from dual connect by level <= 100000) b;
SQL> create table target
2 as
3 select * from source where 1 = 2;
SQL> alter table target add
2 constraint target_pk primary key(no, empno);
SQL> set timing on;
SQL> insert into target
2 select * from source;
1000000 ๊ฐ์ ํ์ด ๋ง๋ค์ด์ก์ต๋๋ค.
๊ฒฝ ๊ณผ: 00:00:04.95
SQL> truncate table target;
SQL> create index target_x1 on target(ename);
SQL> create index target_x2 on target(deptno, mgr);
SQL> insert into target
2 select * from source;
1000000 ๊ฐ์ ํ์ด ๋ง๋ค์ด์ก์ต๋๋ค.
๊ฒฝ ๊ณผ: 00:00:38.98
๋ฌด๊ฒฐ์ฑ ์ ์ฝ๊ณผ DML ์ฑ๋ฅ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ท์น
- ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ(Entity Integrity)
- ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ(Referential Integrity)
- ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ(Domain Integrity)
- ์ฌ์ฉ์ ์ ์ ๋ฌด๊ฒฐ์ฑ(๋๋ ์ ๋ฌด ์ ์ฝ ์กฐ๊ฑด)
- ์ด๋ค ๊ท์น์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฟ๋ง ์๋๋ผ DBMS์์ PK, FK, Check, Not Null ๊ฐ์ Constraint๋ก ๋ ์๋ฒฝํ๊ฒ ์ง์ผ๋ผ ์ ์์
- PK, FK๋ Check, Not Null ๋ณด๋ค ์ฑ๋ฅ์ ๋ ํฐ ์ํฅ
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด ๋ด์ผ ํ๊ธฐ ๋๋ฌธ
SQL> drop index target_x1;
SQL> drop index target_x2;
SQL> alter table target drop primary key;
SQL> truncate table target;
SQL> insert into target
2 select * from source;
1000000 ๊ฐ์ ํ์ด ๋ง๋ค์ด์ก์ต๋๋ค.
๊ฒฝ ๊ณผ: 00:00:01.32
| PK ์ ์ฝ/์ธ๋ฑ์ค | ์ผ๋ฐ ์ธ๋ฑ์ค(2๊ฐ) | ์์์๊ฐ |
|---|---|---|
| O | O | 38.98์ด |
| O | X | 4.95์ด |
| X | X | 1.32์ด |
์กฐ๊ฑด์ ๊ณผ DML ์ฑ๋ฅ
- SELECT๋ฌธ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์
SQL> set autotrace traceonly exp
SQL> update emp set sal = sal * 1.1 where deptno = 40;
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | 7 | 2 (0)| 00:00:01 |
| 1 | UPDATE | EMP | | | | |
| 2 | INDEX RANGE SCAN| EMP_X01 | 1 | 7 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------
SQL> delete from emp where deptno = 40;
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
| 1 | DELETE | EMP | | | | |
| 2 | INDEX RANGE SCAN| EMP_X01 | 1 | 13 | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------
์๋ธ์ฟผ๋ฆฌ์ DML ์ฑ๋ฅ
- SELECT๋ฌธ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ผ๋ฏ๋ก ์กฐ์ธ ํ๋ ์๋ฆฌ ์ ์ฉ ๊ฐ๋ฅ
SQL> update emp e set sal = sal * 1.1
2 where exists
3 (select 'x' from dept where deptno = e.deptno and loc = 'CHICAGO');
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 5 | 90 | 5 (20)|
| 1 | UPDATE | EMP | | | |
| 2 | NESTED LOOPS | | 5 | 90 | 5 (20)|
| 3 | SORT UNIQUE | | 1 | 11 | 2 (0)|
| 4 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 11 | 2 (0)|
| 5 | INDEX RANGE SCAN | DEPT_X01 | 1 | | 1 (0)|
| 6 | INDEX RANGE SCAN | EMP_X01 | 5 | 35 | 1 (0)|
---------------------------------------------------------------------------------
SQL> delete from emp e
2 where exists
3 (select 'x' from dept where deptno = e.deptno and loc = 'CHICAGO');
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 5 | 120 | 4 (25)|
| 1 | DELETE | EMP | | | |
| 2 | HASH JOIN SEMI | | 5 | 120 | 4 (25)|
| 3 | INDEX FULL SCAN | EMP_X01 | 14 | 182 | 1 (0)|
| 4 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 11 | 2 (0)|
| 5 | INDEX RANGE SCAN | DEPT_X01 | 1 | | 1 (0)|
---------------------------------------------------------------------------------
SQL> insert into emp
2 select e.*
3 from emp_t e
4 where exists
5 (select 'x' from dept where deptno = e.deptno and loc = 'CHICAGO');
---------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 5 | 490 | 6 (17)|
| 1 | LOAD TABLE CONVENTIONAL | EMP | | | |
| 2 | HASH JOIN SEMI | | 5 | 490 | 6 (17)|
| 3 | TABLE ACCESS FULL | EMP_T | 14 | 1218 | 3 (0)|
| 4 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 11 | 2 (0)|
| 5 | INDEX RANGE SCAN | DEPT_X01 | 1 | | 1 (0)|
---------------------------------------------------------------------------------
Redo ๋ก๊น ๊ณผ DML ์ฑ๋ฅ
- ์ค๋ผํด์ ๋ฐ์ดํฐํ์ผ๊ณผ ์ปจํธ๋กค ํ์ผ์ ๊ฐํด์ง๋ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ Redo ๋ก๊ทธ์ ๊ธฐ๋ก
- ํธ๋์ญ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ ๋, ํธ๋์ญ์ ์ ์ฌํํจ์ผ๋ก์จ ์ ์ค ์ด์ ์ํ๋ก ๋ณต๊ตฌํ๋ ๋ฐ ์ด์ฉ
- DML์ ์ํํ ๋๋ง๋ค Redo ๋ก๊ทธ๋ฅผ ์์ฑํด์ผ ํ๋ฏ๋ก Redo ๋ก๊น ์ DML ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นจ
- Redo ๋ก๊ทธ์ ์ฉ๋
- Database Recovery(๋๋ Media Recovery)
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋์คํฌ๊ฐ ๊นจ์ง๋ ๋ฑ Media Fail ๋ฐ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํด ์ฌ์ฉ
- ์จ๋ผ์ธ Redo ๋ก๊ทธ๋ฅผ ๋ฐฑ์ ํด ๋ Archived Redo ๋ก๊ทธ ์ด์ฉ
- Cache Recovery (Instance Recovery ์ roll forward ๋จ๊ณ)
- I/O ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฒํผ์บ์๋ ํ๋ฐ์ฑ
- ์บ์์ ์ ์ฅ๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋์คํฌ ์์ ๋ฐ์ดํฐ ๋ธ๋ก์ ์์ง ๊ธฐ๋ก๋์ง ์์ ์ํ์์ ์ธ์คํด์ค๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด, ์์ ๋ด์ฉ์ด ๋ชจ๋ ์ ์ค๋จ
- ํธ๋์ญ์ ๋ฐ์ดํฐ ์ ์ค์ ๋๋นํ๊ธฐ ์ํด Redo ๋ก๊ทธ ์ฌ์ฉ
- I/O ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฒํผ์บ์๋ ํ๋ฐ์ฑ
- Fast Commit
- ๋ณ๊ฒฝ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ธ๋ก์ ๋์คํฌ ์์ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ฐ์ํ๋ ์์ ์ ๋๋ค ์์ธ์ค ๋ฐฉ์์ผ๋ก ๋งค์ฐ ๋๋ฆผ
- ๋ก๊ทธ๋ Append ๋ฐฉ์์ผ๋ก ๊ธฐ๋กํ๋ฏ๋ก ์๋์ ์ผ๋ก ๋น ๋ฆ
- ํธ๋์ญ์
์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ์ฐ์ Append ๋ฐฉ์์ผ๋ก ๋ก๊ทธ ํ์ผ์ ๋น ๋ฅด๊ฒ ๊ธฐ๋ก
- ๋ณ๊ฒฝ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ธ๋ก๊ณผ ๋ฐ์ดํฐํ์ผ ๋ธ๋ก ๊ฐ์ ๋๊ธฐํ๋ DBWR, Checkpoint ๋ฑ์ ์ด์ฉํด Batch ๋ฐฉ์์ผ๋ก ์ผ๊ด ์ํ
- Fast Commit์ ์ฌ์ฉ์์ ๊ฐฑ์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์์ ๋ฒํผ๋ธ๋ก์๋ง ๊ธฐ๋ก๋ ์ฑ ์์ง ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์์ง๋ง Redo ๋ก๊ทธ๋ฅผ ๋ฏฟ๊ณ ๋น ๋ฅด๊ฒ ์ปค๋ฐ์ ์๋ฃํ๋ค๋ ์๋ฏธ
- ์ปค๋ฐ ์ ๋ณด๊น์ง Redo ๋ก๊ทธ ํ์ผ์ ์์ ํ๊ฒ ๊ธฐ๋กํ๋ค๋ฉด, ์ธ์คํด์ค Crash๊ฐ ๋ฐ์ํด๋ ์ธ์ ๋ ๋ณต๊ตฌํ ์ ์์
- Database Recovery(๋๋ Media Recovery)
Undo๋ก๊น ๊ณผ DML ์ฑ๋ฅ
- Redo๋ ํธ๋์ญ์ ์ ์ฌํํจ์ผ๋ก์จ ๊ณผ๊ฑฐ๋ฅผ ํ์ฌ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ฐ ์ฌ์ฉ
- Undo๋ ํธ๋์ญ์ ์ ๋กค๋ฐฑํจ์ผ๋ก์จ ํ์ฌ๋ฅผ ๊ณผ๊ฑฐ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ฐ ์ฌ์ฉ

- Redo๋ ํธ๋์ญ์ ์ ์ฌํํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ๋ก๊น
- Undo๋ ๋ณ๊ฒฝ๋ ๋ธ๋ก์ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ๋ก๊น
- DML ์ํํ ๋๋งค๋ค Undo๋ฅผ ์์ฑํด์ผ ํ๋ฏ๋ก Undo ๋ก๊น ์ DML ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นจ
Undo์ ์ฉ๋์ MVCC ๋ชจ๋ธ
- ์ค๋ผํด์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ/์์ /์ญ์ ํ ๋๋ง๋ค Undo ์ธ๊ทธ๋จผํธ์ ๊ธฐ๋ก์ ๋จ๊น
- Undo ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ ๊ณต๊ฐ์ ํด๋น ํธ๋์ญ์ ์ด ์ปค๋ฐํ๋ ์๊ฐ, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฌ์ฌ์ฉํ ์ ์๋ ์ํ๋ก ๋ฐ๋
- ๊ฐ์ฅ ์ค๋ ์ ์ ์ปค๋ฐํ Undo ๊ณต๊ฐ๋ถํฐ ์ฌ์ฌ์ฉํ๋ฏ๋ก, ์ธ์ ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ก ๋ฎ์ฌ์ฐ์
- Undo์ ๊ธฐ๋กํ ๋ฐ์ดํฐ์ ์ฉ๋
- Transaction Rollback
- ํธ๋์ญ์ ์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ์ต์ข ์ปค๋ฐํ์ง ์๊ณ ๋กค๋ฐฑํ ๋ ์ด์ฉ
- Transaction Recovery (Instacne Recovery์ rollback ๋จ๊ณ)
- Instance Crash ๋ฐ์ ํ Redo๋ฅผ ์ด์ฉํด roll forward ๋จ๊ณ๊ฐ ์๋ฃ๋๋ฉด ์ต์ข ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ๊น์ง ๋ชจ๋ ๋ณต๊ตฌ
- ์์คํ ์ด ์ ง๋ค์ด๋ ์์ ์ ์์ง ์ปค๋ฐ๋์ง ์์๋ ํธ๋์ญ์ ์ ๋ชจ๋ ๋กค๋ฐฑํด์ผ ํ๋๋ฐ, ์ด๋ Undo ๋ฐ์ดํฐ ์ด์ฉ
- Read Consistency
- ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ํด ์ฌ์ฉ
- ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ํด Consistent ๋ชจ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ค๋ผํด์์ ๋์ ํธ๋์ญ์ ์ด ๋ง์์ง์๋ก ๋ธ๋ก I/O๊ฐ ์ฆ๊ฐํ๋ฉด์ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง
- Transaction Rollback
- MVCC(Multi-Version Concurrency Control) ๋ชจ๋ธ
MVCC ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ์ค๋ผํด์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ชจ๋
Current ๋ชจ๋
- ๋์คํฌ์์ ์บ์๋ก ์ ์ฌ๋ ์๋ณธ(Current) ๋ธ๋ก์ ํ์ฌ ์ํ ๊ทธ๋๋ก ์ฝ์
Consistent ๋ชจ๋
- ์ฟผ๋ฆฌ๊ฐ ์์๋ ์ดํ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ณ๊ฒฝ๋ ๋ธ๋ก์ ๋ง๋๋ฉด ์๋ณต ๋ธ๋ก์ผ๋ก๋ถํฐ ๋ณต์ฌ๋ณธ(CR Copy) ๋ธ๋ก ๋ง๋ฆ
- ๋ณต์ฌ๋ณธ์ Undo ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํด ์ฟผ๋ฆฌ๊ฐ ์์๋ ์์ ์ผ๋ก ๋๋๋ ค์ ์ฝ์

์๋ณธ ๋ธ๋ก ํ๋์ ์ฌ๋ฌ ๋ณต์ฌ๋ณธ์ด ์บ์์ ์กด์ฌํ ์ ์์
SCN(System Commit Number)
- ์ค๋ผํด์ ์์คํ
์์ ๋ง์ง๋ง ์ปค๋ฐ์ด ๋ฐ์ํ ์์ ์ ๋ณด๋ฅผ SCN์ด๋ผ๋ Global ๋ณ์๊ฐ์ผ๋ก ๊ด๋ฆฌ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํธ๋์ญ์ ์ด ์ปค๋ฐํ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ
- ์ค๋ผํด ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์์ ์ํด์๋ ์กฐ๊ธ์ฉ ์ฆ๊ฐ
- ์ค๋ผํด์ ๊ฐ ๋ธ๋ก์ด ๋ง์ง๋ง์ผ๋ก ๋ณ๊ฒฝ๋ ์์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ชจ๋ ๋ธ๋ก ํค๋์ SCN ๊ธฐ๋ก
- ๋ธ๋ก SCN
- ๋ชจ๋ ์ฟผ๋ฆฌ๋ Global ๋ณ์์ธ SCN ๊ฐ์ ๋จผ์ ํ์ธํ๊ณ ์ ์ฝ๊ธฐ ์์
์์
- ์ฟผ๋ฆฌ SCN
- ์ค๋ผํด์ ์์คํ
์์ ๋ง์ง๋ง ์ปค๋ฐ์ด ๋ฐ์ํ ์์ ์ ๋ณด๋ฅผ SCN์ด๋ผ๋ Global ๋ณ์๊ฐ์ผ๋ก ๊ด๋ฆฌ
Consistent ๋ชจ๋๋ ์ฟผ๋ฆฌ SCN๊ณผ ๋ธ๋ก SCN์ ๋น๊ตํจ์ผ๋ก์จ ์ฟผ๋ฆฌ ์ํ ๋์ค์ ๋ธ๋ก์ด ๋ณ๊ฒฝ๋๋์ง๋ฅผ ํ์ธํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
- ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ค ๋ธ๋ก SCN์ด ์ฟผ๋ฆฌ SCN๋ณด๋ค ํฐ ๋ธ๋ก์ ๋ง๋๋ฉด ๋ณต์ฌ๋ณธ ๋ธ๋ก ์์ฑ
- Undo ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํด ์ฟผ๋ฆฌ๊ฐ ์์๋ ์์ ์ผ๋ก ๋๋๋ ค์ ์ฝ์
SELECT ๋ฌธ์ ๋ช๋ช ์์ธ๋ฅผ ์ ์ธํ๊ณ ๋ ํญ์ Consistent ๋ชจ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์
DML์ Consistent ๋ชจ๋๋ก ๋์ ๋ ์ฝ๋๋ฅผ ์ฐพ๊ณ , Current ๋ชจ๋๋ก ์ถ๊ฐ/๋ณ๊ฒฝ/์ญ์
- Consistent ๋ชจ๋๋ก DML ๋ฌธ์ด ์์๋ ์์ ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ ๋ธ๋ก ์ฐพ์
- ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ํจ
- Current ๋ชจ๋๋ก ์๋ณธ ๋ธ๋ก ๊ฐฑ์
- Consistent ๋ชจ๋๋ก DML ๋ฌธ์ด ์์๋ ์์ ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ ๋ธ๋ก ์ฐพ์
Lock๊ณผ DML ์ฑ๋ฅ
- Lock์ ํ์ ์ด์์ผ๋ก ์์ฃผ, ๊ธธ๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ๋ ๋ฒจ์ ๋์ผ์๋ก DML ์ฑ๋ฅ์ด ๋๋ ค์ง
- Lock์ ๋๋ฌด ์ ๊ฒ, ์งง๊ฒ ์ฌ์ฉํ๊ฑฐ๋ ํ์ํ ๋ ๋ฒจ ์ดํ๋ก ๋ฎ์ถ๋ฉด ๋ฐ์ดํฐ ํ์ง์ด ๋๋น ์ง
์ปค๋ฐ๊ณผ DML ์ฑ๋ฅ
- ์ปค๋ฐ์ DML๊ณผ ๋ณ๊ฐ๋ก ์คํํ์ง๋ง, DML์ ๋๋ด๋ ค๋ฉด ์ปค๋ฐ๊น์ง ์๋ฃํด์ผ ํจ
- DML์ด Lock์ ์ํด Blocking๋ ๊ฒฝ์ฐ, DML์ด ์๋ฃํ ์ ์๊ฒ Lock์ ํธ๋ ์ด์ ๊ฐ ์ปค๋ฐ์ด๋ฏ๋ก, ์ปค๋ฐ์ DML ์ฑ๋ฅ๊ณผ ์ง๊ฒฐ
- ๋ชจ๋ DBMS๊ฐ Fast Commit์ ๊ตฌํํ๊ณ ์์
- ๊ฐฑ์ ํ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๋ฆฌ ๋ง์๋ ์ปค๋ฐ๋งํผ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ
- ์ปค๋ฐ ๋ด๋ถ ๋ฉ์ปค๋์ฆ
DB ๋ฒํผ์บ์
- DB์ ์ ์ํ ์ฌ์ฉ์๋ฅผ ๋์ ํด ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ๋ ์๋ฒ ํ๋ก์ธ์ค๋ ๋ฒํผ์บ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์
- ๋ฒํผ์บ์์ ๋ณ๊ฒฝ๋ ๋ธ๋ก(Dirty Block)์ ๋ชจ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐํ์ผ์ ์ผ๊ด ๊ธฐ๋กํ๋ ์์
์ DBWR(Database Writer) ํ๋ก์ธ์ค๊ฐ ๋ด๋น
- ๊ฑด๊ฑด์ด ์ฒ๋ฆฌํ์ง ์๊ณ ๋ชจ์๋ค๊ฐ ํ ๋ฒ์ ์ผ๊ด(Batch) ์ฒ๋ฆฌ
Redo ๋ก๊ทธ๋ฒํผ
- ๋ฒํผ์บ์๋ ํ๋ฐ์ฑ์ด๋ฏ๋ก DBWR ํ๋ก์ธ์ค๊ฐ Dirty Block์ ๋ฐ์ดํฐํ์ผ์ ๋ฐ์ํ ๋๊น์ง ๋ถ์ํ ์ํ
- ๋ฒํผ์บ์์ ๊ฐํ ๋ณ๊ฒฝ์ฌํญ์ Redo ๋ก๊ทธ์๋ ๊ธฐ๋ก
- ๋ฒํผ์บ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋๋๋ผ๋ Redo ๋ก๊ทธ๋ฅผ ์ด์ฉํด ๋ณต๊ตฌ ๊ฐ๋ฅ
- Redo ๋ก๊ทธ๋ ํ์ผ
- Append ๋ฐฉ์์ผ๋ก ๊ธฐ๋กํ๋๋ผ๋ ๋์คํฌ I/O๋ ๋๋ฆผ
- Redo ๋ก๊น
์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก๊ทธ๋ฒํผ ์ด์ฉ
- Redo ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํ๊ธฐ ์ ์ ๋จผ์ ๋ก๊ทธ๋ฒํผ์ ๊ธฐ๋ก
- ๊ธฐ๋กํ ๋ด์ฉ์ ๋์ค์ LGWR(Log Writer) ํ๋ก์ธ์ค๊ฐ Redo ๋ก๊ทธ ํ์ผ์ ์ผ๊ด(Batch) ๊ธฐ๋ก
ํธ๋์ญ์ ๋ฐ์ดํฐ ์ ์ฅ ๊ณผ์
- DML๋ฌธ์ ์คํํ๋ฉด Redo ๋ก๊ทธ๋ฒํผ์ ๋ณ๊ฒฝ์ฌํญ ๊ธฐ๋ก
- ๋ฒํผ๋ธ๋ก์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ(๋ ์ฝ๋ ์ถ๊ฐ/์์ /์ญ์ )
- ๋ฒํผ์บ์์์ ๋ธ๋ก์ ์ฐพ์ง ๋ชปํ๋ฉด, ๋ฐ์ดํฐํ์ผ์์ ์ฝ๋ ์์ ๋ถํฐ
- ์ปค๋ฐ
- LGWR ํ๋ก์ธ์ค๊ฐ Redo ๋ก๊ทธ๋ฒํผ ๋ด์ฉ์ ๋ก๊ทธํ์ผ์ ์ผ๊ด ์ ์ฅ
- DBWR ํ๋ก์ธ์ค๊ฐ ๋ณ๊ฒฝ๋ ๋ฒํผ๋ธ๋ก๋ค์ ๋ฐ์ดํฐํ์ผ์ ์ผ๊ด ์ ์ฅ

- ์ค๋ผํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ํญ์ ๋ก๊ทธ๋ถํฐ ๊ธฐ๋ก
- Write Ahead Logging
- ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์บ์๊ฐ ํ๋ฐ์ฑ์ด์ด์ Redo ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋๋ฐ, Redo ๋ก๊ทธ๋ง์ ํ๋ฐ์ฑ ๋ก๊ทธ๋ฒํผ์ ๊ธฐ๋กํ๋ค๋ฉด ํธ๋์ญ์
๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์งํฌ ์ ์์๊น
- DBWR/LGWR ํ๋ก์ธ์ค๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๊นจ์ด๋ ๊ฐ๊ฐ Dirty Block๊ณผ Redo ๋ก๊ทธ๋ฒํผ๋ฅผ ํ์ผ์ ๊ธฐ๋ก
- LGWR ํ๋ก์ธ์ค๋ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ์ปค๋ฐ์ ๋ฐํํ๋ค๊ณ ์ ํธ๋ฅผ ๋ณด๋ผ๋๋ ๊นจ์ด๋์ ํ๋์ ์์
- ์ ์ด๋ ์ปค๋ฐ์์ ์๋ Redo ๋ก๊ทธ๋ฒํผ ๋ด์ฉ์ ๋ก๊ทธํ์ผ์ ๊ธฐ๋ก
- Log Force at Commit
- ์๋ฒ ํ๋ก์ธ์ค๊ฐ ๋ณ๊ฒฝํ ๋ฒํผ๋ธ๋ก๋ค์ ๋์คํฌ์ ๊ธฐ๋กํ์ง ์์๋๋ผ๋ ์ปค๋ฐ ์์ ์ Redo ๋ก๊ทธ๋ฅผ ๋์คํฌ์ ์์ ํ๊ฒ ๊ธฐ๋กํ๋ค๋ฉด ํธ๋์ญ์ ์ ์์์ฑ ๋ณด์ฅ
์ปค๋ฐ = ์ ์ฅ๋ฒํผ
- ์ปค๋ฐ์ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ทธ๋๊น์ง ํ๋ ์์
์ ๋์คํฌ์ ๊ธฐ๋กํ๋ผ๋ ๋ช
๋ น์ด
- ์ ์ฅ์ ์๋ฃํ ๋๊น์ง ์๋ฒ ํ๋ก์ธ์ค๋ ๋ค์ ์์ ์งํ ๋ถ๊ฐ
- Redo ๋ก๊ทธ๋ฒํผ์ ๊ธฐ๋ก๋ ๋ด์ฉ์ ๋์คํฌ์ ๊ธฐ๋กํ๋๋ก LGWR ํ๋ก์ธ์ค์ ์ ํธ๋ฅผ ๋ณด๋ธ ํ ์์ ์ ์๋ฃํ๋ค๋ ์ ํธ๋ฅผ ๋ฐ์์ผ ๋ค์ ์์ ์งํ ๊ฐ๋ฅ(Sync)
- LGWR ํ๋ก์ธ์ค๊ฐ Redo๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ ์์ ์ ๋์คํฌ I/O์์ ์ผ๋ก, ์ปค๋ฐ์ ์๊ฐ๋ณด๋ค ๋๋ฆผ
- ํธ๋์ญ์
์ ํ์ ์ด์์ผ๋ก ๊ธธ๊ฒ ์ ์ํด ์ค๋ซ๋์ ์ปค๋ฐํ์ง ์๋ ๊ฒ์ ์ข์ง ์์
- ์ค๋ซ๋์ ์ปค๋ฐํ์ง ์์ ์ฑ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๊ฐฑ์ ํ๋ค๋ฉด Undo ๊ณต๊ฐ์ด ๋ถ์กฑํด์ ธ ์์คํ ์ฅ์ ์ํฉ ์ ๋ฐ
- ๋ฐ๋๋ก ๋๋ฌด ์์ฃผ ์ปค๋ฐํ๋ ๊ฒ๋ ์ข์ง ์์
- ๋ฃจํ๋ฅผ ๋๋ฉด์ ๊ฑด๊ฑด์ด ์ปค๋ฐํ๋ค๋ฉด ํ๋ก๊ทธ๋จ ์์ฒด ์ฑ๋ฅ์ด ๋งค์ฐ ๋๋ ค์ง
- ์ปค๋ฐ์ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ทธ๋๊น์ง ํ๋ ์์
์ ๋์คํฌ์ ๊ธฐ๋กํ๋ผ๋ ๋ช
๋ น์ด