ํต์ฌ ์์ฝ
์ต๊ทผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ผ์ผ ์ ๊ฒ์ ์๋ํํ๋ ํ๋ก์ ํธ๋ฅผ ๋งก๊ฒ ๋๋ฉด์, DBA๊ฐ ๋งค์ผ ๋ค์ฌ๋ค๋ณด๋ ๋ชจ๋ํฐ๋ง ์งํ๋ค์ ์ฒ์๋ถํฐ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ์ง๋ ๊ธ์์ MySQL์ ๋ค๋ค๋๋ฐ, ์ด๋ฒ์๋ Oracle ์ฐจ๋ก์ ๋๋ค. Oracle์ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ฉด์๋ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ MySQL๊ณผ ๊ฝค ๋ฌ๋ผ์, ์งํ ์ด๋ฆ๋ ์ ๋ฐ์ฏค์ ์ฒ์ ๋ณด๋ ๋จ์ด๋ค์ด์์ต๋๋ค. Redo, Undo, Library Cache, Hard Parse, ํ ์ด๋ธ์คํ์ด์ค ๊ฐ์ ๋ง์ด ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ์๋ ํ๋์ฉ ์ ๋ฆฌํด ๋๊ธฐ๋ก ํ์ต๋๋ค.
์ด ๊ธ์์๋ Oracle(๋ฐ Oracle on RDS)์์ ์์ฃผ ๋ณด๋ ์งํ๋ค์ โ ๋ฌด์์ ์๋ฏธํ๋์ง โก ํ์ ์ด๋ ์ ๋ ๊ฐ์ด ์ ์์ธ์ง(์ค์ ๊ด์ธก ๋ฒ์·ํ๊ท ) โข ๊ฐ์ด ํ๋ฉด ๋ฌด์์ ์์ฌํด์ผ ํ๋์ง โฃ ํจ๊ป ๋ณด๋ฉด ์ข์ ์งํ โค ์ง์ ํ์ธํ๋ ์ฟผ๋ฆฌ๋ก ๋ฌถ์ด ์ ๋ฆฌํ์ต๋๋ค. Oracle๋ง์ ๊ฐ๋ (SGA, Redo, Undo, Library Cache, ํ์ฑ, ํ ์ด๋ธ์คํ์ด์ค)์ ์งํ๋ฅผ ๋ณด๊ธฐ ์ ์ ๋จผ์ ํ ๋ฒ ํ์ด ๋์์ต๋๋ค. ์ด ๊ฐ๋ ๋ค์ด ๊ทธ๋๋ก ๋ค์ ์งํ๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ ์งํ๋ง๋ค ๊ทธ๊ฒ์ ์ค์ ๋ก ์์ง์ด๊ฒ ๋ง๋๋ ์ฟผ๋ฆฌ ํจํด์ "๋์ ์ → ๊ณ ์น ์" SQL๋ก ๊ฐ๋ฅํ ํ ํจ๊ป ์ ์๊ณ , ์ค์ ์ฅ์ ๋ก ์ด์ด์ง๋ ์๋๋ฆฌ์ค๋ ๋ถ์์ต๋๋ค.
๋ณธ๋ฌธ์ "๊ด์ธก๊ฐ"์ ์ค์ ์ด์ ์ธ์คํด์ค ํ ๋์์ 1๋ถ ๊ฐ๊ฒฉ์ผ๋ก ํ ๋ฌ๊ฐ ์์งํ ๊ฐ์ ๋๋ค. ์ธ์คํด์ค๋ง๋ค ๋ค๋ฅด๋ฏ๋ก ์ ๋์ ์ธ ๊ธฐ์ค์ ์๋๊ณ , "๋ณดํต ์ด ์ ๋๊ตฌ๋"๋ฅผ ๊ฐ ์ก๋ ์ฉ๋์ ๋๋ค.
Oracle์ ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ๊ฐ
์งํ๋ฅผ ๋ณด๊ธฐ ์ ์, Oracle์ด MySQL·PostgreSQL๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง๋ถํฐ ์ง๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
- Oracle: ์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๊ฒฉ์ ๋๋ค. ์ํ·ํต์ ·๋๊ธฐ์ ์ ํต์ฌ ์ ๋ฌด ์์คํ (๊ธฐ๊ฐ๊ณ)์ ์ค๋ซ๋์ ์ฐ์ฌ ์์ต๋๋ค. ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ด๋ฉฐ, ๋๊ท๋ชจ ํธ๋์ญ์ ์ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฐ์ ์ด ์์ต๋๋ค. ๋์ ๋ผ์ด์ ์ค ๋น์ฉ์ด ๋น์๋๋ค.
- MySQL: ์คํ์์ค์ด๊ณ ๊ฐ๋ณ๊ณ ๋น ๋ฆ ๋๋ค. ์ฝ๊ธฐ๊ฐ ๋ง์ ์น ์๋น์ค์์ ์ค๋ ์ฌ๋๋ฐ์ ์์ต๋๋ค. ์คํ ๋ฆฌ์ง ์์ง(InnoDB ๋ฑ)์ ๊ฐ์ ๋ผ์ธ ์ ์๋ ๊ฒ์ด ๊ตฌ์กฐ์ ํน์ง์ ๋๋ค.
- PostgreSQL: ์คํ์์ค์ด๋ฉด์ ํ์ค ์ค์์ ํ์ฅ์ฑ์ด ๊ฐ์ ์ ๋๋ค. ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ด ํ์ํ ๊ณณ์ ์ ๋ง์ต๋๋ค.
์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ CPU·๋ฉ๋ชจ๋ฆฌ·์ธ์ ·I/O ๊ฐ์ ๊ณตํต ์งํ๋ฅผ ๋ณด์ง๋ง, ๊ทธ ์์ ๊ฐ์ ๊ณ ์ ํ ์งํ๊ฐ ์นํ๋๋ค. MySQL์ InnoDB์์ ๋์ค๋ ์งํ(๋ฒํผํ ์ ์ค๋ฅ , Row Lock Waits ๋ฑ)๊ฐ ๋ง์๋๋ฐ, Oracle์ Redo, Undo, Library Cache, ํ์ฑ, ํ ์ด๋ธ์คํ์ด์ค์์ ๋์ค๋ ์งํ๊ฐ ๋ง์ต๋๋ค. ์ด ๋จ์ด๋ค์ด ์ฒ์์ด๋ฉด ์งํ ์ด๋ฆ์ด ์ธ๊ณ์ด์ฒ๋ผ ๋ณด์ด๋ฏ๋ก, ํต์ฌ ๊ฐ๋ ์ ๋จผ์ ์ฝ๊ฒ ํ์ด ๋๊ฒ ์ต๋๋ค. ์๋ ๊ฐ๋ ๋ค์ด ๊ทธ๋๋ก ๋ค์ ์งํ๋ก ์ด์ด์ง๋๋ค.
Oracle์ ํต์ฌ ๊ฐ๋ ๋จผ์ ํ๊ธฐ
- ์ธ์คํด์ค์ SGA(๊ณต์ ๋ฉ๋ชจ๋ฆฌ): Oracle์ ์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๊ฑฐ๋ํ ๊ณต์ ๊ณต๊ฐ์ ํ๋ ์ก์ต๋๋ค. ์ด๊ฒ์ SGA(System Global Area) ๋ผ๊ณ ํฉ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ด ์๋๋ค. ์์ฃผ ์ฐ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ ์บ์ฑํ๋ ๋ฒํผ ์บ์, SQL ์คํ๊ณํ์ ์บ์ฑํ๋ Library Cache, Redo๋ฅผ ์ ์ ๋ชจ์ผ๋ Redo ๋ก๊ทธ ๋ฒํผ๊ฐ ๋ชจ๋ ์ด SGA ์์ ์์ต๋๋ค. MySQL์ ๋ฒํผํ์ ํด๋นํ๋ ๊ฒ์ด SGA ์์ ๋ฒํผ ์บ์๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค. (์ฌ์ฉ์ ํ ๋ช ๋ง๋ค ๋ฐ๋ก ์ฐ๋ ์์ ๊ณต๊ฐ์ PGA๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ ๋ ฌ·ํด์ ์์ ๋ฑ์ ์๋๋ค.) SGA๋ "๋ชจ๋๊ฐ ๊ณต์ ํ๋ ํฐ ์ฑ ์", PGA๋ "๊ฐ์ธ ์ฑ ์" ์ ๋๋ก ๊ตฌ๋ถํ๋ฉด ๋ฉ๋๋ค.
- Redo(๋ฆฌ๋, ๋ณ๊ฒฝ ๋ก๊ทธ): ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค "๋ฌด์์ ์ด๋ป๊ฒ ๋ฐ๊ฟจ๋์ง"๋ฅผ ๋จผ์ ์ ์ด ๋๋ ๊ธฐ๋ก์ ๋๋ค. ์ ์ ์ด๋ ์ฅ์ ๋ก DB๊ฐ ๊ฐ์๊ธฐ ์ฃฝ์ด๋, ์ด Redo ๊ธฐ๋ก์ ๋ค์ ์ ์ฉํ๋ฉด ๋ง์ง๋ง ์ํ๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ํ๊ณ ์ฅ๋ถ์ ๊ฑฐ๋๋ฅผ ์ ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ ์ฅ๋ถ์ ๋จผ์ ์ ์ด ๋๋ฏ๋ก, ์ฌ๊ณ ๊ฐ ๋๋ ์ฅ๋ถ๋ฅผ ๋ณด๊ณ ๋ณต์ํฉ๋๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT/UPDATE/DELETE)์ด ๋ง์ผ๋ฉด Redo๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค. ๋ค์ Redo Entries·Log File Sync ์งํ๊ฐ ์ด๊ฒ์์ ๋์ต๋๋ค.
- Undo(์ธ๋, ๋๋๋ฆฌ๊ธฐ·์ฝ๊ธฐ ์ผ๊ด์ฑ): ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์ "์๋ ๊ฐ"์ ๋ฐ๋ก ๋ณด๊ดํด ๋๋ ๊ณณ์
๋๋ค. ๋ ๊ฐ์ง๋ก ์ฐ์
๋๋ค. โ ํธ๋์ญ์
์ด
ROLLBACKํ๋ฉด ์ด ์๋ ๊ฐ์ผ๋ก ๋๋๋ฆฌ๊ณ , โก ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ๋ณ๊ฒฝ ์ ์ ๊นจ๋ํ ๋ชจ์ต์ ๋ณด์ฌ ์ค๋๋ค(์ฝ๊ธฐ ์ผ๊ด์ฑ). ์ฌ์ง์ ์์ ํด๋ ์๋ณธ์ ๋ฐ๋ก ๋จ๊ฒจ๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ค์ Undo Change Vector Size·DBWR Undo Block Writes·Consistent Reads ์งํ๊ฐ ์ด๊ฒ์์ ๋์ต๋๋ค. - Library Cache(๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์, SQL ์คํ๊ณํ ์บ์): SQL ํ ๋ฌธ์ฅ์ ์คํํ๋ ค๋ฉด Oracle์ ๋จผ์ ๊ทธ ๋ฌธ์ฅ์ ๋ถ์ํด "์ด๋ค ์ธ๋ฑ์ค๋ฅผ ํ๊ณ ์ด๋ค ์์๋ก ์ฝ์์ง"๋ผ๋ ์คํ๊ณํ์ ์ธ์์ผ ํฉ๋๋ค. ์ด ๋ถ์์ ๋น์ฉ์ด ํฐ ์์ ์ด๋ผ, ํ ๋ฒ ์ธ์ด ์คํ๊ณํ์ SGA ์์ Library Cache์ ๋ณด๊ดํด ๋๊ณ ๊ฐ์ ๋ฌธ์ฅ์ด ๋ ์ค๋ฉด ์ฌ์ฌ์ฉํฉ๋๋ค. ์์ฃผ ์ฐ๋ ์๋ฆฌ๋ฒ์ ๋งค๋ฒ ์ฒ์๋ถํฐ ์ง์ง ์๊ณ ์ ์ด ๋ ๋ ์ํผ๋ฅผ ๋ค์ ๋ณด๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ํ์ฑ(Hard parse vs Soft parse): SQL ๋ฌธ์ฅ์ด ๋ค์ด์์ ๋ ์คํ๊ณํ์ ์ฐพ๋ ๊ณผ์ ์ ํ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค. Library Cache์ ์ด๋ฏธ ๊ฐ์ ๋ฌธ์ฅ์ ์คํ๊ณํ์ด ์์ผ๋ฉด ๊ทธ๊ฒ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ฐ๋๋ฐ, ์ด๊ฒ์ด Soft parse(์ํํธ ํ์ค) ์ ๋๋ค. ๊ฐ๋ณ์ต๋๋ค. ๋ฐ๋๋ก ์บ์์ ์์ด์ ์ฒ์๋ถํฐ ๋ถ์ํด ์คํ๊ณํ์ ์๋ก ์ธ์์ผ ํ๋ฉด Hard parse(ํ๋ ํ์ค) ์ ๋๋ค. ๋ฌด๊ฒ์ต๋๋ค. ํต์ฌ์, ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฐ์ง ์๊ณ ๋งค๋ฒ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ์ SQL์ Oracle ์ ์ฅ์์ ๋งค๋ฒ ๋ค๋ฅธ ๋ฌธ์ฅ์ผ๋ก ๋ณด์ฌ์ Hard parse๊ฐ ํญ์ฆํ๋ค๋ ์ ์ ๋๋ค. ์ด๊ฒ์ด Oracle ์ฑ๋ฅ ๋ฌธ์ ์ ๋จ๊ณจ ์์ธ์ด๊ณ , ๋ค์ Parse Count (Hard)·Library Cache Lock ์งํ๊ฐ ์ด๊ฒ์ ๋ด ๋๋ค.
- ํ ์ด๋ธ์คํ์ด์ค(์ ์ฅ ๊ณต๊ฐ): Oracle์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ ผ๋ฆฌ์ ์ธ ๊ณต๊ฐ ๋จ์์ ๋๋ค. ํ ์ด๋ธ·์ธ๋ฑ์ค๋ ์ด๋ ํ ์ด๋ธ์คํ์ด์ค์ ์ ์ฅํ ์ง ์ ํด์ง๊ณ , ํ ์ด๋ธ์คํ์ด์ค๋ ์ค์ ๋์คํฌ ํ์ผ(๋ฐ์ดํฐ ํ์ผ)์ ๋์ํฉ๋๋ค. ์ฐฝ๊ณ ๋ฅผ ๊ตฌ์ญ์ผ๋ก ๋๋ "์ด ๊ตฌ์ญ์ ์ฃผ๋ฌธ ๋ฐ์ดํฐ, ์ ๊ตฌ์ญ์ ํ์ ๋ฐ์ดํฐ" ์์ผ๋ก ๋๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ์ด ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐจ๋ฉด ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์์ด ์ฅ์ ๋ก ์ง๊ฒฐ๋๋ฏ๋ก, ์ฌ์ฉ๋ฅ ์ ๋ ๊ฐ์ํฉ๋๋ค. (RDS ํ๊ฒฝ์์๋ ์ธ์คํด์ค ์ ์ฒด์ Free Storage Space๋ก๋ ํจ๊ป ๋ด ๋๋ค.)
- ๋ธ๋ก(block): Oracle์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์ต์ ๋จ์์ ๋๋ค. ํ ํ๋ํ๋๊ฐ ์๋๋ผ ์ฌ๋ฌ ํ์ด ๋ด๊ธด "๋ธ๋ก" ๋จ์๋ก ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค๊ฐ๋๋ค. ๋ค์ Physical Reads·Session Logical Reads๊ฐ ์ด ๋ธ๋ก ์๋ฅผ ์ ๋๋ค.
์ด ๊ฐ๋ ๋ค์ ๋จธ๋ฆฌ์ ๋ฃ๊ณ ๋ณด๋ฉด, ๋ค์ ๋์ค๋ 33๊ฐ ์งํ๊ฐ ๋ฐ๋ก ๋ ธ๋ ์ซ์๊ฐ ์๋๋ผ ํ๋์ ๊ทธ๋ฆผ์ผ๋ก ์ด์ด์ง๋๋ค.
๋ค์ด๊ฐ๊ธฐ ์ ์ — ์งํ๋ฅผ ๋ณด๋ ๋ ๊ฐ์ง ๊ด์
์งํ๋ฅผ ๋ณผ ๋๋ ๋ณดํต ๋ ๊ฐ์ง ๊ธฐ์ค์ ๊ฐ์ด ์๋๋ค.
์ฒซ์งธ๋ ์ ๋ ์๊ณ๊ฐ์ ๋๋ค. "CPU ์ฌ์ฉ๋ฅ 80% ์ด์์ด๋ฉด ์ํ" ์ฒ๋ผ ๋ฏธ๋ฆฌ ์ ํ ์ ์ ๋์๋์ง ๋ด ๋๋ค. ๊ธฐ์ค์ด ๋ช ํํ์ง๋ง, DB๋ง๋ค ์ ์ ๋ฒ์๊ฐ ๋ฌ๋ผ ์๊ณ๊ฐ๋ DB๋ณ๋ก ๋ค๋ฅด๊ฒ ์ก์์ผ ํฉ๋๋ค.
๋์งธ๋ ํ์ ๋๋น ๋ณํ์ ๋๋ค. ์๊ณ๊ฐ์ ๋์ง ์์๋๋ผ๋ "์ด์ ๊น์ง ํ๊ท 10์ด๋ ๊ฐ์ด ์ค๋ 40์ผ๋ก ๋ฐ์๋ค" ๋ฉด ๋ฌด์ธ๊ฐ ๋ฌ๋ผ์ง ๊ฒ์ ๋๋ค. ๋น์ ํ์๋ฉด ์ ๋ ์๊ณ๊ฐ์ ๊ฑด๊ฐ๊ฒ์ง์ ์ ์ ์์นํ์ด๊ณ , ํ์ ๋๋น ๋ณํ๋ ํ์ ๋ด ์ปจ๋์ ๊ณผ ๋น๊ตํ๋ ๊ฒ์ ๋๋ค. ๋ ๋ค ๋ด์ผ ๋์น๋ ๊ฒ์ด ์์ต๋๋ค. Oracle์๋ Redo Entries๋ Undo Change Vector Size์ฒ๋ผ ํ์์ ์๋ค๊ฐ ๋ฐฐ์น ๋ ์๋ฐฑ, ์์ฒ ๋ฐฐ๋ก ํ๋ ์งํ๊ฐ ๋ง์์, ํนํ "ํ์ ๋๋น ๋ณํ"๊ฐ ์ค์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ๊ฐ์ง ๋, ์งํ๋ ๊ฑฐ์ ํผ์ ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ๊ฐ ์งํ๋ง๋ค "ํจ๊ป ํ์ธํ ์งํ" ๋ฅผ ๋ถ์์ต๋๋ค. ์ด๋ค ๊ฐ์ด ํ์์ ๋ ์์ ์งํ๊ฐ ๊ฐ์ด ์ฌ๋๋์ง๋ก ์์ธ์ ๋ฐฉํฅ์ด ๊ฐ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋๋ค.
1. CPU · ๋ฉ๋ชจ๋ฆฌ · ๋์คํฌ
์๋ฒ๊ฐ ์ผ๋ง๋ ๋ฐ์์ง๋ฅผ ๋ณด๋ ๊ธฐ๋ณธ ์์ญ์ ๋๋ค. ์๋น์ ๋น์ ํ๋ฉด CPU๋ ์ฃผ๋ฐฉ์ ๋ฐ์ ์ ๋, ๋ฉ๋ชจ๋ฆฌ๋ ์กฐ๋ฆฌ๋์ ๋์ด, ๋์คํฌ๋ ์์์ฌ๋ฅผ ์์ ๋ ์ฐฝ๊ณ ์ ๋๋ค. ์ฃผ๋ฌธ์ด ๋ชฐ๋ฆฌ๋ฉด ์ฃผ๋ฐฉ์ด ๋ฐ๋น ์ง๊ณ (CPU↑), ์กฐ๋ฆฌ๋๊ฐ ์ข์ผ๋ฉด ๊ทธ๋๊ทธ๋ ์ฐฝ๊ณ ๋ฅผ ์ค๊ฐ์ผ ํ๋ฉฐ(๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ), ์ฐฝ๊ณ ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ๋ ์ด์ ๋ค์ฌ๋์ ์ ์์ต๋๋ค(๋์คํฌ ๊ฐ๋ ์ฐธ).
(OS) Cpu Usage (%)
์๋ฒ์ CPU ์ฌ์ฉ๋ฅ ์ ๋๋ค. ๊ฐ์ฅ ๋จผ์ ๋ณด๋ ์งํ์ด๊ณ ์๋ฏธ๋ ์ง๊ด์ ์ ๋๋ค. CPU๋ ๊ฒฐ๊ตญ ์ฟผ๋ฆฌ๋ฅผ ์ค์ ๋ก ๊ณ์ฐํ๋ ์ผ๊พผ์ด๋ผ, ๋ฌด๊ฑฐ์ด ์ฐ์ฐ(์ ๋ ฌ·์กฐ์ธ·์ง๊ณ·ํ ์ค์บ)์ด๋ ์ฆ์ Hard parse๊ฐ ๋ง์์ง์๋ก ์ฌ๋ผ๊ฐ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 15.5%, ๋ฒ์ ์ฝ 3.7 ~ 44%. MySQL ์ธ์คํด์ค๋ณด๋ค๋ ๋๊ฒ ๊น๋ ค ์๊ณ , ์๊ฐ์ ์ผ๋ก 40%๋๊น์ง ์ค๋ฅด๊ธฐ๋ ํฉ๋๋ค.
- ์ํ ์ ํธ: ๋ณดํต ๊ฒฝ๊ณ 60%, ์ํ 80%๋ก ์ก์ต๋๋ค. 80%๋ฅผ ๋์ด ์ง์๋๋ฉด ์ฟผ๋ฆฌ ์๋ต์ด ๋๋ ค์ง๊ธฐ ์์ํฉ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ(ํ ์ค์บ·์ ๋ ฌ·์กฐ์ธ), ๊ฐ์๊ธฐ ๋์ด๋ ํ์ฑ ์ธ์ , ๋๋ ๋ฐฐ์น, ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ์ผ๋ก ์ธํ Hard parse ํญ์ฆ. CPU๋ง ๋จ๋ ์ผ๋ก ํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๊ณ ๋ณดํต Active Session์ด๋ ์ฝ๊ธฐ๋(Physical/Logical Reads)์ด ๊ฐ์ด ์ฌ๋ผ๊ฐ๋๋ค.
Oracle์์ CPU๋ฅผ ๋์ด์ฌ๋ฆฌ๋ ์ ํ์ ์ธ ์ฟผ๋ฆฌ๋ "ํ ์ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์๋" ํํ์ ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๋ ์กฐ๊ฑด, ํจ์๋ก ๊ฐ์ผ ์ปฌ๋ผ์ด ๋ํ์ ์ ๋๋ค.
-- ๋์ ์: created_at์ ์ธ๋ฑ์ค๊ฐ ์์ด๋ TRUNC ํจ์๋ก ๊ฐ์ธ๋ฉด ์ธ๋ฑ์ค๊ฐ ๋ฌด๋ ฅํ๋๋ค
-- ํ ์ค์บ + ํจ์ ์ฐ์ฐ์ด ๊ฒน์ณ CPU๋ฅผ ํฌ๊ฒ ์ด๋ค
SELECT * FROM orders
WHERE TRUNC(created_at) = DATE '2026-06-18';
-- ๊ณ ์น ์: ํจ์ ์์ด ๋ฒ์ ์กฐ๊ฑด์ผ๋ก ๋ฐ๊พธ๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ๋ค
SELECT order_id, member_id, total_amount, created_at
FROM orders
WHERE created_at >= DATE '2026-06-18'
AND created_at < DATE '2026-06-19';
์ง๊ธ ๋ฌด์์ด CPU๋ฅผ ์ฐ๊ณ ์๋์ง๋ ์คํ ์ค์ธ ์ธ์ ๋ถํฐ ๋ด ๋๋ค.
-- ์ง๊ธ ํ์ฑ(ACTIVE) ์ธ์
์ด ์ด๋ค SQL์ ๋๋ฆฌ๊ณ ์๋์ง
SELECT s.sid, s.serial#, s.username, s.status,
s.sql_id, q.sql_text
FROM v$session s
LEFT JOIN v$sql q ON q.sql_id = s.sql_id
WHERE s.status = 'ACTIVE'
AND s.type = 'USER'
ORDER BY s.last_call_et DESC;
- ํจ๊ป ํ์ธํ ์งํ: Physical Reads·Session Logical Reads๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๋ ํ ์ค์บ/๋ฌด๊ฑฐ์ด ์ฝ๊ธฐ ์ฟผ๋ฆฌ๊ฐ CPU๋ฅผ ๋จน๋ ๊ฒ์ ๋๋ค. Active Session์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ฟผ๋ฆฌ๊ฐ ๋นจ๋ฆฌ ๋๋์ง ๋ชปํ๊ณ ์์ด๋ ์ค์ ๋๋ค. Parse Count (Hard)๊ฐ ๊ฐ์ด ๋ฐ๋ฉด → ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ์ผ๋ก ํ์ฑ์ด CPU๋ฅผ ๋จน๋ ๊ฒ์ ๋๋ค(์ฟผ๋ฆฌ ํจ์จ ๋ฌธ์ ์ ๊ตฌ๋ถ).
๊ฐ๋ฐ์ ๊ด์ — ์ ๋ ฌ·์ง๊ณ·๋ฌธ์์ด ๊ฐ๊ณต์ ์ ๋ถ DB ์ฟผ๋ฆฌ์ ๋ชฐ์๋ฃ์ผ๋ฉด ๊ทธ ๊ณ์ฐ ๋ถ๋ด์ด ๊ทธ๋๋ก CPU๋ก ์ต๋๋ค. ๋ Oracle์์๋ ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฐ์ง ์๊ณ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ๋ ์ฝ๋๊ฐ Hard parse๋ฅผ ์ ๋ฐํด CPU๋ฅผ ๊ฐ์๋จน์ต๋๋ค. ์์ฃผ ์ฐ๋ ์ง๊ณ๋ ๋ฏธ๋ฆฌ ๊ณ์ฐํด ๋๊ณ , ์กฐํ ์กฐ๊ฑด์ ๋ฐ์ธ๋ ๋ณ์๋ก ๋๊ธฐ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ ๋๋ค.
(OS) Memory Percent (%) / (OS) Memory Free (Bytes)
์ด์์ฒด์ ๊ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ (%)๊ณผ ๋จ์ ๋ฉ๋ชจ๋ฆฌ(Bytes)์ ๋๋ค.
- ๊ด์ธก๊ฐ: ์ฌ์ฉ๋ฅ ํ๊ท ์ฝ 56.5%(๋ฒ์ 55.9 ~ 59.7%), ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์ฝ 60GB๋ก ํํํ๊ฒ ์ ์ง๋์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ ์ธ์คํด์ค ํฌ๊ธฐ์ SGA ์ค์ ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์, ์ด๋ค ๊ณณ์ 90%๋๋ก ๋๊ฒ ์ ์ง๋๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋์ ์ ๋๊ฐ๋ณด๋ค ์ถ์ธ๊ฐ ์ค์ํฉ๋๋ค.
- ์ํ ์ ํธ: ๊ฒฝ๊ณ 90%, ์ํ 95%. ๋ค๋ง ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊พธ์คํ ์ค์ด๋๋ ์ถ์ธ๊ฐ ๋ ์ํํฉ๋๋ค. ๊ณ ๊ฐ๋๋ฉด OS๊ฐ ์ค์(๋์คํฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ์ฐ๋ ๊ฒ)์ ์์ํ๊ณ , ๊ทธ๋๋ถํฐ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ๋๋น ์ง๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ธ์ ํญ์ฆ(์ธ์ ๋ง๋ค PGA ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์), ํฐ ์ ๋ ฌ·ํด์ ์กฐ์ธ์ผ๋ก PGA ์ฌ์ฉ ์ฆ๊ฐ, SGA ์ค์ ๊ณผ๋ค.
์ค์(swap)์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ชจ์๋ ๋ ์ด์์ฒด์ ๊ฐ ๋์คํฌ์ ์ผ๋ถ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋น๋ ค ์ฐ๋ ๊ฒ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ๋น ๋ฅด๊ณ ๋์คํฌ๋ ํจ์ฌ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ค์์ด ์์๋๋ฉด ๋ชจ๋ ์์ ์ด ๊ฐ์๊ธฐ ๋๋ ค์ง๋๋ค. Oracle์์ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ ํฐ ์ ๋ ฌ·ํด์ ์์ ์ด PGA๋ฅผ ๋ง์ด ์ธ ๋ ์ ์๊น๋๋ค.
-- ์ ๋ ฌ/ํด์ ์์
์ด ๋ฉ๋ชจ๋ฆฌ์์ ๋๋์ง ๋ชปํ๊ณ ๋์คํฌ(temp)๋ก ๋์ด๊ฐ๋์ง ํ์ธ
-- 'workarea executions - multipass'๋ 'sorts (disk)'๊ฐ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ ํธ
SELECT name, value
FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)');
- ํจ๊ป ํ์ธํ ์งํ: Total Session์ด ๊ฐ์ด ์ฐ์ํฅํ๋ฉด → ์ธ์ ๋์๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๊ฒ์ ๋๋ค. Physical Reads๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ ๋ ฌ·ํด์๊ฐ ๋์คํฌ๋ก ๋์ด๊ฐ๋ฉฐ ๋์คํฌ ์ฝ๊ธฐ๋ฅผ ์ ๋ฐํ๋ ์ค์ ๋๋ค. ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค๋ฉฐ Read IOPS๊ฐ ์ค๋ฅด๋ฉด → ์ค์์ด ์์๋์ ์ ์์ด ์ฆ์ ์ ๊ฒํฉ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Oracle ๋ฉ๋ชจ๋ฆฌ๋ ์ธ์ ๋ง๋ค PGA๋ฅผ ์กฐ๊ธ์ฉ ์ก์๋จน๊ณ , ํฐ ์ ๋ ฌ·ํด์ ์กฐ์ธ์ PGA๋ฅผ ํฌ๊ฒ ์๋๋ค. ์ธ์ ์ ๊ณผํ๊ฒ ์ด๊ฑฐ๋(์ปค๋ฅ์ ํ ๊ณผ๋ค) ํ ๋ฒ์ ๊ฑฐ๋ํ ๊ฒฐ๊ณผ์ ์ ์ ๋ ฌ·๊ทธ๋ฃนํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฃผ ๋ ๋ฆฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด ์ปค์ง๋๋ค. ์ธ๋ฑ์ค๋ก ์ ๋ ฌ์ ๋์ ํ๊ฒ ํ๊ณ ๊ฒฐ๊ณผ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด, ์ ๋ ฌ์ด ๋์คํฌ(temp)๋ก ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์ค์ด๋ญ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ด ๋ 56%๋ก ํํํ๋ฉด ํ๋์ ์ ์์์ ์ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ฒ์ฒํ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ธ์ ์ ๋ซ์ง ์์ผ๋ฉด ์ธ์ ์ด ์์ด๋ฉฐ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ฐ๋น ์ผ์ ํ๊ฒ ์ค์ด๋๋ ์ฐํํฅ ๊ทธ๋ํ๊ฐ ๊ทธ๋ ค์ง๋๋ค. ์ด๋ ์๊ฐ ์ค์์ด ์์๋๋ฉด ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ๋๋ ค์ง๋ฏ๋ก, ์ถ์ธ๊ฐ ๊บพ์ด๊ธฐ ์ ์ ์ก๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
(OS) Disk Percent (%)
์๋ฒ ๋์คํฌ ์ฌ์ฉ๋ฅ ์ ๋๋ค. ์ธ์คํด์ค์ ๋ถ์ ๋์คํฌ๊ฐ ์ผ๋ง๋ ์ฐผ๋์ง๋ฅผ ๋ด ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 80%, ๋ฒ์ 79.4 ~ 80.5%๋ก ๊ฑฐ์ ์ผ์ ํฉ๋๋ค. ๋งค์ฐ ํํํด์ ํ๋์ ์ ์์์ ์ ์ ์์ต๋๋ค.
- ์ํ ์ ํธ: ์๊ณํ์ ์ ๋ ์๊ณ๋ ๋นํ์ฑ์ด์ง๋ง, ๋์คํฌ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด(ํนํ ๋ฐ์ดํฐ·๋ก๊ทธ ์์ญ) ์ฐ๊ธฐ ์์ฒด๊ฐ ๋ฉ์ถฐ ์ฅ์ ๋ก ์ง๊ฒฐ๋ฉ๋๋ค. ๊ทธ๋์ ๊พธ์คํ ์ฐ์ํฅํ๋ ์ถ์ธ๋ฅผ ๋ด ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋ก๊ทธ·์์นด์ด๋ธ Redo ๋ก๊ทธ๊ฐ ์ ๋ฆฌ๋์ง ์๊ณ ์์, ๋๋ ์ ์ฌ๋ก ๋ฐ์ดํฐ ํ์ผ์ด ์ปค์ง, temp ์์ญ์ ํฌ๊ฒ ์ฐ๋ ์ ๋ ฌ ์์ .
- ํจ๊ป ํ์ธํ ์งํ: Free Storage Space(์ฌ์ ์ฉ๋)์ ์ง์ผ๋ก ๋ด ๋๋ค — ๋์คํฌ ์ฌ์ฉ๋ฅ ์ด ์ค๋ฅด๋ฉด ์ฌ์ ์ฉ๋์ ์ค์ด๋ญ๋๋ค. Redo Entries·Undo Change Vector Size๊ฐ ํจ๊ป ํฌ๋ฉด → ๋ณ๊ฒฝ๋์ด ๋ง์ ๋ก๊ทธ·undo๊ฐ ๋์คํฌ๋ฅผ ๋จน๋ ์ค์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋์คํฌ๋ ํ ๋ฒ ์ฐจ๋ฉด ๋ณต๊ตฌ๊ฐ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ๋๋ ์ ์ฌ·์ญ์ ๋ฐฐ์น๋ ํ ๋ฒ์ ๋ชฐ์ ํ์ง ๋ง๊ณ ๋๋ ์ ์ฒ๋ฆฌํ๊ณ , ํฐ ์ ๋ ฌ์ ์ ๋ฐํ๋ ์ฟผ๋ฆฌ(์ธ๋ฑ์ค ์๋ ORDER BY)๋ temp ์์ญ์ ํฌ๊ฒ ์ฐ๋ฏ๋ก ์ธ๋ฑ์ค๋ก ์ ๋ ฌ์ ๋์ ํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
2. ์ธ์ · ์ฐ๊ฒฐ
์ฒด๊ฐ์ ๊ฐ์ฅ ์์ฃผ ๋ณด๋ ์์ญ์ ๋๋ค. ํต์ฌ์ "์ฐ๊ฒฐ" ๊ณผ "ํ์ฑ" ์ ๊ตฌ๋ถํ๋ ๊ฒ์ ๋๋ค. ์นดํ๋ก ์น๋ฉด ๋งค์ฅ ์ ์๋ ์ ์ฒด๊ฐ ์ฐ๊ฒฐ(Total Session)์ด๊ณ , ๊ทธ์ค ์ง๊ธ ๊ณ์ฐ๋์์ ์ฃผ๋ฌธ ์ค์ธ ์๋์ด ํ์ฑ(Active Session)์ ๋๋ค. ๋งค์ฅ์ ์๋์ด ๋ง์๋ ๊ณ์ฐ๋ ์์ ๋ณดํต ํ๋ ๋ช ์ธ ๊ฒ์ด ์ ์์ ๋๋ค.
์ด ์์ญ์ ์ฉ์ด ๋ช ๊ฐ๋ฅผ ๋จผ์ ํ์ด ๋๊ฒ ์ต๋๋ค.
- ์ธ์ (Session): ์ฌ์ฉ์๊ฐ Oracle์ ์ ์ํด ์์ ํ๋ ํ๋์ ์ฐ๊ฒฐ ๋จ์์ ๋๋ค. ์ฝ๊ฒ ๋งํด "์ง๊ธ ๋ถ์ด ์๋ DB ์ฐ๊ฒฐ ํ ๊ฐ" ์ ๋๋ค. ์ธ์ ์ด 3,000๊ฐ๋ฉด ๊ทธ๋งํผ์ด ์ ์ํด ์๋ ๊ฒ์ด๊ณ , ๊ทธ์ค ์ค์ ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฌ๋ ์ธ์ ๋ง "ํ์ฑ(ACTIVE)" ์ ๋๋ค.
- ์ปค๋ฅ์ ํ(Connection Pool): ์ฐ๊ฒฐ์ ๋งค๋ฒ ์๋ก ๋ง๋ค์๋ค ๋๋ ๊ฒ์ ๋น์ฉ์ด ํฝ๋๋ค. ๊ทธ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด ๋๊ณ , ํ์ํ ๋ ๋น๋ ค ์ฐ๊ณ ๋๋๋ฉด ๋ฐ๋ฉํ๋ ๋ฐฉ์์ ์๋๋ค. ๊ณต๊ตฌ๋ฅผ ์ธ ๋๋ง๋ค ์ฌ ์ค์ง ์๊ณ ๊ณต๊ตฌํจ์์ ๊บผ๋ด ์ฐ๊ณ ๋ค์ ๋ฃ์ด ๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋น๋ฆฐ ์ฐ๊ฒฐ์ ๋ฐ๋ฉํ์ง ์์ผ๋ฉด "์ธ์ ๋์" ๊ฐ ์๊น๋๋ค.
- INACTIVE ์ธ์ : ์ฐ๊ฒฐ์ ๋์ด ์์ง๋ง ์ง๊ธ์ ์๋ฌด ์ฟผ๋ฆฌ๋ ๋๋ฆฌ์ง ์๊ณ ๋ค์ ์ผ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ์ ๋๋ค. ์ปค๋ฅ์ ํ์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋ ์ธ์ ๋ค์ ๋๋ถ๋ถ ์ด INACTIVE ์ํ๋ก ๋๊ธฐํฉ๋๋ค. ๊ทธ๋์ ์ธ์ ์๊ฐ ์์ฒ ๊ฐ์ฌ๋ ์ค์ ๋ก ์ผํ๋ ๊ฒ์ ๋ช ๊ฐ๋ฟ์ธ ๊ฒฝ์ฐ๊ฐ ์ ์์ ๋๋ค.
Active Session (๊ฐ)
์ง๊ธ ์ค์ ๋ก ์ผํ๊ณ ์๋(ACTIVE ์ํ์ธ) ์ธ์ ์์ ๋๋ค. ๋ถํ๋ฅผ ๊ฐ์ฅ ์ ๋ํ๋ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 1.0, ๋ฒ์ 0 ~ 11. ๋ค์ ๋์ค๋ Total Session์ด ์ฝ 3,700์ธ๋ฐ ํ์ฑ์ 1 ์ํ์ ๋๋ค. ์ฆ ๋๋ถ๋ถ์ ์ธ์ ์ ๋๊ณ ์๋ค๋ ๋ป์ด๊ณ , ์ด๊ฒ์ด ์ ์์ ๋๋ค.
- ์ํ ์ ํธ: ๊ฒฝ๊ณ 50, ์ํ 100. ํ์ฑ์ด ๊ฐ์๊ธฐ ์์ญ ๊ฐ๋ก ๋ฐ๋ฉด ์ฟผ๋ฆฌ๋ค์ด ๋นจ๋ฆฌ ๋๋์ง ๋ชปํ๊ณ ์์ด๊ณ ์๋ค๋ ์ ํธ์ ๋๋ค.
- ์ฝ๋ ๋ฒ: "์ฐ๊ฒฐ(Total Session)์ ๊ทธ๋๋ก์ธ๋ฐ ํ์ฑ๋ง ๋ฐ์๋ค" ๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋๋ ค์ง ๊ฒ์ด๊ณ , "์ฐ๊ฒฐ๋ ๊ฐ์ด ๋ฐ์๋ค" ๋ฉด ํธ๋ํฝ์ด ๋ชฐ๋ฆฐ ๊ฒ์ ๋๋ค. ์ด ๊ตฌ๋ถ์ด ์์ธ ์ถ์ ์ ์ถ๋ฐ์ ์ ๋๋ค.
ํ์ฑ ์ธ์ ์ด ๊ฐ์๊ธฐ ์ค๋ฅด๋ ํํ ์์ธ์, ์ด๋ค ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ๊ฐ ๋ฐฐํฌ๋์ด ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฌ๋ ์ธ์ ๋ค์ด ๋์์ ์ค๋ ๋จธ๋ฌด๋ ๊ฒฝ์ฐ์ ๋๋ค.
-- ์ง๊ธ ACTIVE ์ธ์
์ ์ค๋ ๊ฑธ๋ฆฐ ์์๋ก (last_call_et = ํ์ฌ ์์
์ด ์์๋ ๋ค ๊ฒฝ๊ณผ ์ด)
SELECT sid, serial#, username, sql_id, event,
last_call_et AS active_sec
FROM v$session
WHERE status = 'ACTIVE' AND type = 'USER'
ORDER BY last_call_et DESC;
- ํจ๊ป ํ์ธํ ์งํ: CPU·Physical Reads๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋๋ฆฐ(ํ ์ค์บ) ์ฟผ๋ฆฌ๊ฐ ์ ๋๋๊ณ ์์ด๋ ๊ฒ์ ๋๋ค. Lock Session·enq: TX - Row Lock Contention์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋ฝ ๋๊ธฐ๋ก ํ์ฑ์ด ๋งํ ์์ธ ๊ฒ(์ฟผ๋ฆฌ ์์ฒด๋ณด๋ค ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์์ธ). Total Session์ด ๊ฐ์ด ๋ฐ๋ฉด → ํธ๋ํฝ ๊ธ์ฆ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ํ์ฑ ์ธ์ ์ ์ฟผ๋ฆฌ ํ๋ํ๋์ ์๋ต ์๋์ ์ง์ ์ข์ฐ๋ฉ๋๋ค. ๋๋ฆฐ ์ฟผ๋ฆฌ ํ ์ข ๋ฅ๊ฐ ๋ฐฐํฌ๋๋ฉด ๊ทธ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์ธ์ ๋ค์ด ๋์์ ์ค๋ ๋จธ๋ฌผ๋ฌ ํ์ฑ ์๊ฐ ํ๊บผ๋ฒ์ ์ฌ๋ผ๊ฐ๋๋ค. ์ฟผ๋ฆฌ ์๋ต ์๊ฐ์ ์งง๊ฒ ์ ์งํ๋ ๊ฒ(์ธ๋ฑ์ค·์ ์ ๊ฒฐ๊ณผ ํฌ๊ธฐ·๋ฐ์ธ๋ ๋ณ์)์ด ํ์ฑ ์๋ฅผ ๋ฎ๊ฒ ์ ์งํ๋ ๊ทผ๋ณธ ๋์ฑ ์ ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ํ์ ํ์ฑ ์ธ์ ์ด 1~2์๋๋ฐ ์ด๋ ๋ฐฐํฌ ์งํ ๊ฐ์๊ธฐ 30~40์ผ๋ก ์น์์๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. v$session์ผ๋ก ์ก์ ๋ณด๋ ๊ฐ์ sql_id๋ฅผ ๊ฐ์ง ์ธ์ ๋ค์ด ์์ญ ๊ฐ์ฉ ๋์์ ACTIVE๋ก ๋ ์๊ณ , ๊ทธ SQL์ด ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๋ ํ ์ค์บ์ด์์ต๋๋ค. ํ ์์ฒญ์ด ๋๋ ค์ง์ ๋ค๋ฐ๋ผ ๋ค์ด์จ ์์ฒญ๋ค์ด ๋๋์ง ๋ชปํ๊ณ ์์ธ ๊ฒ์ ๋๋ค. ํด๋น ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ํ์ฑ ์ธ์ ์ด ๋ค์ 1~2๋ก ๋์์ต๋๋ค.
Total Session (๊ฐ)
์ธ์ ์ ์ํ์ ์๊ด์์ด ์ง๊ธ ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ฒด ์ธ์ ์์ ๋๋ค. ์๋ฌด ์ผ๋ ์ ํ๋(INACTIVE) ์ธ์ ๋ ํฌํจํฉ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 3,713, ๋ฒ์ 3,681 ~ 3,825. ์ปค๋ฅ์ ํ์ด ํฐ ํ๊ฒฝ์ด๋ผ ์์ฒ ๊ฐ๊ฐ ์ฐ๊ฒฐ๋ ์ฑ ๊ฑฐ์ ํํํ๊ฒ ์ ์ง๋ฉ๋๋ค. ์ธ์ ์ ์์ฒด๋ณด๋ค "ํ์ ์์ค์์ ๋ฒ์ด๋ฌ๋๊ฐ"๊ฐ ํฌ์ธํธ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ธ์ ๋์(๋ฐ๋ฉ ์ ๋ ์ฐ๊ฒฐ), ํ ์ค์ ๋ณ๊ฒฝ, ํธ๋ํฝ ๊ธ์ฆ.
-- ์ํ๋ณ·์ฌ์ฉ์๋ณ ์ธ์
์ (INACTIVE๊ฐ ํ์ชฝ์ผ๋ก ์์ด๋ฉด ๋์ ๋จ์)
SELECT username, status, COUNT(*) AS cnt
FROM v$session
WHERE type = 'USER'
GROUP BY username, status
ORDER BY cnt DESC;
- ํจ๊ป ํ์ธํ ์งํ: Active Session์ ๊ทธ๋๋ก์ธ๋ฐ Total๋ง ์ฐ์ํฅํ๋ฉด → ์ผ ์ ํ๋ INACTIVE ์ธ์
์ด ์์ด๋ ๋์์
๋๋ค. (OS) Memory Free๊ฐ ๊ฐ์ด ์ค๋ฉด → ์ธ์
๋ง๋ค ์ฐ๋ PGA ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ ๋๋ ์ค์
๋๋ค. ํ๋(
sessions/processesํ๋ผ๋ฏธํฐ)์ ๊ฐ๊น์์ง๋ฉด ์ ๊ท ์ฐ๊ฒฐ์ด ๊ฑฐ๋ถ๋ฉ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ์ปค๋ฅ์ ํ ํฌ๊ธฐ๋ฅผ ๋๋ฌด ํฌ๊ฒ ์ก๊ฑฐ๋, ์์ธ ๊ฒฝ๋ก์์ ์ฐ๊ฒฐ์ ๋ฐ๋ฉํ์ง ์์ผ๋ฉด(try-with-resources๋ finally ๋๋ฝ) ์ธ์ ์ด ๊ณ์ ์์ ๋๋ค. ํ ํฌ๊ธฐ๋ DB์
sessions/processesํ๋ผ๋ฏธํฐ์ ํจ๊ป ์ค๊ณํด์ผ ํ๋ฉฐ, ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค๊ฐ ๊ฐ์ DB์ ๋ถ๋๋ค๋ฉด ํ ํฌ๊ธฐ ํฉ๊ณ๊ฐ ํ๋๋ฅผ ๋์ง ์๋๋ก ์ก์์ผ ํฉ๋๋ค.
Database Connections (๊ฐ)
ํด๋ฌ์คํฐ์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์์ ํ๊ท ์ ๋๋ค. (DPM์์๋ ๋จ์๊ฐ credits๋ก ํ๊ธฐ๋์ง๋ง ์ค์ ๋ก๋ ์ฐ๊ฒฐ ์๋ก ํด์ํฉ๋๋ค.)
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 3,655, ๋ฒ์ 3,527 ~ 3,767. Total Session(์ฝ 3,713)๊ณผ ๋น์ทํ ์์ค์์ ํํํ๊ฒ ์์ง์ ๋๋ค. ๋ ์งํ๋ฅผ ๊ฐ์ด ๋ณด๋ฉด ์ฐ๊ฒฐ ์์ ํฐ ๊ทธ๋ฆผ์ ๊ต์ฐจ ํ์ธํ ์ ์์ต๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: Total Session๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธ์ ๋์, ํ ์ค์ ๋ณ๊ฒฝ, ํธ๋ํฝ ๊ธ์ฆ.
- ํจ๊ป ํ์ธํ ์งํ: Total Session๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ ๊ฒ์ด ์ ์์ ๋๋ค. ๋์ด ์ด๊ธ๋๊ฑฐ๋ ํ์ชฝ๋ง ํ๋ฉด ์ธก์ ๊ฒฝ๋ก ์ฐจ์ด๋ฅผ ์์ฌํ๊ณ , ๋ ๋ค ์ฐ์ํฅํ๋ฉด ์ฐ๊ฒฐ์ด ์ค์ ๋ก ๋์ ๋๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ์ฐ๊ฒฐ ์ ๊ณ์ด ์งํ๋ ๊ฒฐ๊ตญ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฐ๊ฒฐ์ ๋น๋ฆฌ๊ณ ์ ๋ ๋ฐ๋ฉํ๋์ง์ ๋ฌ๋ ค ์์ต๋๋ค. ์ฐ๊ฒฐ์ ๋น๋ฆฌ๋ฉด ๋ฐ๋์ ๋ฐ๋ฉ๋๋ ๊ตฌ์กฐ๋ก ์ฐ๊ณ , ํ ํฌ๊ธฐ๋ฅผ DB ํ๋์ ๋ง์ถฐ ์ค๊ณํด์ผ ํฉ๋๋ค.
Lock Session (๊ฐ)
์ง๊ธ Row ๋ฝ์ ์ป์ผ๋ ค๊ณ ๋๊ธฐ ์ค์ธ ์ธ์ ์์ ๋๋ค. ๋ฝ ๊ฒฝํฉ์ ์ง์ ๋ณด์ฌ ์ฃผ๋ ์งํ์ ๋๋ค. (๋ฝ ์์ฒด๋ ์๋ 5๋ฒ ๋ฝ ์น์ ์์ ์์ธํ ๋ค๋ฃน๋๋ค.)
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.01, ๋ฒ์ 0 ~ 5. 0์ด ์ ์์ด๊ณ , 0์ด ์๋๋ฉด ์ง๊ธ ๋๊ตฐ๊ฐ ๋ค๋ฅธ ํธ๋์ญ์ ๋๋ฌธ์ ๋งํ ์๋ ๊ฒ์ ๋๋ค.
- ์ํ ์ ํธ: ๊ฒฝ๊ณ 2, ์ํ 3. ์์ ๊ฐ์ด๋ผ๋ ๋ฐ๋ณต๋๋ฉด ํน์ ์ฟผ๋ฆฌ·ํธ๋์ญ์ ์ด ์์ฃผ ์ถฉ๋ํ๊ณ ์๋ค๋ ๋ป์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ํ ํธ๋์ญ์ ์ด ํ์ ์ฅ ์ฑ ์ปค๋ฐ์ ๋ฏธ๋ฃธ, ๊ฐ์ ํ์ ๋ํ ๋์ ์์ ๊ฒฝํฉ.
-- ๋๊ฐ ๋๊ตฌ๋ฅผ ๋ง๊ณ ์๋์ง (blocking ์ธ์
์ฐพ๊ธฐ)
SELECT s.sid, s.serial#, s.username,
s.blocking_session, s.event, s.sql_id
FROM v$session s
WHERE s.blocking_session IS NOT NULL;
- ํจ๊ป ํ์ธํ ์งํ: enq: TX - Row Lock Contention(๋ฝ ๋๊ธฐ ์๊ฐ)์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ค์ ๋ก ๋ฝ ๊ฒฝํฉ์ด ์ผ์ด๋๋ ์ค์ ๋๋ค. Active Session์ด ๊ฐ์ด ์์ด๋ฉด → ๋๊ธฐ๊ฐ ๋ถํ๋ก ๋ฒ์ง๋ ์ค์ ๋๋ค. ์์ธํ ๋ถ์์ 5๋ฒ ๋ฝ ์น์ ์ ์ฐธ๊ณ ํฉ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋๊ธฐ ์ธ์ ์ด ์๋ค๋ ๊ฒ์ ๋๊ตฐ๊ฐ ๋ฝ์ ์ค๋ ์ฅ๊ณ ์๋ค๋ ๋ป์ ๋๋ค. ๋ณดํต ๋ฝ์ ์ก์ ํธ๋์ญ์ ์ด ์ปค๋ฐ์ ๋ฏธ๋ฃจ๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก, ๋ณ๊ฒฝ ํ ์ฆ์ ์ปค๋ฐํ๋๋ก ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ์ขํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
3. SQL ์ฒ๋ฆฌ๋ · ํ์ฑ
์ด ์์ญ์ Oracle์ด ์ผ๋ง๋ ๋ง์ SQL์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ณผ์ ์์ ํ์ฑ(์คํ๊ณํ ๋ถ์)์ ์ผ๋ง๋ ํ๋์ง๋ฅผ ๋ด ๋๋ค. ๊ฐ๊ฒ์ ํ๋ชฉ๋ณ ํ๋งค ๊ฑด์ ๊ฐ์ ๊ฒ์ด๋ผ, ์ ๋๊ฐ๋ณด๋ค ํ์ ๋๋น ํจํด์ด ์ค์ํฉ๋๋ค.
๋จผ์ ์ฉ์ด ๋ ๊ฐ์ง๋ฅผ ์ง์ด ๋๊ฒ ์ต๋๋ค.
- ๋์ ๊ฐ ์นด์ดํฐ: User Calls·User Commits·Redo Entries ๊ฐ์ ๊ฐ ์ค ์ผ๋ถ๋ Oracle์ด ์ผ์ง ๋ค๋ก ๊ณ์ ๋ํด ๊ฐ๋ ๋์ ์ซ์์ ๋๋ค. ์๋์ฐจ ๋์ ์ฃผํ๊ฑฐ๋ฆฌ๊ณ์ฒ๋ผ ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋์ด๋ฉ๋๋ค. "์ง๊ธ 1๋ถ์ ๋ช ๋ฒ์ด์๋"๋ฅผ ์๋ ค๋ฉด ๊ทธ ๊ฐ ์์ฒด๊ฐ ์๋๋ผ ์ด์ ์ธก์ ๊ฐ๊ณผ์ ์ฐจ์ด๋ฅผ ๋ด์ผ ํฉ๋๋ค. (DPM์ 1๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ฐ ์ฐจ์ด๋ฅผ ๊ณ์ฐํด ์ ๊ณตํฉ๋๋ค.)
- ํ์ฑ: ์์์ ์ค๋ช ํ๋ฏ, SQL์ด ๋ค์ด์์ ๋ ์คํ๊ณํ์ ์ฐพ๋ ๊ณผ์ ์ ๋๋ค. ์บ์์ ์์ผ๋ฉด ๊ฐ๋ณ๊ฒ ์ฌ์ฌ์ฉ(Soft parse), ์์ผ๋ฉด ์ฒ์๋ถํฐ ๋ถ์(Hard parse)ํฉ๋๋ค. ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ ์ฐ๋ฉด Hard parse๊ฐ ํญ์ฆํฉ๋๋ค.
User Calls (๊ฑด)
Oracle ์ธ๋ถ(์ ํ๋ฆฌ์ผ์ด์ )๋ก๋ถํฐ ๋ค์ด์จ ์ฌ์ฉ์ ํธ์ถ ๊ฑด์์ ๋๋ค. ์ฟผ๋ฆฌ ์คํ, ํ์น, ๋ก๊ทธ์ธ ๋ฑ ์ฌ์ฉ์๊ฐ DB์ ๋ณด๋ธ ์์ฒญ์ ์ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 117,778, ๋ฒ์ 25,761 ~ 235,982. ํธ๋ํฝ ์์ค์ ํ ์ซ์๋ก ๋ณด๊ณ ์ถ์ ๋ ์๋๋ค. ํ์ ๋๋น ๋ช ๋ฐฐ๋ก ๋ฐ๋ฉด ํธ์ถ๋ ์ฆ๊ฐ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ํธ๋ํฝ ๊ธ์ฆ, ํ ์์ฒญ์ด DB ํธ์ถ์ ์ฌ๋ฌ ๋ฒ ์ ๋ฐํ๋ ๋นํจ์จ(N+1 ํจํด), ๋ถํ์ํ ํด๋ง ๋ก์ง.
User Calls๋ฅผ ๋น์ ์์ ์ผ๋ก ๋๋ฆฌ๋ ํํ ์์ธ์ "ํ ๋ฒ์ ๋๋ผ ์ ์๋ ์กฐํ๋ฅผ ๋ฐ๋ณต ํธ์ถ"ํ๋ N+1 ํจํด์ ๋๋ค. ๋ชฉ๋ก์ ํ ๋ฒ ๊ฐ์ ธ์จ ๋ค ๊ฐ ํญ๋ชฉ๋ง๋ค ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ๋ฆฌ๋ ํํ์ ๋๋ค.
-- ๋์ ์: ์ฃผ๋ฌธ 100๊ฑด์ ๊ฐ์ ธ์จ ๋ค, ๊ฐ ์ฃผ๋ฌธ๋ง๋ค ํ์์ 1๋ฒ์ฉ ๋ ์กฐํ
-- (์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฃจํ๋ฅผ ๋๋ฉฐ ์๋ ์ฟผ๋ฆฌ๋ฅผ 100๋ฒ ๋ ํธ์ถ → User Calls ์ฆ๊ฐ)
SELECT * FROM orders WHERE status = 'PAID';
-- ์ดํ ๋ฃจํ ์์์: SELECT * FROM members WHERE member_id = :id; (100๋ฒ ๋ฐ๋ณต)
-- ๊ณ ์น ์: ์กฐ์ธ์ผ๋ก ํ ๋ฒ์ ๊ฐ์ ธ์ค๋ฉด ํธ์ถ ํ์๊ฐ 1๋ฒ์ผ๋ก ์ค๋ค
SELECT o.order_id, o.total_amount, m.name
FROM orders o
JOIN members m ON m.member_id = o.member_id
WHERE o.status = 'PAID';
- ํจ๊ป ํ์ธํ ์งํ: TPS·Active Session์ด ํจ๊ป ์ค๋ฅด๋ฉด → ์ค์ ๋ถํ ์ฆ๊ฐ์ ๋๋ค. User Calls๋ ๋ฐ๋๋ฐ TPS(ํธ๋์ญ์ ์)๊ฐ ํํํ๋ฉด → ํ ํธ๋์ญ์ ์ด ํธ์ถ์ ์๊ฒ ์ฌ๋ฌ ๋ฒ ๋๋ ๋ ๋ฆฌ๋ ๊ฒ(N+1)์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ํ API ํธ์ถ์ด DB ํธ์ถ์ ๋ช ๋ฒ ์ ๋ฐํ๋์ง๊ฐ ์ด ์งํ๋ฅผ ์ข์ฐํฉ๋๋ค. ๋ฐ๋ณต๋ฌธ ์์์ ๋งค ๊ฑด๋ง๋ค ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ฉด User Calls๊ฐ ํธ์ถ๋์ ๋น๋กํด ํญ์ฆํฉ๋๋ค. ์กฐ์ธ·IN ์ ๋ก ํ ๋ฒ์ ๊ฐ์ ธ์ค๊ณ , ์ ๋ณํ์ง ์๋ ๋ฐ์ดํฐ๋ ์บ์๋ฅผ ๋๋ฉด ์ค์ด๋ญ๋๋ค.
TPS (๊ฑด/์ด)
์ด๋น ํธ๋์ญ์
์์
๋๋ค. ์ฐ์์ (user commits + user rollbacks) / 5๋ก, ์ปค๋ฐ·๋กค๋ฐฑ์ผ๋ก ๋๋ ํธ๋์ญ์
์ ์ด๋น ๋จ์๋ก ๋ณธ ๊ฒ์
๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 25.6, ๋ฒ์ 0.2 ~ 535.4. ํ์์ ๋ฎ๋ค๊ฐ ๋ฐฐ์น·ํธ๋ํฝ ๋ชฐ๋ฆผ ์ ์๋ฐฑ๊น์ง ํ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ ๋ฐฐ์น(์ฆ์ ๋จ๊ฑด ์ปค๋ฐ), ํธ๋ํฝ ๊ธ์ฆ.
์ฐ๊ธฐ ์ชฝ TPS๊ฐ ๋น์ ์์ ์ผ๋ก ๋์ ํํ ์์ธ์ ํ ๊ฑด์ฉ ์ปค๋ฐํ๋ ์ฝ๋์ ๋๋ค.
-- ๋์ ์: ํ ๊ฑด์ฉ 1,000๋ฒ INSERT + ๋งค ๊ฑด COMMIT (ํธ๋์ญ์
1,000๊ฐ)
-- TPS์ Log File Sync๊ฐ ํจ๊ป ์น์๋๋ค
BEGIN
FOR i IN 1..1000 LOOP
INSERT INTO logs(msg) VALUES ('row ' || i);
COMMIT; -- ๋งค ๊ฑด ์ปค๋ฐ → ํธ๋์ญ์
์·Redo flush ํญ์ฆ
END LOOP;
END;
-- ๊ณ ์น ์: ์ฌ๋ฌ ๊ฑด์ ๋ชจ์ ํ ๋ฒ์ ์ปค๋ฐ (ํธ๋์ญ์
์๊ฐ ํฌ๊ฒ ์ค๋ค)
BEGIN
FOR i IN 1..1000 LOOP
INSERT INTO logs(msg) VALUES ('row ' || i);
END LOOP;
COMMIT; -- ํ ๋ฒ๋ง ์ปค๋ฐ
END;
- ํจ๊ป ํ์ธํ ์งํ: User Commits·Log File Sync๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ฆ์ ์ปค๋ฐ์ด Redo flush๋ฅผ ์ ๋ฐํ๋ ์ค์ ๋๋ค(์๋ 4๋ฒ Redo ์น์ ). Active Session·CPU๊ฐ ๋๋ฐ์ด๋ฉด → ์ค์ ๋ถํ ์ฆ๊ฐ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — TPS๋ ์ปค๋ฐ·๋กค๋ฐฑ ํ์์ ๋น๋กํฉ๋๋ค. ๋งค ๊ฑด๋ง๋ค ์ปค๋ฐํ๋ ์ฝ๋๋ ํธ๋์ญ์ ์๋ฅผ ์๊ฒ ๋๋ฆฌ๊ณ Log File Sync ๋ถ๋ด์ ํค์๋๋ค. ํ ๋ฌถ์ ๋จ์๋ก ์ปค๋ฐํ๋ฉด TPS์ Redo flush ๋ถ๋ด์ด ํจ๊ป ์ค์ด๋ญ๋๋ค.
User Commits (๊ฑด) / User Rollbacks (๊ฑด)
์ฌ์ฉ์๊ฐ ํธ๋์ญ์ ์ ๋ํด Commit / Rollback์ ์ํํ ํ์์ ๋๋ค.
- ๊ด์ธก๊ฐ: User Commits ํ๊ท ์ฝ 128 / 1 ~ 2,677, User Rollbacks ํ๊ท ์ฝ 0.6 / 0 ~ 22. ์ปค๋ฐ์ด ์๋์ ์ผ๋ก ๋ง๊ณ ๋กค๋ฐฑ์ ๊ฑฐ์ ์์ต๋๋ค. ์ ์์ ์ธ ๋ชจ์ต์ ๋๋ค.
- ์ฝ๋ ๋ฒ: Rollback์ด ํ์๋ณด๋ค ๋๋ฉด ํธ๋์ญ์ ์ด ์์ฃผ ์คํจํด ๋๋๋ ค์ง๊ณ ์๋ค๋ ๋ป์ ๋๋ค. ๋ฝ ๊ฒฝํฉ·๊ต์ฐฉ(deadlock)·์ ์ฝ์กฐ๊ฑด ์๋ฐ·์ ํ๋ฆฌ์ผ์ด์ ์์ธ ๋ฑ์ ์์ฌํฉ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: Commit ๊ธ์ฆ → ๋๋ ๋ฐฐ์น·์ฆ์ ๋จ๊ฑด ์ปค๋ฐ. Rollback ๊ธ์ฆ → ํธ๋์ญ์ ์คํจ ์ฆ๊ฐ(์๋ฌ·๊ต์ฐฉ).
-- ์ปค๋ฐ/๋กค๋ฐฑ ๋์ ์นด์ดํฐ ํ์ธ
SELECT name, value
FROM v$sysstat
WHERE name IN ('user commits', 'user rollbacks');
- ํจ๊ป ํ์ธํ ์งํ: User Commits·TPS·Log File Sync๊ฐ ํจ๊ป ์ค๋ฅด๋ฉด → ์ ์์ ์ธ ์ฐ๊ธฐ ๋ถํ์ ๋๋ค. User Rollbacks๊ฐ enq: TX - Row Lock Contention·Lock Session๊ณผ ํจ๊ป ์ค๋ฅด๋ฉด → ๊ต์ฐฉ·๋ฝ ๊ฒฝํฉ์ผ๋ก ํธ๋์ญ์ ์ด ๋๋๋ ค์ง๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋กค๋ฐฑ์ด ์ฆ๋ค๋ ๊ฒ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์คํจ๋ฅผ ์์ฃผ ๋ง๋๋ค๋ ๋ป์ ๋๋ค. ๊ต์ฐฉ(deadlock)์ผ๋ก ์ธํ ๋กค๋ฐฑ์ด๋ผ๋ฉด ํธ๋์ญ์ ์์์ ์ฌ๋ฌ ํ ์ด๋ธ·ํ์ ๊ฑด๋๋ฆฌ๋ ์์๋ฅผ ์ฝ๋ ์ ๋ฐ์์ ์ผ์ ํ๊ฒ ๋ง์ถฐ ๊ต์ฐฉ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค. ์ ์ฝ์กฐ๊ฑด ์๋ฐ์ด ์ฆ๋ค๋ฉด ์ฌ์ ๊ฒ์ฆ์ ๊ฐํํฉ๋๋ค.
Parse Count (Hard) (๊ฑด)
์ค๋ผํด์ด ๋ฌธ์ฅ์ ์ฒ์๋ถํฐ ์ต์ ํํ ํ์, ์ฆ Hard parse๊ฐ ์ํ๋ ํ์์ ๋๋ค. ์์์ ์ค๋ช ํ๋ฏ Hard parse๋ ๋ฌด๊ฑฐ์ด ์์ ์ด๋ผ, ์ด ๊ฐ์ด ํฌ๋ฉด CPU์ Library Cache์ ๋ถ๋ด์ ์ค๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.07, ๋ฒ์ 0 ~ 360. ํ์์ ๊ฑฐ์ 0์ธ๋ฐ(์คํ๊ณํ์ด ์ ์ฌ์ฌ์ฉ๋๊ณ ์๋ค๋ ๋ป), ์ด๋ ์๊ฐ 360๊น์ง ํ ์ ์ด ์์ต๋๋ค. ์ด ์๊ฐ์ด ๋ฐ๋ก ์ํ ์ ํธ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฐ์ง ์๊ณ ๋งค๋ฒ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ์ SQL. Oracle์ ์ด๋ฐ SQL์ ๋งค๋ฒ ๋ค๋ฅธ ๋ฌธ์ฅ์ผ๋ก ๋ณด๊ณ ์คํ๊ณํ์ ์๋ก ์ธ์๋๋ค.
์ด๊ฒ์ด Oracle ์ฑ๋ฅ ๋ฌธ์ ์ ๋จ๊ณจ ์์ธ์ด๋ผ, ์ฝ๋๋ก ์์ธํ ๋ณด๊ฒ ์ต๋๋ค.
-- ๋์ ์: ๊ฐ์ ๋ฌธ์์ด๋ก ์ง์ ๋ฐ๋๋ค → ํ์ ID๋ง๋ค SQL ํ
์คํธ๊ฐ ๋ฌ๋ผ
-- Oracle์ด ๋งค๋ฒ ์ ๋ฌธ์ฅ์ผ๋ก ๋ณด๊ณ Hard parse๋ฅผ ํ๋ค (์บ์ ์ฌ์ฌ์ฉ ๋ถ๊ฐ)
SELECT * FROM members WHERE member_id = 1001;
SELECT * FROM members WHERE member_id = 1002;
SELECT * FROM members WHERE member_id = 1003;
-- ... ๊ฐ๋ง ๋ค๋ฅธ ๊ฐ์ ๋ชจ์ ์ฟผ๋ฆฌ๊ฐ ์์ฒ ๊ฐ ์๊ธฐ๋ฉฐ Hard parse ํญ์ฆ
-- ๊ณ ์น ์: ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ด๋ค → SQL ํ
์คํธ๊ฐ ํญ์ ๋์ผ
-- ์ฒซ ์คํ ๋๋ง ๋ถ์ํ๊ณ , ์ดํ์ Library Cache์ ์คํ๊ณํ์ ์ฌ์ฌ์ฉ(Soft parse)
SELECT * FROM members WHERE member_id = :member_id;
-- ์ ํ๋ฆฌ์ผ์ด์
์์ :member_id ์๋ฆฌ์ ๊ฐ๋ง ๋ฐ๊ฟ ๋๊ธด๋ค
Java/JDBC์์๋ Statement์ ๊ฐ์ ๋ฌธ์์ด๋ก ์ด์ด ๋ถ์ด์ง ๋ง๊ณ PreparedStatement์ ?(๋ฐ์ธ๋)๋ฅผ ์ฐ๋ฉด ๊ฐ์ ํจ๊ณผ์
๋๋ค. ์ด๊ฒ์ Hard parse๋ฅผ ๋ง์ ๋ฟ ์๋๋ผ SQL ์ธ์ ์
๋ ๋ฐฉ์งํฉ๋๋ค.
-- Hard parse๋ฅผ ๋ง์ด ์ ๋ฐํ๋ SQL ํ๋ณด ์ฐพ๊ธฐ (์คํ ๋๋น ํ์ฑ์ด ์ฆ์ ๊ฒ)
SELECT sql_id, parse_calls, executions, sql_text
FROM v$sqlarea
WHERE parse_calls > 0
ORDER BY parse_calls DESC
FETCH FIRST 20 ROWS ONLY;
- ํจ๊ป ํ์ธํ ์งํ: CPU๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ํ์ฑ์ด CPU๋ฅผ ๋จน๋ ์ค์ ๋๋ค. Library Cache Lock์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ฆ์ Hard parse๋ก Library Cache ๊ฒฝํฉ์ด ์๊ธด ๊ฒ์ ๋๋ค(์๋). v$sqlarea์์ ๊ฐ๋ง ๋ค๋ฅธ ๋น์ทํ SQL์ด ์์ฒ ๊ฐ ๋ณด์ด๋ฉด → ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ์ด ๊ฑฐ์ ํ์คํฉ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Hard parse ํญ์ฆ์ ๊ฑฐ์ ํญ์ ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ ์ฐ๋ ์ฝ๋์์ ๋์ต๋๋ค. ORM์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์ฐ์ง๋ง, ์ง์ SQL์ ๋ฌธ์์ด๋ก ์กฐ๋ฆฝํ๋ ์ฝ๋๋ ๋์ ์ฟผ๋ฆฌ์์ ๊ฐ์ ๊ทธ๋๋ก ๋ถ์ด๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์กฐํ ์กฐ๊ฑด ๊ฐ์ ํญ์ ๋ฐ์ธ๋ ๋ณ์๋ก ๋๊ธฐ๋ ๊ฒ์ด ์์น์ ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ์๋ก ์ถ๊ฐ๋ ํต๊ณ ํ๋ฉด์ด ๋ฐฐํฌ๋ ๋ค CPU๊ฐ ํ์๋ณด๋ค ๋๊ฒ ๊น๋ฆฌ๊ธฐ ์์ํ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. v$sqlarea๋ฅผ ๋ณด๋
WHERE region = '์์ธ',WHERE region = '๋ถ์ฐ'์ฒ๋ผ ๊ฐ๋ง ๋ค๋ฅธ ๊ฑฐ์ ๋๊ฐ์ SQL์ด ์์ฒ ์ข ๋ฅ ์กํ ์๊ณ , ๊ฐ๊ฐ ํ๋ ๋ฒ์ฉ๋ง ์คํ๋์ต๋๋ค. ๋์ ์ฟผ๋ฆฌ์์ ์ง์ญ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ์ ๊ฒ์ด ์์ธ์ด์์ต๋๋ค. ๋ฐ์ธ๋ ๋ณ์๋ก ๋ฐ๊พธ์ SQL์ด ํ ์ข ๋ฅ๋ก ํฉ์ณ์ง๋ฉฐ Hard parse์ CPU๊ฐ ํจ๊ป ๋ด๋ ค๊ฐ๋๋ค.
Library Cache Lock (์ด)
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฌํ๋ ค๋ ์ธ์ ์ด LCO(Library Cache Object) ํธ๋ค์ ๋ํ ๋ฝ์ ์ป๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋๊ธฐ ์๊ฐ์ ๋๋ค. ์ฝ๊ฒ ๋งํด, ์ฌ๋ฌ ์ธ์ ์ด Library Cache์ ๊ฐ์ ์์์ ๋๊ณ ๊ฒฝํฉํ๋ฉฐ ๊ธฐ๋ค๋ฆฐ ์๊ฐ์ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.00006์ด, ๋ฒ์ 0 ~ 0.01์ด. ์ฌ์ค์ 0์ ๊ฐ๊น๊ฒ ์ ์ง๋๋ ๊ฒ์ด ์ ์์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ฆ์ Hard parse๋ก Library Cache๊ฐ ์์ฃผ ๊ฐฑ์ ๋จ, DDL(ํ ์ด๋ธ·์ธ๋ฑ์ค ๋ณ๊ฒฝ)์ด ์ด์ ์ค ์์ฃผ ์คํ๋์ด ๊ด๋ จ SQL์ ์คํ๊ณํ์ด ๋ฌดํจํ๋จ.
-- ์ง๊ธ Library Cache ๊ด๋ จ ์ด๋ฒคํธ๋ฅผ ๋๊ธฐ ์ค์ธ ์ธ์
์ด ์๋์ง
SELECT sid, event, seconds_in_wait, sql_id
FROM v$session
WHERE event LIKE 'library cache%';
- ํจ๊ป ํ์ธํ ์งํ: Parse Count (Hard)๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ์ผ๋ก ์ธํ ์ฆ์ ํ์ฑ์ด Library Cache ๊ฒฝํฉ์ ์ ๋ฐํ ๊ฒ์ ๋๋ค. ์ด์ ์ค DDL์ด ๋๋ฉด → ๊ด๋ จ SQL์ด ๋ฌดํจํ๋๋ฉฐ ์ผ์์ ์ผ๋ก ์ค๋ฅผ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Library Cache Lock์ ์ฆ์ Hard parse๋ ์ด์ ์ค DDL๊ณผ ํจ๊ป ์ค๋ฆ ๋๋ค. ๋ฐ์ธ๋ ๋ณ์๋ฅผ ์จ์ ํ์ฑ์ ์ค์ด๊ณ , ํ ์ด๋ธ·์ธ๋ฑ์ค ๋ณ๊ฒฝ ๊ฐ์ DDL์ ํธ๋ํฝ์ด ์ ์ ์๊ฐ๋๋ก ๋ถ๋ฆฌํ๋ฉด ๊ฒฝํฉ์ ์ค์ผ ์ ์์ต๋๋ค.
4. Redo · Undo
์ด ์์ญ์ด Oracle ์งํ ์ค ๊ฐ์ฅ Oracle๋ค์ด ๋ถ๋ถ์ ๋๋ค. ์์์ ํ์ด ๋ Redo(๋ณ๊ฒฝ ๋ก๊ทธ)์ Undo(๋๋๋ฆฌ๊ธฐ·์ฝ๊ธฐ ์ผ๊ด์ฑ) ๊ฐ๋ ์ด ์ฌ๊ธฐ์ ์งํ๋ก ๋ํ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค Oracle์ "๋ฐ๊พผ ๋ด์ฉ"์ Redo์ ์ ๊ณ , "๋ฐ๊พธ๊ธฐ ์ ๊ฐ"์ Undo์ ์ ์ต๋๋ค. ๊ทธ๋์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT/UPDATE/DELETE)์ด ๋ง์์๋ก ์ด ์์ญ ์งํ๊ฐ ํจ๊ป ์ค๋ฆ ๋๋ค. ๋๋ ์ ์ฌ ๋ฐฐ์น๋ฅผ ์ก์๋ด๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค.
์ฉ์ด๋ฅผ ๋ค์ ํ ๋ฒ ์งง๊ฒ ์ ๋ฆฌํ๋ฉด:
- Redo: ๋ณ๊ฒฝ ๋ด์ฉ์ ๋จผ์ ์ ์ด ๋๋ ์ฅ๋ถ. ์ฅ์ ์ ์ด ์ฅ๋ถ๋ก ๋ณต๊ตฌํฉ๋๋ค. LGWR๋ผ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๊ฐ Redo ๋ก๊ทธ ๋ฒํผ์ ๋ด์ฉ์ ๋์คํฌ์ Redo ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํฉ๋๋ค.
- Undo: ๋ณ๊ฒฝ ์ ๊ฐ์ ๋ณด๊ดํ๋ ๊ณณ. ๋กค๋ฐฑ๊ณผ ์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์๋๋ค.
- ์ปค๋ฐ๊ณผ Log File Sync: ์ฌ์ฉ์๊ฐ
COMMIT์ ํ๋ฉด, ๊ทธ ์์ ๊น์ง์ Redo๊ฐ ๋์คํฌ์ ์์ ํ๊ฒ ๊ธฐ๋ก๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด "Redo๊ฐ ๋์คํฌ์ ์จ์ง๊ธธ ๊ธฐ๋ค๋ฆฌ๋" ์๊ฐ์ด Log File Sync์ ๋๋ค. ๊ทธ๋์ ์ปค๋ฐ์ ์์ฃผ ํ ์๋ก Log File Sync๊ฐ ๋์ด๋ฉ๋๋ค.
Redo Entries (๊ฑด)
๋ฐ์ํ Redo Entry ๊ฐ์์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค Redo๊ฐ ์๊ธฐ๋ฏ๋ก, ๋๋์ DML(INSERT/UPDATE/DELETE)์ด ๋ฐ์ํ ๋ ๊ธ๊ฒฉํ ์ฆ๊ฐํฉ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 2,772์ธ๋ฐ ๋ฒ์๊ฐ 25 ~ 1,407,527๋ก ๊ทน๋จ์ ์ผ๋ก ๋์ต๋๋ค. ํ์์ ์์ฒ ๊ฑด์ด๋ค๊ฐ ์ด๋ค ์๊ฐ 140๋ง ๊ฑด์ ๋๊ฒผ๋ค๋ ๋ป์ ๋๋ค. ๋ฐ๋ก ์ด "์๊ฐ ํญ์ฆ"์ด ๋๋ ์ ์ฌ ๋ฐฐ์น์ ์ง๋ฌธ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ INSERT/UPDATE/DELETE ๋ฐฐ์น, ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ , ํ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ๊ฑฐ๋ํ ๋ณ๊ฒฝ.
๋๋ ๋ณ๊ฒฝ์ ํ ๋ฒ์ ๋ชฐ์ ํ๋ฉด Redo๊ฐ ํ๊บผ๋ฒ์ ํญ์ฆํฉ๋๋ค. ๋๋ ์ ์ฒ๋ฆฌํ๋ฉด ๋ถ์ฐ๋ฉ๋๋ค.
-- ๋์ ์: ์๋ฐฑ๋ง ํ์ ํ ํธ๋์ญ์
์ผ๋ก ํต์งธ ๊ฐฑ์ → Redo๊ฐ ํ๊บผ๋ฒ์ ํญ์ฆ
UPDATE orders SET status = 'ARCHIVED'
WHERE created_at < DATE '2025-01-01';
COMMIT;
-- ๊ณ ์น ์: ๋ช ๋ง ๊ฑด์ฉ ๋๋ ์ ์ฒ๋ฆฌ (Redo ๋ฐ์์ ๋ถ์ฐ, undo ๋์ ๋ ์ํ)
BEGIN
LOOP
UPDATE orders SET status = 'ARCHIVED'
WHERE created_at < DATE '2025-01-01'
AND status <> 'ARCHIVED'
AND ROWNUM <= 50000; -- ํ ๋ฒ์ 5๋ง ๊ฑด์ฉ
EXIT WHEN SQL%ROWCOUNT = 0;
COMMIT; -- ๋ฌถ์๋ง๋ค ์ปค๋ฐ
END LOOP;
END;
-- Redo ๋ฐ์๋ ๋์ ์นด์ดํฐ ํ์ธ
SELECT name, value
FROM v$sysstat
WHERE name IN ('redo entries', 'redo size');
- ํจ๊ป ํ์ธํ ์งํ: Undo Change Vector Size·DBWR Undo Block Writes๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋๋ DML์ด ๋ง์ต๋๋ค(๋ณ๊ฒฝํ๋ฉด Redo์ Undo๊ฐ ํจ๊ป ๋ฐ์). Log File Sync๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ฆ์ ์ปค๋ฐ๊น์ง ๊ฒน์น ๊ฒ์ ๋๋ค. Write IOPS·Write Throughput์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ๊ทธ ๋ณ๊ฒฝ์ด ๋์คํฌ ์ฐ๊ธฐ๋ก ๋ด๋ ค๊ฐ๋ ์ค์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋๋ ๋ณ๊ฒฝ์ ํ๋์ ํฐ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ผ๋ฉด Redo์ Undo๊ฐ ํ๊บผ๋ฒ์ ์์ฌ ๋ถํ๊ฐ ์ง์ค๋ฉ๋๋ค. ๋ฐฐ์น๋ ๋ช ๋ง ๊ฑด ๋จ์๋ก ๋๋ ์ปค๋ฐํ๋ฉด Redo ๋ฐ์์ด ๋ถ์ฐ๋๊ณ undo ๋์ ๋ ์ํ๋ฉ๋๋ค. ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ํ๊น์ง ๊ฐฑ์ ๋์์ ๋ฃ์ง ์๋๋ก(์ด๋ฏธ ์ฒ๋ฆฌ๋ ํ ์ ์ธ) ์กฐ๊ฑด์ ์ ํํ ๊ฑฐ๋ ๊ฒ๋ Redo๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Undo Change Vector Size (Bytes)
Oracle์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ(DML)ํ ๋ ์์ฑํ Undo(๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ) ์ ์ด ํฌ๊ธฐ์ ๋๋ค. ๋ณ๊ฒฝ๋์ด ๋ง์์๋ก ์ปค์ง๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 354KB์ธ๋ฐ ๋ฒ์๊ฐ 1,252 Bytes ~ ์ฝ 224MB๋ก ๋งค์ฐ ๋์ต๋๋ค. ํ์์ ์๋ค๊ฐ ๋๋ ๋ณ๊ฒฝ ์ ์๋ฐฑ MB๊น์ง ํ๋๋ค. Redo Entries์ ๊ฐ์ ์๊ฐ์ ํจ๊ป ์์ง์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ UPDATE/DELETE(ํนํ ํ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ธ ๊ฒ), ๊ธด ํธ๋์ญ์ .
- ํจ๊ป ํ์ธํ ์งํ: Redo Entries์ ๊ฑฐ์ ์ง์ผ๋ก ์์ง์ ๋๋ค(๋ณ๊ฒฝํ๋ฉด ๋ ๋ค ๋ฐ์). DBWR Undo Block Writes๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → undo ๋ธ๋ก์ด ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋ ์ค์ ๋๋ค. Data Blocks Consistent Reads๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๊ทธ undo๋ฅผ ์ฝ์ด ๊ณผ๊ฑฐ ์์ ์ ์ฌ๊ตฌ์ฑํ๋ ์ฝ๊ธฐ๊ฐ ๋์ด๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Undo๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค ์๊ธฐ๋ฏ๋ก, ํ ๋ฒ์ ๋๋ฌด ๋ง์ ํ์ ๋ฐ๊พธ๋ ํธ๋์ญ์ ์ undo๋ฅผ ํฌ๊ฒ ๋ง๋ญ๋๋ค. ๊ธด ํธ๋์ญ์ (์ค๋ ์ด์ด ๋ ์ฑ ์ปค๋ฐ ์ ํจ)์ ๊ทธ undo๋ฅผ ์ค๋ ์ก์ ๋์ด ๋ค๋ฅธ ์์ ์ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋น์ฉ๊น์ง ํค์๋๋ค. ๋๋ ๋ณ๊ฒฝ์ ๋๋ ์ ์ปค๋ฐํ๊ณ , ํธ๋์ญ์ ์ ์งง๊ฒ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Log File Sync (์ด)
์ฌ์ฉ์ ์ธ์ ์ด ์ปค๋ฐ/๋กค๋ฐฑํ ๋ค, Redo ์ ๋ณด๊ฐ LGWR์ ์ํด ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋ก๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋๊ธฐ ์๊ฐ์ ๋๋ค. ์ฝ๊ฒ ๋งํด "์ปค๋ฐ์ด ๋์คํฌ์ ์์ ํ๊ฒ ์จ์ง๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ ์๊ฐ" ์ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.31์ด, ๋ฒ์ 0 ~ 8.6์ด. ํ์์ ๋งค์ฐ ์งง๋ค๊ฐ ์ด๋ค ์๊ฐ 8์ด ๋๊ฒ ๊ธฐ๋ค๋ฆฐ ์ ์ด ์์ต๋๋ค. ์ด ์๊ฐ์ด ์ํ ์ ํธ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ฆ์ ๋จ๊ฑด ์ปค๋ฐ(์ปค๋ฐ๋ง๋ค Redo flush๋ฅผ ๊ธฐ๋ค๋ฆผ), ๋์คํฌ(๋ก๊ทธ ํ์ผ) I/O ์ฑ๋ฅ ์ ํ, ํ๊บผ๋ฒ์ ๋ชฐ๋ฆฐ ์ปค๋ฐ.
๊ฐ์ฅ ํํ ์์ธ์ ๋ฐ๋ณต๋ฌธ ์์์ ๋งค ๊ฑด ์ปค๋ฐํ๋ ์ฝ๋์ ๋๋ค.
-- ๋์ ์: ๋งค ๊ฑด ์ปค๋ฐ → ์ปค๋ฐ๋ง๋ค Redo๊ฐ ๋์คํฌ์ ์จ์ง๊ธธ ๊ธฐ๋ค๋ฆฐ๋ค
-- (Log File Sync ๋๊ธฐ๊ฐ ๊ฑด์๋งํผ ์์ธ๋ค)
BEGIN
FOR r IN (SELECT id FROM staging) LOOP
UPDATE target SET flag = 'Y' WHERE id = r.id;
COMMIT; -- ๋งค ๊ฑด ์ปค๋ฐ → Log File Sync ํญ์ฆ
END LOOP;
END;
-- ๊ณ ์น ์: ๋ฌถ์ ๋จ์๋ก ์ปค๋ฐ (Redo flush ๋๊ธฐ ํ์๊ฐ ํฌ๊ฒ ์ค๋ค)
DECLARE
n NUMBER := 0;
BEGIN
FOR r IN (SELECT id FROM staging) LOOP
UPDATE target SET flag = 'Y' WHERE id = r.id;
n := n + 1;
IF MOD(n, 5000) = 0 THEN COMMIT; END IF; -- 5์ฒ ๊ฑด๋ง๋ค ์ปค๋ฐ
END LOOP;
COMMIT;
END;
-- Log File Sync ๋๊ธฐ ํํฉ ํ์ธ
SELECT event, total_waits, time_waited, average_wait
FROM v$system_event
WHERE event = 'log file sync';
- ํจ๊ป ํ์ธํ ์งํ: User Commits·TPS๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ฆ์ ์ปค๋ฐ์ด ์์ธ์ ๋๋ค. Write IOPS·Write Throughput์ด ๊ฐ์ด ์ค๋ฅด๋ฉฐ Log File Sync๊ฐ ๊ธธ์ด์ง๋ฉด → ๋ก๊ทธ ๋์คํฌ I/O๊ฐ ๋ณ๋ชฉ์ธ ๊ฒ์ ๋๋ค. Redo Entries๊ฐ ๊ฐ์ด ํฌ๋ฉด → ๋ณ๊ฒฝ๋ ์์ฒด๊ฐ ๋ง์ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Log File Sync๋ ์ปค๋ฐ ํ์์ ํฌ๊ฒ ์ข์ฐ๋ฉ๋๋ค. ๋ฐ๋ณต๋ฌธ ์์์ ๋งค ๊ฑด ์ปค๋ฐํ๋ฉด ์ปค๋ฐ๋ง๋ค Redo flush๋ฅผ ๊ธฐ๋ค๋ ค ๋์ ๋๊ธฐ๊ฐ ์ปค์ง๋๋ค. ํ ๋ฌถ์ ๋จ์๋ก ๋ชจ์์ ์ปค๋ฐํ๋ฉด ๋๊ธฐ ํ์๊ฐ ์ค์ด๋ญ๋๋ค. ๋จ, ๋๋ฌด ํฌ๊ฒ ๋ฌถ์ผ๋ฉด undo๊ฐ ์ปค์ง๋ฏ๋ก ์ ๋นํ ๋จ์(์์ฒ~์๋ง ๊ฑด)๋ก ๋๋๋ ๊ฒ์ด ๊ท ํ์ ์ ๋๋ค.
Data Blocks Consistent Reads - Undo Records Applied (๊ฑด)
์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด Undo ๋ ์ฝ๋๋ฅผ ์ ์ฉํด ๊ณผ๊ฑฐ ์์ ์ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ฌ๊ตฌ์ฑํ ํ์์ ๋๋ค. ๋๊ตฐ๊ฐ ๋ณ๊ฒฝ ์ค์ธ ๋ธ๋ก์ ๋ค๋ฅธ ์ธ์ ์ด ์ฝ์ ๋, ๋ณ๊ฒฝ ์ ๋ชจ์ต์ ๋ณด์ฌ ์ฃผ๋ ค๊ณ undo๋ฅผ ์ ์ฉํ ์์ ์ ์ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 30, ๋ฒ์ 0 ~ 24,680. ํ์์ ์๋ค๊ฐ ๋ณ๊ฒฝ์ด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ง์ด ์ฝ์ ๋ ํ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์์ฃผ ๋ฐ๋๋ ๋ฐ์ดํฐ(ํซ ๋ธ๋ก)๋ฅผ ์ฌ๋ฌ ์ธ์ ์ด ๋์์ ์ฝ๊ณ ์ฐ๋ ๊ฒฝํฉ, ๊ธด ์ฟผ๋ฆฌ๊ฐ ๊ทธ ์ฌ์ด ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ฉฐ ๊ณผ๊ฑฐ ๋ฒ์ ์ ๋ง์ด ์ฌ๊ตฌ์ฑ.
- ํจ๊ป ํ์ธํ ์งํ: Undo Change Vector Size๊ฐ ๊ฐ์ด ํฌ๋ฉด → ๋ณ๊ฒฝ์ด ๋ง์ undo๊ฐ ๋ง์ด ์์ด๊ณ ๊ทธ๊ฒ์ ์ฝ๋ ์ผ๋ ๋์ด๋ ๊ฒ์ ๋๋ค. Session Logical Reads๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ ์ค ์ผ๊ด์ฑ ์ฌ๊ตฌ์ฑ ๋น์ค์ด ์ปค์ง ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ชฝ์์ ์์ฃผ ๋ฐ๊พธ๊ณ ๋ค๋ฅธ ์ชฝ์์ ๊ธธ๊ฒ ์ฝ์ผ๋ฉด, ์ฝ๋ ์ชฝ์ด ๋ณ๊ฒฝ ์ ๋ฒ์ ์ ์ฌ๊ตฌ์ฑํ๋๋ผ ์ผ์ด ๋์ด๋ฉ๋๋ค. ํซ ๋ฐ์ดํฐ์ ๋ํ ๊ธด ๋ถ์ ์ฟผ๋ฆฌ๋ ์๊ฐ๋๋ฅผ ๋ถ๋ฆฌํ๊ฑฐ๋, ์ฝ๊ธฐ ์ ์ฉ ๋ณต์ ๋ณธ์์ ๋๋ฆฌ๋ ๊ฒ์ด ๋ถ๋ด์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค.
DBWR Undo Block Writes (๊ฑด)
DBWR(Database Writer) ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ Undo ๋ฐ์ดํฐ ๋ธ๋ก์ ๋์คํฌ์ ๊ธฐ๋กํ ํ์์ ๋๋ค. undo๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋ ์์ ๋ด ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 50, ๋ฒ์ 0 ~ 20,445. ํ์์ ์๋ค๊ฐ ๋๋ ๋ณ๊ฒฝ ์ ํจ๊ป ํ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ DML๋ก undo๊ฐ ๋ง์ด ์์ฑ๋์ด ๋์คํฌ๋ก ๋ด๋ ค๊ฐ.
- ํจ๊ป ํ์ธํ ์งํ: Undo Change Vector Size·Redo Entries์ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์์ง์ ๋๋ค(๋๋ ๋ณ๊ฒฝ์ ํ ๋ฌถ์). Write IOPS๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → undo ๋ธ๋ก ์ฐ๊ธฐ๊ฐ ๋์คํฌ I/O๋ก ์กํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ์ด ์งํ๋ ๋๋ ๋ณ๊ฒฝ์ ๊ฒฐ๊ณผ๋ก ๋ฐ๋ผ ์ค๋ฅด๋ ๊ฒ์ด๋ผ, ์ง์ ์ค์ด๊ธฐ๋ณด๋ค ์์ธ์ธ ๋๋ DML์ ๋๋ ์ ์ฒ๋ฆฌํ๋ฉด ์์ฐํ ์ํ๋ฉ๋๋ค. Redo·Undo ์์ญ ์งํ๋ค์ ๋์ฒด๋ก "๋ณ๊ฒฝ๋"์ด๋ผ๋ ํ ์์ธ์์ ํจ๊ป ์์ง์ธ๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
5. ๋ฝ · ๋์์ฑ
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ฐ๊พธ๋ ค ํ ๋ ๋ฝ(Lock) ์ผ๋ก ์์๋ฅผ ์ ํฉ๋๋ค. ํ์ฅ์ค ํ ์นธ์ ํ ์ฌ๋์ฉ ์ฐ๋ ๊ฒ๊ณผ ๊ฐ์์, ํ ์ฌ๋์ด ๋๋ฌด ์ค๋ ์ฐ๋ฉด ๋ค์ ์ค์ด ๊ธธ์ด์ง๋๋ค.
์ด ์์ญ์ ๊ฐ๋ ์ ๋จผ์ ์งง๊ฒ ํ์ด ๋๊ฒ ์ต๋๋ค. (์๋ ์งํ๋ ์ด ๊ฐ๋ ๋ค์ ์ ์ ๋ก ํฉ๋๋ค.)
- ํธ๋์ญ์
(Transaction): ์ฌ๋ฌ DB ์์
์ "์ ๋ถ ์ฑ๊ณต ์๋๋ฉด ์ ๋ถ ์ทจ์" ๋ก ๋ฌถ์ ํ ๋ฌถ์์
๋๋ค. ๊ณ์ข ์ด์ฒด์์ "๋ด ๊ณ์ข์์ 1๋ง ์ ๋นผ๊ธฐ" ์ "์น๊ตฌ ๊ณ์ข์ 1๋ง ์ ๋ฃ๊ธฐ" ๋ ๋ ๋ค ๋๊ฑฐ๋ ๋ ๋ค ์ ๋์ด์ผ ํฉ๋๋ค. ๋ค ์ ๋์ผ๋ฉด
COMMIT, ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉดROLLBACKํฉ๋๋ค. - TX ๋ฝ(ํ ๋ฝ): Oracle์์ ์ด๋ค ํ์ ๊ณ ์น๊ธฐ ์์ํ๋ฉด, ์ปค๋ฐํ ๋๊น์ง ๊ทธ ํ์ ๋ฝ(TX ๋ฝ)์ ๊ฑธ์ด ๋ก๋๋ค. ๋ค๋ฅธ ์ธ์ ์ด ๊ฐ์ ํ์ ๊ณ ์น๋ ค๋ฉด ๊ทธ ๋ฝ์ด ํ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. Oracle์ ํ ์ด๋ธ ์ ์ฒด๊ฐ ์๋๋ผ ๊ณ ์น๋ ๊ทธ ํ๋ง ์ ๊ทธ๋ฏ๋ก, ๊ฐ์ ํ ์ด๋ธ์ด๋ผ๋ ๋ค๋ฅธ ํ์ ๋์์ ์์ ํ ์ ์์ต๋๋ค.
- ๊ทธ๋์ ๋ฌด์์ด ๋ฌธ์ ๋๋ฉด: ์ ๊ทผ ์ธ์ ์ด ๋นจ๋ฆฌ ์ปค๋ฐํ๋ฉด ๋ฝ์ด ๊ธ๋ฐฉ ํ๋ ค ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฌธ์ ๋ ์ ๊ฐ ๋๊ณ ์ค๋ ์ ํ์ด์ค ๋(์: ํธ๋์ญ์ ์ ์ฐ ์ฑ ์ธ๋ถ API ํธ์ถ์ ๊ธฐ๋ค๋ฆผ)์ ๋๋ค. ๊ทธ๋์ ๊ทธ ํ์ ๊ณ ์น๋ ค๋ ๋ค๋ฅธ ์์ ๋ค์ด ์ค์ค์ด ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค. ์๋ ์งํ๊ฐ ๋ฐ๋ก ์ด "๊ธฐ๋ค๋ฆผ" ์ ๋ด ๋๋ค.
enq: TX - Row Lock Contention (์ด)
Row ๋ ๋ฒจ ๋ฝ์ด ๋ฐ์ํ์ ๋, ํด๋น ํ์ ๋ํ TX ๋ฝ์ ์ป์ผ๋ ค๊ณ ๊ธฐ๋ค๋ฆฐ ๋๊ธฐ ์๊ฐ์
๋๋ค. (enq:๋ enqueue, ์ฆ ๋ฝ ๋๊ธฐ ํ๋ฅผ ๋ปํฉ๋๋ค.) ๋ค๋ฅธ ํธ๋์ญ์
์ด ์ก์ ํ ๋ฝ์ด ํ๋ฆฌ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ ์๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.0018์ด, ๋ฒ์ 0 ~ 30์ด. ํ์ 0์ ๊ฐ๊น๊ณ , ๊ฐ๋ ์๊ฐ์ ์ผ๋ก ์ต๋ 30์ด๊น์ง ๋๊ธฐ๊ฐ ๋ชฐ๋ฆฐ ์ ์ด ์์ต๋๋ค. 30์ด์ฉ ๋ฝ์ ๊ธฐ๋ค๋ฆฐ๋ค๋ ๊ฒ์ ๋๊ตฐ๊ฐ ํ์ ์ค๋ ์ฅ๊ณ ์ ๋จ๋ค๋ ๋ป์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ฅ๊ธฐ ์คํ ํธ๋์ญ์ ์ด ํ ๋ฝ์ ์ค๋ ์ฅ , ๊ฐ์ ํ์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์์ ์์ , ์ปค๋ฐ์ ๋ฆ๊ฒ ํ๋ ์ฝ๋.
๋ฝ ๋๊ธฐ๋ ๊ฑฐ์ "ํธ๋์ญ์ ์ ์ด์ด๋๊ณ ์ปค๋ฐ์ ๋ฏธ๋ฃจ๋" ์ฝ๋์์ ์๊น๋๋ค.
-- ๋์ ์: ํ์ ์์ ํ ๋ค ์ธ๋ถ ์์
(API ํธ์ถ·ํ์ผ ์ฒ๋ฆฌ ๋ฑ)์ ํ๋๋ผ ์ปค๋ฐ์ด ๋ฆ์ด์ง๋ค
-- ๊ทธ๋์ ๊ฐ์ ํ(id=1)์ ๊ฑด๋๋ฆฌ๋ ค๋ ๋ค๋ฅธ ํธ๋์ญ์
์ ์ ๋ถ ๋๊ธฐํ๋ค
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
-- ... ์ฌ๊ธฐ์ ์ธ๋ถ API ํธ์ถ ๋ฑ์ผ๋ก ์ ์ด~์์ญ ์ด ์ง์ฐ ...
COMMIT; -- ๋๋ฌด ๋ฆ๊ฒ ์ปค๋ฐ → ๊ทธ ์ฌ์ด account_id=1์ ๋
ธ๋ฆฌ๋ ์์
๋ค์ด TX ๋ฝ ๋๊ธฐ
-- ๊ณ ์น ์: DB ๋ณ๊ฒฝ ๊ตฌ๊ฐ๋ง ๋น ๋ฅด๊ฒ ๋ฌถ์ด ๊ณง๋ฐ๋ก ์ปค๋ฐํ๋ค (์ธ๋ถ ์์
์ ํธ๋์ญ์
๋ฐ์์)
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
COMMIT; -- ์ฆ์ ์ปค๋ฐ → ๋ฝ ์ ์ ์๊ฐ์ด ์งง์ ๋๊ธฐ๊ฐ ๊ฑฐ์ ์๋ค
-- ์ง๊ธ ๋ฝ ๊ฒฝํฉ์ด ์๋์ง — ๋ง์ ์ธ์
(holder)๊ณผ ๋งํ ์ธ์
(waiter) ์ฐพ๊ธฐ
SELECT w.sid AS waiter_sid, h.sid AS holder_sid,
w.sql_id AS waiter_sql, h.username AS holder_user
FROM v$session w
JOIN v$session h ON h.sid = w.blocking_session
WHERE w.blocking_session IS NOT NULL;
-- ์งํ ์ค์ธ ํธ๋์ญ์
์ ์ค๋๋ ์์ผ๋ก (์ค๋๋ ๊ฒ์ด ๋ธ๋ก์ปค์ผ ๊ฐ๋ฅ์ฑ)
SELECT t.start_time, s.sid, s.serial#, s.username, s.sql_id
FROM v$transaction t
JOIN v$session s ON s.saddr = t.ses_addr
ORDER BY t.start_time;
- ํจ๊ป ํ์ธํ ์งํ: Lock Session(๋๊ธฐ ์ค์ธ ์ธ์ ์)์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ์ง๊ธ ์ค์ ๋ก ๋งํ ์๋ ์ธ์ ์ด ์๋ค๋ ๋ป์ ๋๋ค. Active Session·CPU๊ฐ ๋๋ฐ์ด๋ฉด → ๋๊ธฐ ์ธ์ ์ด ์์ด๋ฉฐ ๋ถํ๋ก ๋ฒ์ง๋ ์ค์ ๋๋ค. User Rollbacks๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๊ต์ฐฉ์ผ๋ก ํธ๋์ญ์ ์ด ๋๋๋ ค์ง๊ณ ์์ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ํธ๋์ญ์ ๋ฒ์ ์์ ์ธ๋ถ API ํธ์ถ์ด๋ ๊ธด ๋ก์ง์ ๋ฃ์ผ๋ฉด ๊ทธ๋์ ํ ๋ฝ์ ์ฅ๊ณ ์์ด ๊ฐ์ ํ์ ๊ฑด๋๋ฆฌ๋ ๋ค๋ฅธ ์์ฒญ์ด ๋๊ธฐํฉ๋๋ค. ํธ๋์ญ์ ์ ์งง๊ฒ ๊ฐ์ ธ๊ฐ๊ณ , ์ธ๋ถ ํธ์ถ์ด๋ ๋ฌด๊ฑฐ์ด ์ฒ๋ฆฌ๋ ํธ๋์ญ์ ๋ฐ์ผ๋ก ๋นผ์ผ ํฉ๋๋ค. ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๊ฐ์ ํ์ ์์ฃผ ๊ฐฑ์ ํ๋ ์ค๊ณ ์์ฒด๋ ๊ฒฝํฉ์ ๋๋ฆฌ๋ ์์ธ์ ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ํ ํธ๋์ญ์ ์ด ์ด๋ค ํ์ ์์ ํ ๋ค ์ปค๋ฐํ์ง ์๊ณ ์ธ๋ถ ๊ฒฐ์ API ์๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์๋ต์ด ๋ฆ์ด์ง๋ ๋์ ๊ฐ์ ํ(์: ๊ฐ์ ์ํ ์ฌ๊ณ )์ ์์ ํ๋ ค๋ ์์ฒญ๋ค์ด ์ค์ค์ด ๋๊ธฐํ๋ฉด์ enq: TX - Row Lock Contention ๋๊ธฐ ์๊ฐ๊ณผ Lock Session์ด ํจ๊ป ์ค๋ฅด๊ณ , ๋๊ธฐํ๋ ๋งํผ ํ์ฑ ์ธ์ ์ด ์์ฌ CPU์ ์๋ต์๊ฐ๊น์ง ๋๋ฐ ์ ํ๋ฉ๋๋ค. ์ v$transaction์ผ๋ก ๊ฐ์ฅ ์ค๋๋ ํธ๋์ญ์ ์ ์ฐพ์ ์ ๋ฆฌํ๋ฉด ํ๊บผ๋ฒ์ ํ๋ฆฝ๋๋ค. ๊ทผ๋ณธ ํด๊ฒฐ์ ์ธ๋ถ ํธ์ถ์ ํธ๋์ญ์ ๋ฐ์ผ๋ก ๋นผ๊ณ ์ปค๋ฐ์ ๋ฏธ๋ฃจ์ง ์๋ ๊ฒ์ ๋๋ค.
6. I/O · ์ฝ๊ธฐ
๋ฉ๋ชจ๋ฆฌ์์ ํด๊ฒฐํ์ง ๋ชปํ ์์ ์ ๊ฒฐ๊ตญ ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋๋ค. Oracle์์ ์ฝ๊ธฐ๋ ๋ ์ข ๋ฅ๋ก ๋๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ(๋ฒํผ ์บ์)์์ ์ฝ๋ ๋ ผ๋ฆฌ ์ฝ๊ธฐ(Session Logical Reads) ์, ์บ์์ ์์ด ๋์คํฌ๊น์ง ๋ด๋ ค๊ฐ ์ฝ๋ ๋ฌผ๋ฆฌ ์ฝ๊ธฐ(Physical Reads) ์ ๋๋ค. ์ฑ ์(๋ฉ๋ชจ๋ฆฌ)์์ ๋ฐ๋ก ์ฐพ์ผ๋ฉด ๋น ๋ฅด๊ณ , ์๊ฐ(๋์คํฌ)๊น์ง ๊ฐ์ผ ํ๋ฉด ๋๋ฆฝ๋๋ค.
์ด ์์ญ์๋ ๋น์ทํด ๋ณด์ด์ง๋ง ๋ค๋ฅธ ๊ฐ๋ ์ด ๋์ค๋ฏ๋ก ๋จผ์ ๊ตฌ๋ถํด ๋๊ฒ ์ต๋๋ค.
- ๋ธ๋ก(block): Oracle์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ต์ ๋จ์์ ๋๋ค. ํ ํ๋๊ฐ ์๋๋ผ ์ฌ๋ฌ ํ์ด ๋ด๊ธด ๋ธ๋ก ๋จ์๋ก ์ฝ์ต๋๋ค. Physical Reads·Session Logical Reads๋ ์ด ๋ธ๋ก ์๋ฅผ ์ ๋๋ค.
- IOPS(์ด๋น ์ ์ถ๋ ฅ ํ์): 1์ด์ ๋์คํฌ๋ฅผ ๋ช ๋ฒ ์ฝ๊ฑฐ๋ ์ผ๋์ง, ๊ทธ ํ์์ ๋๋ค. "์๊ฐ๋ฅผ 1์ด์ ๋ช ๋ฒ ๋ค๋ ์๋" ์ ํด๋นํฉ๋๋ค.
- Throughput(์ฒ๋ฆฌ๋): 1์ด์ ์ค์ ๋ก ๋ช ๋ฐ์ดํธ๋ฅผ ์ฝ๊ฑฐ๋ ์ผ๋์ง, ๊ทธ ์์ ๋๋ค. "1์ด์ ์ง์ ๋ช kg ๋ ๋๋" ์ ํด๋นํฉ๋๋ค. ํ์(IOPS)๊ฐ ์ ์ด๋ ํ ๋ฒ์ ํฐ ์ง์ ๋๋ฅด๋ฉด ์ฒ๋ฆฌ๋์ ํด ์ ์์ต๋๋ค.
- Latency(์ง์ฐ ์๊ฐ): ํ ๋ฒ์ ์์ ์ด ๋๋๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋๋ค. ๋ค๋ ์ค๋ ๋ฐ ์ผ๋ง๋ ์ค๋ ๊ฑธ๋ ธ๋๋ฅผ ๋ด ๋๋ค.
Physical Reads (block)
๋์คํฌ์์ ์ฝ์ด ๋ค์ธ ๋ธ๋ก ์์ ๋๋ค. ์บ์(๋ฒํผ ์บ์)์ ์์ด์ ์ด์ฉ ์ ์์ด ๋์คํฌ๊น์ง ๋ด๋ ค๊ฐ ์ฝ์ ๊ฒ์ด๋ผ, ์ด ๊ฐ์ด ํฌ๋ฉด ๊ทธ๋งํผ ๋๋ฆฝ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 27,708 ๋ธ๋ก, ๋ฒ์ 1,179 ~ 649,044. ํ์์๋ ์ด๋ ์ ๋ ์๊ณ , ์ด๋ค ์๊ฐ 64๋ง ๋ธ๋ก์ ๋๊ฒผ์ต๋๋ค. ์ด ์๊ฐ์ด ๋ํ ํ ์ค์บ์ ์ ํธ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๊ณ ํ ์ค์บํ๋ ์ฟผ๋ฆฌ, ๋ฒํผ ์บ์์ ์๋ ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์๊ธฐ ์กฐํ, ๋ฒํผ ์บ์ ํฌ๊ธฐ ๋ถ์กฑ.
๋ฌผ๋ฆฌ ์ฝ๊ธฐ๋ฅผ ํญ์ฆ์ํค๋ ๋ํ ์์ธ์ ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๋ ํ ์ค์บ์ ๋๋ค.
-- ๋์ ์: ์ธ๋ฑ์ค ์๋ ์ปฌ๋ผ ์กฐ๊ฑด → ํฐ ํ
์ด๋ธ์ ํต์งธ๋ก ๋์คํฌ์์ ์ฝ๋๋ค
SELECT * FROM orders WHERE memo LIKE '%ํ๋ถ%';
-- ๊ณ ์น ์: ์ธ๋ฑ์ค ํ๋ ์กฐ๊ฑด์ผ๋ก ์ขํ๊ณ ํ์ํ ์ปฌ๋ผ๋ง ์ฝ๋๋ค
SELECT order_id, member_id, total_amount
FROM orders
WHERE status = 'REFUNDED' -- status์ ์ธ๋ฑ์ค
AND created_at >= DATE '2026-06-01';
-- ๋ฌผ๋ฆฌ ์ฝ๊ธฐ๋ฅผ ๋ง์ด ํ SQL ํ๋ณด ์ฐพ๊ธฐ
SELECT sql_id, disk_reads, executions, sql_text
FROM v$sql
WHERE executions > 0
ORDER BY disk_reads DESC
FETCH FIRST 20 ROWS ONLY;
- ํจ๊ป ํ์ธํ ์งํ: Session Logical Reads๋ ๊ฐ์ด ํฌ๋ฉด → ํ ์ฟผ๋ฆฌ๊ฐ ๋ง์ ๋ธ๋ก์ ํ๋ ํ ์ค์บ์ ๋๋ค. Read IOPS·Read Throughput·Latency๊ฐ ๋๋ฐ ์์น์ด๋ฉด → ๋์คํฌ ์ฝ๊ธฐ๊ฐ ์ค์ ๋ก ๋์ด ๋๋ ค์ง๋ ์ค์ ๋๋ค. CPU๋ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋ฌด๊ฑฐ์ด ์ฝ๊ธฐ ์ฟผ๋ฆฌ๊ฐ CPU๊น์ง ๋จน๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Physical Reads(๋์คํฌ ์ฝ๊ธฐ)๊ฐ ๋์๋ค๋ ๊ฒ์ ์ฝ๋๊ฐ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์์ฒญํ๋ค๋ ๋ป์ ๋๋ค. ์กฐํ ์กฐ๊ฑด·์กฐ์ธ ํค์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด ํ ์ค์บ์ ๋ง๊ณ , ํ ๋ฒ ์ฐ๊ณ ๋ง๋ ๋์ฉ๋ ์ค์บ์ ์๊ฐ๋๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋์คํฌ ์ฝ๊ธฐ๊ฐ ์ค์ด๋ญ๋๋ค.
Session Logical Reads (block)
๋ฉ๋ชจ๋ฆฌ(๋ฒํผ ์บ์)์์ ์ฝ์ ๋ฐ์ดํฐ ๋ธ๋ก ์์ ๋๋ค. db block gets๊ณผ consistent gets์ ํฉ์ผ๋ก, ๋์คํฌ๊น์ง ๋ด๋ ค๊ฐ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ ์์ ๋ด ๋๋ค. ์ฝ๊ธฐ ์์ฒญ ์ ์ฒด์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ํ๋ ์งํ์ ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 557,704 ๋ธ๋ก, ๋ฒ์ 55,605 ~ ์ฝ 1,470๋ง. ํ์์๋ ์์ญ๋ง ๋ธ๋ก์ ์ฝ๊ณ , ์ด๋ค ์๊ฐ 1,400๋ง ๋ธ๋ก์ ๋๊ฒผ์ต๋๋ค. ํ ์ฟผ๋ฆฌ๊ฐ ์์ฒญ๋ ์์ ํ์๋ค๋ ๋ป์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ํ ์ฟผ๋ฆฌ๊ฐ ๋ง์ ๋ธ๋ก์ ํ๋ ๋นํจ์จ(์ธ๋ฑ์ค ๋ฏธ์ฌ์ฉ·๋์ ๋ฒ์ ์กฐํ), ๋ํ ์กฐ์ธ, ๋ฐ๋ณต ํธ์ถ๋๋ ๋นํจ์จ ์ฟผ๋ฆฌ.
-- ๋
ผ๋ฆฌ ์ฝ๊ธฐ(buffer gets)๋ฅผ ๋ง์ด ํ SQL ์ฐพ๊ธฐ — ํ๋ 1์์ ํ๋ณด
SELECT sql_id, buffer_gets, executions,
buffer_gets / GREATEST(executions, 1) AS gets_per_exec,
sql_text
FROM v$sql
WHERE executions > 0
ORDER BY buffer_gets DESC
FETCH FIRST 20 ROWS ONLY;
- ํจ๊ป ํ์ธํ ์งํ: Physical Reads๊ฐ ๊ฐ์ด ํฌ๋ฉด → ์บ์์ ์๋ ๋ฐ์ดํฐ๊น์ง ๋์คํฌ์์ ๋์ด์ค๋ ๋ํ ์ค์บ์ ๋๋ค. ๋ฐ๋๋ก Logical๋ง ํฌ๊ณ Physical์ ์์ผ๋ฉด → ์บ์์ ์์ง๋ง ํ ์ฟผ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์ ๋ธ๋ก์ ํ๋ ๊ฒ(์ธ๋ฑ์ค๋ก ์ค์ผ ์ฌ์ง)์ ๋๋ค. CPU๊ฐ ๋๋ฐ์ด๋ฉด ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋ ผ๋ฆฌ ์ฝ๊ธฐ๊ฐ ๋ง๋ค๋ ๊ฒ์ ํ ์ฟผ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์ ๋ธ๋ก์ ๋ง์ง๋ค๋ ๋ป์ด๊ณ , ๋์คํฌ๋ฅผ ์ ๊ฑด๋๋ ค๋ ๊ทธ๋งํผ CPU๋ฅผ ์๋๋ค. ์
gets_per_exec(์คํ๋น ์ฝ์ ๋ธ๋ก ์)๊ฐ ํฐ SQL์ด ํ๋ 1์์์ ๋๋ค. ์ธ๋ฑ์ค๋ก ์ฝ๋ ๋ฒ์๋ฅผ ์ขํ๋ฉด ๋ ผ๋ฆฌ ์ฝ๊ธฐ๊ฐ ์ค๊ณ CPU๋ ํจ๊ป ๋ด๋ ค๊ฐ๋๋ค.์ค๋ฌด ์๋๋ฆฌ์ค — ์ด๋ค ํ๋ฉด์ด ๊ฐ์๊ธฐ ๋๋ ค์ก๋๋ฐ Session Logical Reads์ CPU๊ฐ ๋์์ ์น์์๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ํ์ง ๋ชปํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฌํฉ๋๋ค. ์๋ก ๋ฐฐํฌ๋ ์กฐํ ์ฟผ๋ฆฌ๊ฐ ๋์ ๋ฒ์๋ฅผ ์ธ๋ฑ์ค ์์ด ํ์ด, ์คํํ ๋๋ง๋ค ์๋ฐฑ๋ง ๋ธ๋ก์ ๋ง์ง๋ ๊ฒฝ์ฐ์ ๋๋ค. v$sql์์ buffer_gets๊ฐ ํฐ SQL์ ์ฐพ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ผ๋ฆฌ ์ฝ๊ธฐ๊ฐ ๊ทน์ ์ผ๋ก ์ค๊ณ CPU๋ ํจ๊ป ๋ด๋ ค๊ฐ๋๋ค.
Read IOPS (๊ฑด/์ด) / Write IOPS (๊ฑด/์ด)
์ด๋น ๋์คํฌ ์ฝ๊ธฐ/์ฐ๊ธฐ I/O ์ฐ์ฐ ์์ ๋๋ค. "์ด๋น ๋ช ๋ฒ ๋์คํฌ์ ์ ๊ทผํ๋"๋ฅผ ๋ปํฉ๋๋ค.
- ๊ด์ธก๊ฐ: Read IOPS ํ๊ท ์ฝ 3,014(๋ฒ์ 326 ~ 22,510), Write IOPS ํ๊ท ์ฝ 141(๋ฒ์ 13.6 ~ 5,938). ์ฝ๊ธฐ IOPS๊ฐ ํ์์๋ ๊ฝค ๋๊ณ ์๊ฐ 2๋ง์ ๋๊ธฐ๊ธฐ๋ ํฉ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: Read IOPS๊ฐ ์ค๋ฅด๋ฉด → ์บ์ ๋ฏธ์ค(๋ฌผ๋ฆฌ ์ฝ๊ธฐ ์ฆ๊ฐ). Write IOPS๊ฐ ์ค๋ฅด๋ฉด → ๋๋ ์ฐ๊ธฐ·์ปค๋ฐ. ํด๋ผ์ฐ๋(RDS)์์๋ IOPS์ ํ๋๊ฐ ์์ด, ํ๋์ ๋ถ๋ชํ๋ฉด ์ ์ฒด๊ฐ ๋๋ ค์ง๋๋ค.
- ํจ๊ป ํ์ธํ ์งํ: Read IOPS๋ Physical Reads์ ํจ๊ป ๋ด ๋๋ค — ๋ฌผ๋ฆฌ ์ฝ๊ธฐ๊ฐ ๋๋ฉด Read IOPS๋ ์ค๋ฆ ๋๋ค. Write IOPS๋ User Commits·Redo Entries·DBWR Undo Block Writes์ ํจ๊ป ๋ณด๋ฉด → ๋ณ๊ฒฝ·์ปค๋ฐ์ด ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋ ์์ ๊ฐ๋ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Read IOPS๋ ์บ์์์ ๋ชป ์ฐพ์ ์ฝ๊ธฐ๊ฐ, Write IOPS๋ ๋ณ๊ฒฝ๊ณผ ์ปค๋ฐ์ด ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋ ์์ ๋๋ค. ๋งค ๊ฑด๋ง๋ค ์ปค๋ฐํ๋ ์ฝ๋๋ ๋์คํฌ ์ฐ๊ธฐ๋ฅผ ์๊ฒ ๋๋ฆฌ๋ฏ๋ก ๋ฌถ์ด์ ์ปค๋ฐํ๋ฉด ๋ถ๋ด์ด ์ค๋๋ค. ํด๋ผ์ฐ๋ DB๋ IOPS์ ํ๋๊ฐ ์์ด, ํ๋๋ฅผ ๋๊ธฐ๋ ํจํด(์ฆ์ ๋จ๊ฑด ์ปค๋ฐ·๋๋ ํ ์ค์บ)์ ์ฝ๋ ๋จ๊ณ์์ ์ค์ฌ์ผ ํฉ๋๋ค.
Read Throughput (Bytes/์ด) / Write Throughput (Bytes/์ด)
์ด๋น ๋์คํฌ์์ ์ฝ์ / ๋์คํฌ์ ์ด ํ๊ท ๋ฐ์ดํธ ์์ ๋๋ค. IOPS๊ฐ "ํ์"๋ผ๋ฉด Throughput์ "์"์ ๋๋ค.
- ๊ด์ธก๊ฐ: Read Throughput ํ๊ท ์ฝ 96MB/s(๋ฒ์ 3.6MB ~ ์ฝ 896MB/s), Write Throughput ํ๊ท ์ฝ 2MB/s(๋ฒ์ 46KB ~ ์ฝ 169MB/s). ์ฝ๊ธฐ ์ฒ๋ฆฌ๋์ด ์๊ฐ ์๋ฐฑ MB๊น์ง ํ๋ ๊ฒ์ ๋ํ ํ ์ค์บ์ด ๋ฐ์ดํฐ๋ฅผ ํต์งธ๋ก ๋์ด์ฌ ๋์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ ํ ์ค์บ(์ฝ๊ธฐ ์ฒ๋ฆฌ๋), ๋๋ ์ ์ฌ·๋๋ ๋ณ๊ฒฝ(์ฐ๊ธฐ ์ฒ๋ฆฌ๋).
- ํจ๊ป ํ์ธํ ์งํ: Read Throughput๊ณผ Physical Reads·Read IOPS๋ฅผ ํจ๊ป ๋ด ๋๋ค — ์ ์ด ๊ฐ์ด ์ค๋ฅด๋ฉด ๋ํ ํ ์ค์บ์ ๋๋ค. Write Throughput๊ณผ Redo Entries·Write IOPS๊ฐ ๋๋ฐ์ด๋ฉด → ๋๋ ๋ณ๊ฒฝ์ด ๋์คํฌ๋ก ๋ด๋ ค๊ฐ๋ ์ค์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ์ฒ๋ฆฌ๋์ ํ ๋ฒ์ ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฃผ๊ณ ๋ฐ๋์ง๋ฅผ ๋ด ๋๋ค. ํ์ ์ด์์ผ๋ก ๋์ ๋ฒ์๋ฅผ ์ฝ๊ฑฐ๋
SELECT *๋ก ๋ถํ์ํ ์ปฌ๋ผ๊น์ง ๋์ด์ค๋ฉด ์ฝ๊ธฐ ์ฒ๋ฆฌ๋์ด ์ปค์ง๋๋ค. ํ์ํ ์ปฌ๋ผ·๋ฒ์๋ง ์ฝ๋๋ก ์ขํ๋ฉด ์ฒ๋ฆฌ๋์ด ์ค๊ณ ์๋ต๋ ๋นจ๋ผ์ง๋๋ค.
Latency (์ด)
ํธ๋์ญ์ ๋น SQL ์ํ ์๊ฐ์ ๋๋ค. ํ ์์ ์ด ๋๋๋ ๋ฐ ๊ฑธ๋ฆฐ ํ๊ท ์๊ฐ์ ๋ด ๋๋ค. ์๋ต ์๋๋ฅผ ์ง์ ๋ํ๋ด๋ ์งํ๋ผ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ ๊ฐ๊น์ต๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 0.1์ด, ๋ฒ์ 0.00215 ~ 5.83์ด. ํ์์ 0.1์ด ์ํ์ผ๋ก ๋น ๋ฅธ๋ฐ, ์ด๋ค ์๊ฐ 5.8์ด๊น์ง ๋์ด๋ ์ ์ด ์์ต๋๋ค. ์ด ์๊ฐ์ด ๋๋ ค์ง ์์ ์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ(ํ ์ค์บ·๋ํ ์กฐ์ธ), ๋์คํฌ I/O ๋ณ๋ชฉ, ๋ฝ ๋๊ธฐ.
- ํจ๊ป ํ์ธํ ์งํ: Physical Reads·Read IOPS๊ฐ ๊ฐ์ด ์ค๋ฅด๋ฉฐ Latency๊ฐ ๊ธธ์ด์ง๋ฉด → ๋์คํฌ ์ฝ๊ธฐ ๋ณ๋ชฉ์ ๋๋ค. enq: TX - Row Lock Contention์ด ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋ฝ ๋๊ธฐ๋ก ๋๋ ค์ง ๊ฒ์ ๋๋ค(์ฟผ๋ฆฌ ์์ฒด๋ณด๋ค ๊ฒฝํฉ์ด ์์ธ). Active Session๋ ๊ฐ์ด ์ค๋ฅด๋ฉด → ๋๋ฆฐ ์ฟผ๋ฆฌ๊ฐ ์์ด๋ ์ค์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Latency๊ฐ ๊ธธ์ด์ก๋ค๋ ๊ฒ์ ์ฌ์ฉ์ ์ฒด๊ฐ์ด ๋๋น ์ก๋ค๋ ๋ป์ ๋๋ค. ์์ธ์ ๋ณดํต ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ๊ฑฐ๋ ๋ฝ ๋๊ธฐ์ ๋๋ค. ํจ๊ป ์ค๋ฅธ ์งํ(์ฝ๊ธฐ ํญ์ฆ์ธ์ง, ๋ฝ ๋๊ธฐ์ธ์ง)๋ก ๋ฐฉํฅ์ ๊ฐ๋ฅด๊ณ , ์ฝ๊ธฐ ํญ์ฆ์ด๋ฉด ์ธ๋ฑ์ค๋ฅผ, ๋ฝ ๋๊ธฐ๋ฉด ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ์๋ด ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ํ์ 0.1์ด์ด๋ Latency๊ฐ ํน์ ์๊ฐ๋์๋ง 5์ด๋ก ํ๋ค๋ฉด, ๊ทธ ์๊ฐ์ ๋๋ ๋ฌด๊ฑฐ์ด ๋ฐฐ์น๋ ๋ฝ์ ์ค๋ ์ก๋ ํธ๋์ญ์ ์ ์์ฌํฉ๋๋ค. ๊ฐ์ ์๊ฐ์ Physical Reads๊ฐ ํจ๊ป ์น์์๋ค๋ฉด ๋ํ ํ ์ค์บ, enq: TX ๋๊ธฐ๊ฐ ํจ๊ป ์ฌ๋๋ค๋ฉด ๋ฝ ๊ฒฝํฉ์ ๋๋ค. ์ด๋ค ์งํ๊ฐ ๊ฐ์ด ์์ง์๋์ง๊ฐ ์์ธ์ ๊ฐ๋ฅด๋ ๋จ์์ ๋๋ค.
7. ๋คํธ์ํฌ · ์คํ ๋ฆฌ์ง
DB๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋คํธ์ํฌ ํธ๋ํฝ๊ณผ, ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์คํ ๋ฆฌ์ง ์ฌ์ ๊ณต๊ฐ์ ๋ด ๋๋ค. ๋ฒํผ ์บ์๊ฐ ์ฑ ์์ด๋ผ๋ฉด, ์ฌ๊ธฐ๋ ์๋์๊ฒ ๋ค๊ณ ๋๊ฐ ์ง(๋คํธ์ํฌ)์ ์๊ณผ ์ฐฝ๊ณ ์ ๋จ์ ๋น ๊ณต๊ฐ(์คํ ๋ฆฌ์ง)์ ๋๋ค.
ํด๋ผ์ฐ๋(RDS) ํน์ ์ ๊ฐ๋ ํ๋๋ฅผ ๋จผ์ ํ์ด ๋๊ฒ ์ต๋๋ค.
- ๋ฒ์คํธ(burst, ํฌ๋ ๋ง): ํด๋ผ์ฐ๋ DB(RDS ๋ฑ)๋ ๋์คํฌ·๋คํธ์ํฌ ์ฑ๋ฅ์ ํ๋๋ฅผ ๋๋๋ฐ, ํ์์ ํ๋๋ฅผ ๋ค ์ ์ฐ๋ฉด ๊ทธ ์ฌ์ ๋ถ์ "ํฌ๋ ๋ง" ์ผ๋ก ๋ชจ์ ๋ก๋๋ค. ๊ฐ์๊ธฐ ์ผ์ด ๋ชฐ๋ฆฌ๋ฉด ๋ชจ์ ๋ ํฌ๋ ๋ง์ ํ์ด ์ ๊น ํ๋ ์ด์์ผ๋ก ๋ชฐ์ ์ธ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฒ์คํธ์ ๋๋ค. ํด๋ํฐ ๋ฐ์ดํฐ๋ฅผ ํ์ ์๊ผ๋ค๊ฐ ํ์ํ ๋ ๋ชฐ์ ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ๋ค๋ง ํฌ๋ ๋ง์ด ๋ฐ๋ฅ๋๋ฉด ๋ค์ ๊ธฐ๋ณธ ํ๋๋ก ๋จ์ด์ง๋ฏ๋ก, ๋ฌด๊ฑฐ์ด ์์ ์ด ์ค๋ ์ด์ด์ง๋ฉด ์ด๋ ์๊ฐ ๊ฐ์๊ธฐ ๋๋ ค์ง๋๋ค. ์๋ EBS Balance ์งํ๊ฐ ์ด ํฌ๋ ๋ง์ ์๋์ ๋ด ๋๋ค.
Network Transmit Throughput (Bytes/์ด) / Network Receive Throughput (Bytes/์ด)
DB ์ธ์คํด์ค๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋๋ค. Transmit(์ก์ )์ DB๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด๋ ์, Receive(์์ )๋ DB๋ก ๋ค์ด์ค๋ ์ฟผ๋ฆฌ·๋ฐ์ดํฐ์ ์์ ๋๋ค.
- ๊ด์ธก๊ฐ: ์ก์ ํ๊ท ์ฝ 14.5MB/s(๋ฒ์ 2.7MB ~ ์ฝ 191MB/s), ์์ ํ๊ท ์ฝ 12.3MB/s(๋ฒ์ 2.7MB ~ ์ฝ 22.5MB/s). ์ก์ ์ด ์๊ฐ 191MB๊น์ง ํ๋ ๊ฒ์ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ํผ๋ด๋ ์ฟผ๋ฆฌ๊ฐ ๋ ๋์ ๋๋ค.
- ํ๋ฉด ์์ฌํ ๊ฒ: ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์ฟผ๋ฆฌ(
SELECT *๋ก ํฐ ํ ์ด๋ธ ์ ์ฒด ๋ฐํ ๋ฑ), ๋๋ ์ ์ฌ, ๋ณต์ ํธ๋ํฝ.
-- ๋์ ์: ํ์ด์ง ์์ด ํฐ ํ
์ด๋ธ ์ ์ฒด๋ฅผ ๋ชจ๋ ์ปฌ๋ผ์ผ๋ก ๋ฐํ → ์ก์ ํธ๋ํฝ ํญ์ฆ
SELECT * FROM products;
-- ๊ณ ์น ์: ํ์ํ ์ปฌ๋ผ๋ง, ํ์ด์ง์ผ๋ก ์๋ผ์ ๋ฐํ
SELECT product_id, name, price
FROM products
ORDER BY product_id
OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY;
- ํจ๊ป ํ์ธํ ์งํ: ์ก์ ํธ๋ํฝ ๊ธ์ฆ๊ณผ Session Logical Reads๊ฐ ๋๋ฐ์ด๋ฉด → ํฐ ๊ฒฐ๊ณผ์ ์ ํผ๋ด๋ ์ฟผ๋ฆฌ์ ๋๋ค. ์์ ํธ๋ํฝ๊ณผ Redo Entries·Write IOPS๊ฐ ๋๋ฐ์ด๋ฉด → ๋๋ ์ ์ฌ๊ฐ ๋ค์ด์ค๋ ์ค์ ๋๋ค. ๋ ๋ค ํํํ๋ฐ ํ์ชฝ๋ง ํ๋ฉด ๋ณต์ ํธ๋ํฝ ๋ฑ ํน์ ๊ฒฝ๋ก๋ฅผ ์์ฌํฉ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ํ์ด์ง ์์ด ํฐ ๊ฒฐ๊ณผ๋ฅผ ํต์งธ๋ก ๋ฐํํ๊ฑฐ๋
SELECT *๋ก ๋ถํ์ํ ์ปฌ๋ผ๊น์ง ํผ๋ด๋ฉด ์ก์ ํธ๋ํฝ์ด ์ปค์ง๋๋ค. ํ์ํ ์ปฌ๋ผ๋ง, ํ์ด์ง ๋จ์๋ก ์๋ผ ๋ฐํํ๋ฉด ์ก์ ๋์ด ์ค๊ณ ์๋ต๋ ๋นจ๋ผ์ง๋๋ค. ๋๋ ์ ์ฌ ์ชฝ์ ํ ๊ฑด์ฉ ๋ฃ๋ ๋์ ๋ฌถ์ด์ ๋ณด๋ด๋ฉด ์์ ํธ๋ํฝ๊ณผ ์๋ณต ํ์๋ฅผ ํจ๊ป ์ค์ผ ์ ์์ต๋๋ค.
Free Storage Space (Bytes)
์ฌ์ฉ ๊ฐ๋ฅํ ์คํ ๋ฆฌ์ง ์ฌ์ ๊ณต๊ฐ ํฌ๊ธฐ์ ๋๋ค. ์ธ์คํด์ค์ ๋จ์ ๋น ๊ณต๊ฐ์ ๋ฐ์ดํธ๋ก ๋ด ๋๋ค.
- ๊ด์ธก๊ฐ: ํ๊ท ์ฝ 709GB, ๋ฒ์ ์ฝ 690 ~ 729GB๋ก ํํํฉ๋๋ค. ์ฌ์ ๊ฐ ์ถฉ๋ถํ ์ํ์ ๋๋ค.
- ์ํ ์ ํธ: ์๊ณํ๋ ์ฌ์ฉ๋ฅ (%) ๊ธฐ์ค์ด๋ผ ์ฌ์ ์ฉ๋(bytes)์๋ ์ ๋ ์๊ณ๋ฅผ ๋นํ์ฑํํ๊ณ , ๋์ ์ฌ์ ๊ณต๊ฐ์ด ๊ธ๊ฒฉํ ์ค์ด๋๋ ์ถ์ธ๋ฅผ ๊ฐ์ํฉ๋๋ค. ์คํ ๋ฆฌ์ง๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์ฐ๊ธฐ ์์ฒด๊ฐ ๋ฉ์ถฐ ์ฅ์ ๋ก ์ง๊ฒฐ๋ฉ๋๋ค.
- ํ๋ฉด(์ค๋ฉด) ์์ฌํ ๊ฒ: ๋๋ ์ ์ฌ๋ก ๋ฐ์ดํฐ ์ฆ๊ฐ, ์ ๋ฆฌ๋์ง ์๊ณ ์์ด๋ ๋ก๊ทธ·์์นด์ด๋ธ Redo ๋ก๊ทธ, temp ์์ญ์ ํฌ๊ฒ ์ฐ๋ ์ ๋ ฌ.
-- ํ
์ด๋ธ์คํ์ด์ค๋ณ ์ฌ์ฉ๋·์ฌ์ ๊ณต๊ฐ ํ์ธ (๊ฐ๋ ์ฐจ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ณธ๋ค)
SELECT df.tablespace_name,
ROUND(SUM(df.bytes)/1024/1024/1024, 1) AS total_gb,
ROUND((SUM(df.bytes) - NVL(fs.free_bytes,0))/1024/1024/1024, 1) AS used_gb,
ROUND(NVL(fs.free_bytes,0)/1024/1024/1024, 1) AS free_gb
FROM dba_data_files df
LEFT JOIN (SELECT tablespace_name, SUM(bytes) AS free_bytes
FROM dba_free_space GROUP BY tablespace_name) fs
ON fs.tablespace_name = df.tablespace_name
GROUP BY df.tablespace_name, fs.free_bytes
ORDER BY free_gb;
- ํจ๊ป ํ์ธํ ์งํ: (OS) Disk Percent์ ๋ฐ๋๋ก ์์ง์ ๋๋ค(์ฌ์ ๊ฐ ์ค๋ฉด ๋์คํฌ ์ฌ์ฉ๋ฅ ์ด ์ค๋ฆ). Redo Entries·Undo Change Vector Size๊ฐ ํฌ๋ฉด → ๋ณ๊ฒฝ๋์ด ๋ง์ ๋ก๊ทธ·undo๊ฐ ๊ณต๊ฐ์ ๋จน๋ ์ค์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ์คํ ๋ฆฌ์ง๋ ํ ๋ฒ ์ฐจ๋ฉด ์ฐ๊ธฐ๊ฐ ๋ฉ์ถฐ ๊ฐ์ฅ ์น๋ช ์ ์ ๋๋ค. ์ค๋๋ ๋ฐ์ดํฐ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌ·์์นด์ด๋ธํ๊ณ , ๋๋ ์ ์ฌ·์ญ์ ๋ ํ ๋ฒ์ ๋ชฐ์ง ๋ง๊ณ ๋๋ ์ ์ฒ๋ฆฌํฉ๋๋ค. ํฐ ์ ๋ ฌ์ ์ ๋ฐํ๋ ์ฟผ๋ฆฌ๋ temp ๊ณต๊ฐ์ ํฌ๊ฒ ์ฐ๋ฏ๋ก ์ธ๋ฑ์ค๋ก ์ ๋ ฌ์ ๋์ ํ๊ฒ ํ๋ ๊ฒ๋ ๊ณต๊ฐ ๊ด๋ฆฌ์ ๋์์ด ๋ฉ๋๋ค.
์ค๋ฌด ์๋๋ฆฌ์ค — ์ฌ์ ๊ณต๊ฐ์ด ํ์์ ํํํ๋ค๊ฐ ์ด๋ ๋ ๋ถํฐ ๋งค์ผ ์ผ์ ๋์ฉ ์ค์ด๋๋ ์ฐํํฅ ๊ทธ๋ํ๊ฐ ๊ทธ๋ ค์ง๋ค๋ฉด, ์ ๋ฆฌ๋์ง ์๋ ๋ก๊ทธ๋ ๋ฉ์ถ์ง ์๋ ์ ์ฌ ๋ฐฐ์น๋ฅผ ์์ฌํฉ๋๋ค. ์ถ์ธ๋๋ก๋ฉด ๋ฉฐ์น ๋ค ๊ณต๊ฐ์ด ๋ฐ๋ฅ๋ ์ฐ๊ธฐ๊ฐ ๋ฉ์ถ๋ฏ๋ก, ์ ๋๊ฐ์ด ์ํ์ ์ ๋ฟ๊ธฐ ์ ์ ์ถ์ธ๋ฅผ ๋ณด๊ณ ๋ฏธ๋ฆฌ ์์ฐ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
EBS Byte Balance Max (credits) / EBS IO Balance Max (credits)
RDS ์ธ์คํด์ค์ ๋ฒ์คํธ ๋ฒํท์ ๋จ์ ์๋ ํฌ๋ ๋ง ์๋(%)์ ๋๋ค. EBS Byte Balance๋ ์ฒ๋ฆฌ๋(Throughput) ํฌ๋ ๋ง, EBS IO Balance๋ I/O ํฌ๋ ๋ง์ ์์ฌ ๋น์จ์ ๋๋ค.
- ๊ด์ธก๊ฐ: EBS Byte Balance ํ๊ท ์ฝ 99%(๋ฒ์ 98 ~ 100), EBS IO Balance ์ฝ 99%๋ก ๊ฑฐ์ 100%์ ๋ถ์ด ์์ต๋๋ค. ํฌ๋ ๋ง์ ๊ฑฐ์ ์ ํ๊ณ ์๋ค๋ ๋ป์ด๋ผ ์ ์์ ๋๋ค.
- ์ํ ์ ํธ: ์ด ๊ฐ์ด ๊พธ์คํ ๋จ์ด์ง๋ฉด ๋ฒ์คํธ ํฌ๋ ๋ง์ ๊ณ์ ํ์ด ์ฐ๊ณ ์๋ค๋ ๋ป์ ๋๋ค. 0%์ ๋ฟ์ผ๋ฉด ๊ธฐ๋ณธ ํ๋๋ก ๋จ์ด์ ธ ๋์คํฌ·๋คํธ์ํฌ ์ฑ๋ฅ์ด ๊ฐ์๊ธฐ ๋๋น ์ง๋๋ค.
- ํ๋ฉด(๋จ์ด์ง๋ฉด) ์์ฌํ ๊ฒ: ๋ฌด๊ฑฐ์ด I/O ์์ ์ด ์ค๋ ์ง์(๋๋ ํ ์ค์บ·๋๋ ์ ์ฌ๊ฐ ๊ธธ๊ฒ ์ด์ด์ง).
- ํจ๊ป ํ์ธํ ์งํ: Read/Write IOPS·Throughput์ด ์ค๋ ๋๊ฒ ์ ์ง๋๋ฉด → ํฌ๋ ๋ง์ด ๊น์ด๋ฉฐ ์ด Balance๊ฐ ๋จ์ด์ง๋๋ค. Balance๊ฐ 0์ ๊ฐ๊น์์ง๋๋ฐ Latency๊ฐ ์ค๋ฅด๋ฉด → ํ๋๋ก ๋จ์ด์ ธ ๋๋ ค์ง๊ธฐ ์์ํ ์ ํธ์ ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — ๋ฒ์คํธ ํฌ๋ ๋ง์ ํ์ ์๊ปด ๋์๋ค๊ฐ ์ ๊น ๋ชฐ์ ์ฐ๋ ์ฌ์ ๋ถ์ ๋๋ค. ๋ฌด๊ฑฐ์ด I/O ์์ ์ด ์งง๊ฒ ๋๋๋ฉด ๋ฌธ์ ์์ง๋ง, ๋๋ ์ฒ๋ฆฌ๊ฐ ์ค๋ ์ด์ด์ง๋ฉด ํฌ๋ ๋ง์ด ๋ฐ๋ฅ๋ ๊ฐ์๊ธฐ ๋๋ ค์ง๋๋ค. ๋๋ ์์ ์ ๋๋ ์ ๋ถ์ฐํ๊ณ , ์ด์ ํธ๋ํฝ๊ณผ ์๊ฐ๋๋ฅผ ๋ถ๋ฆฌํ๋ฉด ํฌ๋ ๋ง ๊ณ ๊ฐ์ ํผํ ์ ์์ต๋๋ค.
8. ๊ธฐํ
Oracle Elapse Time Monitor (ms)
SQL ์ํ ์๊ฐ(Elapse Time)์ ํฉ๋ฟ๋ ค(scatter) ๋ณด์ฌ ์ฃผ๋ ๋ชจ๋ํฐ๋ง ์งํ์ ๋๋ค. ๊ฐ๋ณ SQL์ด ์ผ๋ง๋ ๊ฑธ๋ ธ๋์ง์ ๋ถํฌ๋ฅผ ๋ด ๋๋ค.
- ๋จ์ ์ฃผ์: ์ด ์งํ๋ง ๋ฐ๋ฆฌ์ด(ms) ๋จ์์ ๋๋ค. ์์์ ๋ณธ ๋ค๋ฅธ ์๊ฐ ์งํ(Latency·Log File Sync·enq: TX·Library Cache Lock)๋ ๋ชจ๋ ์ด(sec) ๋จ์์์ต๋๋ค. ๊ฐ์ "์๊ฐ"์ด๋ผ๋ ๋จ์๊ฐ ๋ฌ๋ผ, ๊ทธ๋ํ๋ ๋ฆฌํฌํธ์์ ์ซ์๋ฅผ ๋น๊ตํ ๋ ๋จ์๋ฅผ ๋ฐ๋์ ํ์ธํด์ผ ํฉ๋๋ค. 0.1๊ณผ 100์ด ์ฌ์ค ๊ฐ์ ์๊ฐ(0.1์ด = 100ms)์ผ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ฒ: scatter ์งํ๋ ์๊ณ์ด ํ๊ท ๋ณด๋ค ๋ถํฌ๊ฐ ํต์ฌ์ ๋๋ค. ๋๋ถ๋ถ์ SQL์ด ์งง์๋ฐ ์ผ๋ถ๋ง ๊ธธ๊ฒ ํ๋ค๋ฉด, ๊ทธ ๊ธธ๊ฒ ํ ์ ๋ค์ด ๋๋ฆฐ ์ฟผ๋ฆฌ ํ๋ณด์ ๋๋ค.
-- ์ํ ์๊ฐ์ด ๊ธด SQL ํ๋ณด ์ฐพ๊ธฐ (์คํ๋น ํ๊ท ๊ฒฝ๊ณผ์๊ฐ, ์ด ๋จ์๋ก ํ์ฐ)
SELECT sql_id,
ROUND(elapsed_time / GREATEST(executions, 1) / 1e6, 3) AS avg_sec,
executions, sql_text
FROM v$sql
WHERE executions > 0
ORDER BY elapsed_time / GREATEST(executions, 1) DESC
FETCH FIRST 20 ROWS ONLY;
- ํจ๊ป ํ์ธํ ์งํ: Latency๊ฐ ๊ฐ์ด ๊ธธ์ด์ง๋ฉด → ์ ๋ฐ์ ์ผ๋ก SQL์ด ๋๋ ค์ง ๊ฒ์ ๋๋ค. ํน์ SQL๋ง ๊ธธ๊ฒ ํ๋ฉด v$sql์์ ๊ทธ sql_id๋ฅผ ์ฐพ์ ์คํ๊ณํ(์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ)์ ๋ด ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ — Elapse Time์ด ๊ธธ๊ฒ ํ๋ SQL์ ๋๋ถ๋ถ ์ธ๋ฑ์ค๋ฅผ ๋ชป ํ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฌด ๋ง์ด ๋ค๋ฃจ๋ ์ฟผ๋ฆฌ์ ๋๋ค. ๋จ์๊ฐ ms๋ผ๋ ์ ๋ง ์ ์ํ๋ฉด, ์ v$sql ์กฐํ๋ก ๋๋ฆฐ SQL์ ์ฐพ์ ์ธ๋ฑ์ค·๊ฒฐ๊ณผ ํฌ๊ธฐ๋ฅผ ์๋ณด๋ ํ๋ฆ์ ์์ ๋ค๋ฅธ ์งํ๋ค๊ณผ ๊ฐ์ต๋๋ค.
์ํฉ๋ณ๋ก ๋ณด๊ธฐ — ๋ฐฐ์น·๋ฐฑ์ ์ด ๋ ๋ ์ด๋ค ์งํ๊ฐ ์์ง์ด๋
์ง๊ธ๊น์ง๋ ์งํ๋ฅผ ํ๋์ฉ ๋ดค์ง๋ง, ์ค์ ๋ก๋ ํ๋์ ์์ ์ด ์ฌ๋ฌ ์งํ๋ฅผ ๋์์ ์์ง์ ๋๋ค. ํนํ ์ ๊ธฐ ๋ฐฐ์น๋ ๋ฐฑ์ ์ฒ๋ผ ์ ํด์ง ์๊ฐ์ ๋๋ ์์ ์ ๋งค๋ฒ ๋น์ทํ ์งํ ๋ฌถ์์ ๋์ด์ฌ๋ฆฝ๋๋ค. Oracle์ Redo·Undo ๊ณ์ด์ด ๋ณ๊ฒฝ๋์ ๋ฏผ๊ฐํ๊ฒ ๋ฐ์ํด์, ๋ฐฐ์น์ ์ข ๋ฅ๋ฅผ ์งํ ํจํด์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ์ข์ต๋๋ค.
๋ฐฐ์น ์ ํ๋ณ ์์ ์งํ ๋ณํ
| ๋ฐฐ์น ์ ํ | ํจ๊ป ์ค๋ฅด๋ ์งํ | ์ด์ |
|---|---|---|
| ๋๋ ์ ์ฌ (INSERT/UPDATE/DELETE) | Redo Entries, Undo Change Vector Size, DBWR Undo Block Writes, Log File Sync, Write IOPS·Write Throughput, CPU | ๋ณ๊ฒฝํ ๋๋ง๋ค Redo(๋ณ๊ฒฝ ๊ธฐ๋ก)์ Undo(๋ณ๊ฒฝ ์ ๊ฐ)๊ฐ ์๊ธฐ๊ณ , ์ปค๋ฐ์ด Redo flush๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋์คํฌ ์ฐ๊ธฐ๋ก ๋ด๋ ค๊ฐ |
| ์ง๊ณ·๋ฆฌํฌํธ (๋๋ SELECT) | Physical Reads, Session Logical Reads, Read IOPS·Read Throughput, Latency, CPU | ํฐ ํ ์ด๋ธ์ ํ์ด ์ง๊ณํ๋ฏ๋ก ์ฝ์ ๋ธ๋ก ์·๋์คํฌ ์ฝ๊ธฐ๊ฐ ๊ธ์ฆํ๊ณ ์๋ต์ด ๋๋ ค์ง |
| ๋๋ ์ญ์ ·์ ๋ฆฌ (DELETE) | Redo Entries, Undo Change Vector Size, enq: TX - Row Lock Contention, Write IOPS | ๋ง์ ํ์ ํ ๋ฒ์ ์ง์ฐ๋ฉด Redo·undo๊ฐ ํฌ๊ฒ ์์ด๊ณ ๋ฝ์ ์ค๋ ์ก์ |
| ๋ฐฑ์ | Read IOPS·Read Throughput, Network, CPU(์ฝ๊ฐ), EBS Balance ํ๋ฝ | ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์ฝ์ด ๋ด๋ณด๋ด๋ฏ๋ก ๋์คํฌ ์ฝ๊ธฐ·๋คํธ์ํฌ๊ฐ ์ค๋ฅด๊ณ , I/O ํฌ๋ ๋ง์ด ๊น์ |
| ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ ์ฝ๋ ๋ฐฐํฌ | Parse Count (Hard), Library Cache Lock, CPU | ๊ฐ์ ๋ฐ์ SQL์ด ๋งค๋ฒ ์ ๋ฌธ์ฅ์ผ๋ก ๋ณด์ฌ Hard parse๊ฐ ํญ์ฆํ๊ณ Library Cache ๊ฒฝํฉ์ด ์๊น |
์๋ฅผ ๋ค๋ฉด
๋งค์ผ ์๋ฒฝ ํต๊ณ ๋ฐฐ์น๊ฐ ํฐ ํ ์ด๋ธ์ ํ ์ค์บํด ์ง๊ณํ๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์๊ฐ์๋ Session Logical Reads๊ฐ ์๋ฐฑ๋ง ๋ธ๋ก์ผ๋ก ๋ฐ๊ณ , Physical Reads์ Read IOPS·Read Throughput์ด ๋ฐ๋ผ ์ค๋ฅด๋ฉฐ, Latency๊ฐ ๊ธธ์ด์ง๊ณ CPU๋ ์ง๊ณ ์ฐ์ฐ์ผ๋ก ๊ฐ์ด ์ค๋ฆ ๋๋ค. ์ด ๋ฌถ์์ด ๊ฐ์ ์๊ฐ์ ํจ๊ป ์์ง์ด๋ ๊ฒ์ด ์ด ๋ฐฐ์น์ ์ง๋ฌธ ๊ฐ์ ํจํด์ ๋๋ค.
์๋ง ๋๋ ์ ์ฌ ๋ฐฐ์น๋ผ๋ฉด ๋ฐ๋๋ก Redo Entries·Undo Change Vector Size·DBWR Undo Block Writes๊ฐ ๊ฐ์ด ์ค๋ฆ ๋๋ค. ๋ง์ฝ ์ด๋ ์ ์ฌ๋ฅผ ํ๋์ ํฐ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ปค๋ฐ์ ๋ฆ๊ฒ ํ๋ฉด, undo๊ฐ ํฌ๊ฒ ์์ด๊ณ enq: TX ๋ฝ ๋๊ธฐ๊น์ง ๋๋ฐ๋ ์ ์์ต๋๋ค. ๋งค ๊ฑด ์ปค๋ฐ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ฒ์ Log File Sync๊ฐ ์น์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์์ ์ ๋๋ฌด ํฌ์ง๋ ๋๋ฌด ์์ง๋ ์์ ๋ฌถ์(์์ฒ~์๋ง ๊ฑด)์ผ๋ก ๋๋ ์ปค๋ฐํ๋ ๊ฒ์ด ๊ท ํ์ ์ ๋๋ค.
ํต์ฌ — "์ธ์ " ์ฌ๋๋์ง๊ฐ ์ค์ํ๋ค
์ฌ๊ธฐ์ ์ค์ํ ์ ์, ์ด ์งํ๋ค์ด ๋ฐฐ์น ์๊ฐ๋์ ํจ๊ป ์ค๋ฅด๋ ๊ฒ์ ์ ์์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ ํด์ง ์์ ์ด ์ ํด์ง ์๊ฐ์ ์์์ ์ฐ๋ ๊ฒ์ด๋๊น์. ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง์ ๋๋ค.
- ๋ฐฐ์น๊ฐ ์๋ ์๊ฐ๋์ ๊ฐ์ ํจํด์ด ๋ํ๋ ๋ — ๋๊ตฐ๊ฐ ์๋์ผ๋ก ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ๋ฅผ ๋๋ ธ๊ฑฐ๋, ์๋์น ์์ ์์ ์ด ๋๋ค๋ ์ ํธ์ ๋๋ค.
- ๋ฐฐ์น ์๊ฐ๋์ธ๋ฐ ํ์๋ณด๋ค ํจ์ฌ ํฌ๊ฒ, ์ค๋ ํ ๋ — ๋ฐ์ดํฐ๊ฐ ๊ทธ๋งํผ ๋์๊ฑฐ๋, ์ฟผ๋ฆฌ๊ฐ ๋นํจ์จ์ ์ผ๋ก ๋ฐ๋์์ ์ ์์ต๋๋ค.
๊ทธ๋์ ๋ชจ๋ํฐ๋ง์์๋ ์ ๋๊ฐ๋งํผ "ํ์ ์ด ์๊ฐ๋์ ๋น๊ตํด์ ์ด๋ค๊ฐ" ๊ฐ ์ค์ํฉ๋๋ค. ๋งค์ผ ๊ฐ์ ์๊ฐ์ ๊ฐ์ ๋ชจ์์ผ๋ก ์ค๋ฅด๋ด๋ฆฌ๋ ๊ทธ๋ํ๋ผ๋ฉด ๊ทธ๊ฑด ๋ฐฐ์น์ ์ ์ ๋ฆฌ๋ฌ์ด๊ณ , ๊ทธ ๋ฆฌ๋ฌ์์ ๋ฒ์ด๋๋ ์๊ฐ์ด ๋ค์ฌ๋ค๋ณผ ์ง์ ์ ๋๋ค.
์ ๋ฆฌํ๋ฉฐ
Oracle ์งํ๋ MySQL๋ณด๋ค ์ฒ์ ๋ณด๋ ๋จ์ด๊ฐ ๋ง์์ง๋ง, ๋ฌด์์ ์๋ฏธํ๊ณ / ํ์ ์ด๋ ์ ๋์ด๊ณ / ํ๋ฉด ๋ญ ์์ฌํ๊ณ / ์ด๋ค ์ฟผ๋ฆฌ๋ก ํ์ธํ๋์ง ๋ก ๋ฌถ๊ณ , ๋น์ ์ ์ค์ ์ฅ์ ์๋๋ฆฌ์ค, ์ค์ธก ๋ฒ์๋ฅผ ๋ถ์ฌ ์ ๋ฆฌํ๋ ํ๊ฒฐ ๋ช ํํด์ก์ต๋๋ค. ํต์ฌ ๊ฐ๋ (SGA·Redo·Undo·Library Cache·ํ์ฑ·ํ ์ด๋ธ์คํ์ด์ค)์ ๋จผ์ ์ก์ ๋๋, ์งํ๋ค์ด ๊ทธ ๊ฐ๋ ๋ค์ ๋์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ก์ต๋๋ค.
Oracle์์ ๊ธฐ์ตํด ๋ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- "์ฐ๊ฒฐ(Total Session)" ๊ณผ "ํ์ฑ(Active Session)" ์ ๋ค๋ฅด๋ค. ์ ์ธ์คํด์ค๋ ์ฐ๊ฒฐ์ ์ฝ 3,700์ธ๋ฐ ํ์ฑ์ 1 ์ํ์ด์๋ค. ๋ถํ๋ ํ์ฑ์ผ๋ก ๋ณธ๋ค.
- Redo·Undo๋ ๋ณ๊ฒฝ๋์ ๊ฑฐ์ธ์ด๋ค. Redo Entries·Undo Change Vector Size๊ฐ ํ์ ์๋ค๊ฐ ์๊ฐ ์์ญ๋ง, ์์ต์ผ๋ก ํ๋ฉด ๋๋ DML ๋ฐฐ์น๋ค. ๋๋ ๋ณ๊ฒฝ์ ๋๋ ์ ์ปค๋ฐํ๋ค.
- Library Cache·ํ์ฑ์ ๋ฐ์ธ๋ ๋ณ์๊ฐ ํต์ฌ์ด๋ค. Parse Count (Hard)๊ฐ ํ๋ฉด ๊ฑฐ์ ๋ฐ์ธ๋ ๋ณ์ ๋ฏธ์ฌ์ฉ์ด๋ค. ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ์ง ๋ง๊ณ ๋ฐ์ธ๋ ๋ณ์๋ก ๋๊ธด๋ค.
- ์ฝ๊ธฐ๋ ๋ ผ๋ฆฌ(Session Logical Reads)์ ๋ฌผ๋ฆฌ(Physical Reads)๋ก ๋๋๋ค. ๋ ๋ค ์๊ฐ ์ต๋๊ฐ์ด ํฌ๋ฉด ํ ์ค์บ์ ์์ฌํ๊ณ , v$sql์ buffer_gets·disk_reads๋ก ๋ฒ์ธ SQL์ ์ฐพ๋๋ค.
- ํ ์ด๋ธ์คํ์ด์ค·Free Storage Space๋ ๊ฐ๋ ์ฐจ๋ฉด ์ฐ๊ธฐ๊ฐ ๋ฉ์ถ๋ค. ์ ๋๊ฐ๋ณด๋ค ์ค์ด๋๋ ์ถ์ธ๋ฅผ ๋ณธ๋ค.
- ์๊ฐ ์งํ ๋จ์์ ์ฃผ์ํ๋ค. Latency·Log File Sync·enq: TX·Library Cache Lock์ ์ด์ธ๋ฐ, Oracle Elapse Time Monitor๋ง ms๋ค.
- ๋๋ถ๋ถ์ ์งํ๋ ํผ์ ํ์ง ์๋๋ค. CPU·Active Session·Reads·IOPS·Redo๊ฐ ๊ฐ์ ์๊ฐ์ ํจ๊ป ์์ง์ด๋์ง๋ฅผ ๋ณด๋ฉด ์์ธ์ ์ค๊ณฝ์ด ์กํ๋ค. ๊ทธ๋์ ๊ฐ ์งํ๋ง๋ค "ํจ๊ป ํ์ธํ ์งํ"๋ฅผ ๊ฐ์ด ์ ์ด ๋ ๊ฒ์ด๋ค.
๋ค์ ๊ธ์์๋ PostgreSQL ์งํ๋ฅผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. PostgreSQL์ Vacuum, Dead Tuple, ํธ๋์ญ์ ID ๋ ธํ(Age) ์ฒ๋ผ MVCC๋ฅผ ์ฒญ์ํ๋ ๊ณผ์ ์์ ๋์ค๋ ๊ทธ DB๋ง์ ์งํ๊ฐ ์์ด, Oracle์ Undo์ ๋น๊ตํด ๋ณด๋ฉด ๊ฐ์ ๋ฌธ์ (๋ณ๊ฒฝ ์ ๋ฐ์ดํฐ ์ ๋ฆฌ)๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ด๋ป๊ฒ ๋ค๋ฅด๊ฒ ํธ๋์ง๊ฐ ์ ๋ณด์ผ ๊ฒ ๊ฐ์ต๋๋ค.
'ํ๋ก์ ํธ > DB ์๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MySQL ์ธ๋ฑ์ค ๋์ ์๋ฆฌ์ ์กฐ์ธ ์ต์ ํ (0) | 2026.06.19 |
|---|---|
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ํฐ๋ง ์งํ ์ ๋ฆฌ (3) PostgreSQL (0) | 2026.06.19 |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ํฐ๋ง ์งํ ์ ๋ฆฌ (1) - MySQL (0) | 2026.06.18 |
| DBA์ ์ํตํ๊ธฐ ์ํ DB ๋ชจ๋ํฐ๋ง ์งํ ๊ธฐ์ด (0) | 2026.06.16 |
| DB ์ผ์ผ ์ ๊ฒ ์๋ํ POC (7) PCA ๋น์ง๋ ์ด์ ํ์ง (0) | 2026.06.15 |