์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ์ํด ํ์ํ ๊ฐ์ฒด
Connection Pool์ Connection์ ํน์ ๊ณต๊ฐ(์บ์ ๊ณต๊ฐ)์ ๋ฏธ๋ฆฌ ์์ฑ ํด๋๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ Thread์์ Connection Pool์ ๋ฏธ๋ฆฌ ์์ฑํด๋ Connection์ ๊บผ๋ด ์ฐ๊ณ ๋ค์ ๋ฐํํ๊ฒ ํฉ๋๋ค.
์น ์๋ฒ(์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ)์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ Connection ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋น์ฉ์ ์์ง ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋งค๋ฒ Connection์ ์์ฑํ๋ ๊ฒ์ ๋ง์ ๋น์ฉ์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
- maxActive : ๋์์ ์ฐ๊ฒฐ๋ ์ ์๋ ์ต๋ ์ปค๋ฅ์ ๊ฐ์
- maxIdle : Connection Pool์ ๋ฐ๋ฉํ ๋ ์ต๋๋ก ์ ์งํ ์ปค๋ฅ์ ๊ฐ์
- minIdle : ์ต์ํ์ผ๋ก ์ ์งํ ์ปค๋ฅ์ ๊ฐ์
- initialSize : ์ต์ด๋ก getConnection() Method๋ฅผ ํตํด ์ปค๋ฅ์ ํ์ ์ฑ์๋ฃ์ ์ปค๋ฅ์ ์ ๊ฐ์
maxActive >= initialSize
๋์์ ์ฐ๊ฒฐ๋ ์ ์๋ ์ปค๋ฅ์
๊ฐ์(maxActive)๋ ์ต์ด๋ก ์์ฑํ ์ปค๋ฅ์
๊ฐ์(initialSize)๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผํฉ๋๋ค. maxActive < initialSize๋ ์ค์ ์ ๊ฐ๋ฅํ์ง๋ง ๋
ผ๋ฆฌ์ ์ธ ์ค๋ฅ๊ฐ ์๋ ์ค์ ์
๋๋ค.
maxIdle > minIdle
์ต๋๋ก ์ ์งํ ์ปค๋ฅ์
๊ฐ์๋(maxActive)๋ ์ต์๋ก ์ ์งํ ์ปค๋ฅ์
๊ฐ์(minIdle)๋ณด๋ค ์ปค์ผํฉ๋๋ค. maxIdle < minIdle๋ ์ค์ ์ ๊ฐ๋ฅํ์ง๋ง ๋
ผ๋ฆฌ์ ์ค๋ฅ๊ฐ ์๋ ์ค์ ์
๋๋ค.
maxActive = maxIdle
maxActive์ maxIdle ๊ฐ์ ๊ฐ์๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
maxActive = 10, maxIdle = 5 ์ค์ ๋ ์ํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
ํ์ฌ ์ปค๋ฅ์
์ ๋์์ 5๊ฐ ์ฌ์ฉ์ค์ธ ์ํฉ์์ ์ถ๊ฐ๋ก 1๊ฐ์ ์ปค๋ฅ์
์์ฒญ์ด ์ค๋ฉด maxActive = 10 ์ด๋ฏ๋ก ์ปค๋ฅ์
์ ์ถ๊ฐ๋ก ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ทธ ํ ์ปค๋ฅ์
์ ํ์ ๋ฐ๋ฉํ๋ฉด ํ์ฌ ์์ฑ๋ ์ปค๋ฅ์
์ด 6๊ฐ์ด๋ฏ๋ก maxIdle = 5 ์ค์ ๊ฐ์ ์ํด ์ปค๋ฅ์
์ด ๋ซํ๋๋ค.
๋ฐ๋ผ์ maxActive์ maxIdle์ค์ ์ด ๊ฐ์ง์๋ค๋ฉด ๋งค๋ฒ ์ปค๋ฅ์
์ ์์ฑํ๊ณ ๋ซ๋ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
maxActive ๊ฐ์ DBMS ์ค์ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ ๊ฐ์, Apache, Tomcat์์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ์ฉ์(์์ฒญ)์ ์๋ฅผ ๊ณ ๋ คํด์ ์ค์ ํด์ผํฉ๋๋ค.
DBMS๊ฐ ์์ฉํ ์ ์๋ ์ปค๋ฅ์
๊ฐ์๋ฅผ ํ์ธํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ 1๋๊ฐ ์ฌ์ฉํ ์ ์๋ ์ ์ ํ ์ปค๋ฅ์
๊ฐ์๋ฅผ ํ์ธํด์ ์ค์ ํด์ผํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๋ชฐ๋ ค์ ์ปค๋ฅ์
์ ๋ง์ด ์ฌ์ฉํ๋ค๋ฉด maxActive ๊ฐ์ด ์ถฉ๋ถํ ํฌ์ง์๋ค๋ฉด ๋ณ๋ชฉ์ง์ ์ด ๋ ์ ์์ต๋๋ค
maxWait ์ค์ ๊ฐ์ ์ปค๋ฅ์
์ ์ป๊ธฐ ์ ๋๊ธฐ ์๊ฐ์
๋๋ค.
์ปค๋ฅ์
ํ ์์ ์ปค๋ฅ์
์ด ์์ ๋ ์ปค๋ฅ์
๋ฐ๋ฉ์ ๋๊ธฐํ๋ ์๊ฐ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ๋ฌดํ์ ์
๋๋ค.
maxWait ๊ฐ์ ์ค์ ํ์ง ์๊ณ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ฌดํ์ ๋๊ธฐํ๋๋ก ํด๋ ์ผ๋ฐ์ ์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์๋ฉ๋๋ค.
ํ์ง๋ง ์ฌ์ฉ์๊ฐ ๊ธ์ฆํ๊ฑฐ๋ DBMS์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ฅ์ ๋ฅผ ๋์ฑ ํฌ๊ฒ ํ์ฐํ ์ ์์ต๋๋ค.
์ ์ ํ maxWait ๊ฐ์ ์ค์ ํ๋ ค๋ฉด TPS(transaction per seconds)์ Tomcat์์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์ค๋ ๋ ๊ฐ์ ๋ฑ์ ์ดํดํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์์ ์์ฒญ ํ๋์ ์ฟผ๋ฆฌ 10๊ฐ๋ฅผ ์คํํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ ์ฟผ๋ฆฌ๋ 50๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ฉด 10๊ฐ์ ์ฟผ๋ฆฌ๋ 500 ๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ํ ์ฒ๋ฆฌ์๊ฐ์ ์๊ฐํ์ง์๊ณ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์๊ฐ๋ง ์๊ฐํ์ ๋ 1์์ฒญ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด 500๋ฐ๋ฆฌ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ง์ฝ ์ฌ์ฉ ๊ฐ๋ฅํ ์ปค๋ฅ์
์ด 5๊ฐ๋ผ๋ฉด ๋์์ 5๊ฐ์ ์์ฒญ์ ๊ฐ๊ฐ 500๋ฐ๋ฆฌ์ด(0.5์ด)๋ก ์ฒ๋ฆฌํฉ๋๋ค. ์ฆ, 1์ด ๋์ 10๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ ์ฑ๋ฅ ์ง์๋ 10TPS๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์์์ ๋ดค๋ฏ์ด ์ปค๋ฅ์
ํ์ ์ปค๋ฅ์
๊ฐ์๊ฐ 5๊ฐ๋ผ๋ฉด 10TPS ์ด์์ ์ฑ๋ฅ์ ๋ผ ์ ์์ต๋๋ค.
์ปค๋ฅ์
ํ์์ ์ด์ํ๋ ์ปค๋ฅ์
์ด 5๊ฐ์ด๊ณ 10๊ฐ์ ์์ฒญ์ด๋ผ๋ฉด 5๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌ๋์ง๋ง ๋๋จธ์ง 5๊ฐ์ ์์ฒญ์ ๋๊ธฐ(wait)์ํ๊ฐ ๋์ด ์ฌ๋ถ์ ์ปค๋ฅ์
์ด ์๊ธธ๋๊น์ง maxWait ๊ฐ๋งํผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ฌ๊ธฐ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ maxActive๊ฐ์ ๋๋ฆฌ๋๊ฒ์
๋๋ค.ํ์ฌ maxActive = 5 ์ด์ง๋ง maxActive = 10์ผ๋ก ๋๋ฆฌ๋ฉด 10TPS์์ 20TPS๋ก ๋์ด๋ฉ๋๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก DBMS์ ๋ฆฌ์์ค๋ ๋ค๋ฅธ ์๋น์ค์ ๊ณต์ ํด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ ๋ฌด์กฐ๊ฑด ์ปค๋ฅ์
์๋ฅผ ๋๋ฆด ์๋ ์์ต๋๋ค.
(DBMS๋ ์์ฉ ๊ฐ๋ฅํ ์ปค๋ฅ์
์ด ์ค์ ๊ฐ์ผ๋ก ์ ํด์ ธ์์ต๋๋ค.)
๋ฐ๋ผ์ ์ปค๋ฅ์
ํ์ ์ปค๋ฅ์
์๋ฅผ ๋ฌด์กฐ๊ฑด ๋๋ฆฌ๋๊ฒ๋ณด๋ค ์์ ์ ์์์์ ์ค์ ๋ถํ๋ฅผ ์ธก์ ํด์ ์ต์ ์ ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋๊ธฐ ์๊ฐ(wait) ๊ฐ์ ์ ์กฐ์ ํ๋๊ฒ์ด ์ปค๋ฅ์
๊ฐ์๋ฅผ ๋ฌดํํ ๋๋ฆฌ์ง์๊ณ ์ต์ ์ ์์คํ
ํ๊ฒฝ์ ๊ตฌ์ถํ๋๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
maxWait ๊ฐ์ ์ด๋ป๊ฒ ์ค์ ํ๋์ง๊ฐ ์ผ์์ ์ธ ๊ณผ๋ถํ ์ํ์์ ๋๋ฌ๋๋ ์์คํ
์ ์ ์ฒด์ ์ธ ๊ฒฌ๊ณ ํจ์ ๊ฒฐ์ ์ง์ต๋๋ค.
์ ๋นํ ์ค์ ๊ฐ์ ์ฐพ๊ธฐ์ํด์๋ Commons DBCP์ธ์ Tomcat์ ๋์ ๋ฐฉ์์ ๊ณ ๋ คํด์ผํฉ๋๋ค.
Tomcat์ ์ค๋ ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ํด์ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
Commons DBCP๊ฐ ์ค๋ ๋ ํ์ ๊ฐ์ง๊ณ ์๋๊ฒ์ฒ๋ผ Tomcat๋ ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ํ(wait set)์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์์์ ์ฒ๋ผ 5๊ฐ์ ์ปค๋ฅ์
์ด ์ฌ์ฉ์ค์ด๊ณ 6๋ฒ์งธ ์์ฒญ์ด ์์ ๋ maxWait๋งํผ ๊ธฐ๋ค๋ฆฌ๋ ์ฃผ์ฒด๋ Tomcat์ ์ค๋ ๋์
๋๋ค.
maxWait = 10000 ์ผ๋ก ์ค์ ํ๋ฉด 10์ด๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ฆ, ์ฒ๋ฆฌ๋์ ๋์ด์๋ฉด ์ค๋ ๋๊ฐ ๋ค์ ์ปค๋ฅ์
์ ์์ฒญํ๊ธฐ๊น์ง 10์ด๋์ ๋๊ธฐํ๋ ๊ฒ์
๋๋ค.
๊ณ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๊ฒฐ๊ตญ Tomcat์ ์ค๋ ๋ ํ์ ์กด์ฌํ๋ ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ Tomcat์ ์ค๋ ๋๊ฐ ์์์ ์๋ฆฌ๋ ์ค๋ฅ๋ฅผ ์ถ๋ ฅํ๋ฉฐ ๋ฉ์ถฅ๋๋ค.
์ฌ๊ฐ: All threads (512) are currently busy, waiting. Increase maxThreads (512) or check the servlet status
10์ด๊ฐ ์ง๋์ ์ปค๋ฅ์
์ ํ๋ํ๊ณ ์์
์ ์๋ฃํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ์๋ต์ ๋ณด๋ด๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ด๋ฏธ ๋ ๋ ํ์
๋๋ค.(๋๋ถ๋ถ์ ์ฌ์ฉ์๋ 2~3์ด๋ด์ ์๋ต์ด ์์ผ๋ฉด ์์ฒญ ํ์ด์ง๋ฅผ ๋ ๋ฉ๋๋ค.)
์ฆ, ์ฌ์ฉ์๊ฐ ์ธ๋ดํ ์ ์๋ ์๊ฐ์ ๋๋ maxWait๊ฐ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ฐ๋๋ก maxWait๊ฐ์ด ๋๋ฌด ์์ผ๋ฉด ์ปค๋ฅ์ ์ด ์์ผ๋ฉด ์์ฃผ ์ปค๋ฅ์ ์ ์์ฒญํ๊ฒ ๋ ๊ฒ์ด๊ณ ์ฌ์ฉ์๋ ์ค๋ฅ๋ฉ์ธ์ง๋ฅผ ์์ฃผ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ maxWait๋ ์ฌ์ฉ์์ ๋๊ธฐ ๊ฐ๋ฅํ ์๊ฐ, ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ฑ๊ณผ ์ฃผ๋ณ์ ๋ค๋ฅธ ์ค์ , ์์์ ์ํฉ๋ฑ์ ๊ณ ๋ คํด์ ๊ฐ์ ์ ํด์ผํฉ๋๋ค.
๋ง์ฝ ์ฌ์ฉ์๊ฐ ๊ธ์ฆํด์ maxWait์์ ์ปค๋ฅ์
์ ์ป์ง ๋ชปํ๋ ๋น๋๊ฐ ์ฆ๊ฐํ๋ค๋ฉด maxWait๊ฐ์ ์ค์ฌ์ ์์คํ
์์ ์ฌ์ฉํ๋ ์ค๋ ๋ ๊ฐ์๊ฐ ํ๊ณ์ ๋๋ฌํ์ง ์๋๋ก ๋ฐฉ์ดํ ์ ์์ต๋๋ค.
(maxWait๋ฅผ ์ค์ฌ์ ์คํจํ ์ค๋ ๋๋ ๋น ๋ฅด๊ฒ ๋ฐํํ๋๋ก ์ ๋ํ์ฌ ์ค๋ ๋ ์ํ์ด ๋น ๋ฅด๊ฒ ๋๋๋ก ํจ)
์์ ๊ฐ์ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค๋ฉด Commons DBCP์ ์ปค๋ฅ์ ํ maxActive๊ฐ๊ณผ Tomcat์ ์ค๋ ๋ ํ์ ์ค๋ ๋ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒ์ ๊ณ ๋ คํด์ผํฉ๋๋ค.
์์คํ ์์์ด ํ๋๋ฅผ ๋์ด์ฐ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ํ์ถฉ(์ค์ผ์ผ ์ or ์ค์ผ์ผ ์์)์ ํด์ผํฉ๋๋ค.
DBMS์ ์ปค๋ฅ์ ์ต๋ ๊ฐ์ ์ค์ ๋ณด๋๋ฒ
show variables like '%max_connection%';
DBMS์์ ์ฌ์ฉ๋๋ ๋์ ์ต๋ ์ปค๋ฅ์ ์ซ์
show status like '%max_used_connections%';
DBMS์์ ์์ฉ ๊ฐ๋ฅํ ์ต๋ ์ปค๋ฅ์ ์๋ฅผ ์ค์ ํ๋ ๋ฒ (๋๋ถ๋ถ default๋ก 151์ด ์ค์ ๋จ)
set global max_connections = 500;
์ฌ์ ์ ์๋ฏธ : ์์ธ, ์ด๋ค๊ฒ์ ๋ค์ ธ์ ์ฐพ์๋
๋ฐ์ดํฐ ๋ฒ ์ด์ค์์์ ์ธ๋ฑ์ค : ๋์ฉ๋ ๋ฐ์ดํฐ ์กฐํ(READ)์ ์ฑ๋ฅ์ ํฅ์์์ผ์ฃผ๋ ๊ฐ์ฒด
R(select)์์ ์ฑ๋ฅํฅ์ ๋ฐ๋ฉด์ CUD(insert,update,delete)์์ ์ฑ๋ฅ ํฌ์
- ์ธ๋ฑ์ค๋ ํ๋์ ๊ฐ์ฒด๋ก ์ถ๊ฐ ์ ์ฅ๊ณต๊ฐ์ด ํ์(์ ์ฅ๋ ๋ฐ์ดํฐ์ 10% ์ ๋๊ฐ ํ์)
- InnoDB (MySQL)๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ๋จ์๋ฅผ ํ์ด์ง๋ผ๊ณ ํจ
- ์ธ๋ฑ์ค ์ญ์ ํ์ด์ง ๋จ์๋ก ๊ด๋ฆฌ
- MySQL 5.5 - ํ์ด์ง๋ 16KB ๋ก ํฌ๊ธฐ๊ฐ ๊ณ ์
- MySQL 5.6 - ์ค์ ์ต์ ์๋ฐ๋ผ ํ์ด์ง ํฌ๊ธฐ ์ ์ด๊ฐ๋ฅ 4KB, 8KB, 16KB (innodb_page_size ์ค์ )
- MYSQL 5.7์ดํ - 32KB, 64KBํฌ๊ธฐ๋ฅผ ์ง์(32KB, 64KB๋ FOW_FORMAT= COMPRESSED ์ง์ํ์ง์์)
- ์ธ๋ฑ์ค๋ก ์ง์ ํ ์ปฌ๋ผ์ ํฌ๊ธฐ(์ฉ๋) ex. varchar(20)๊ณผ varchar(255)๋ varchar(255)์ ์ธ๋ฑ์ค ํค์ ํฌ๊ธฐ๊ฐ ํฌ๋ค ๋ผ๊ณ ํจ
- ์ธ๋ฑ์ค ํค์๋ ์ ํ ์ฉ๋์ด ์์. 767byte / mariadb 10.5 dump 10.1๋ฒ์ ์ ๋ณต๊ตฌํ๋๊น ์ธ๋ฑ์ค ํค ์ฉ๋๋๋ฌธ์ ๋ณต๊ตฌ๊ฐ ์๋๋คํจ
- varchar(255)๋ฅผ ์ด๊ณผํ๋ฉด ์์ ์ฉ๋์ ์ด๊ณผํ ์ ์์
- ํ์ด์ง๊ฐ 16KB์ผ ๋ ์ธ๋ฑ์ค ํค๊ฐ 50byte๋ผ๋ฉด (์ธ๋ฑ์ค ํค ์ธ์ ๋ค๋ฅธ ์ฉ๋๋ ๊ณ ๋ คํด์ผํ์ง๋ง ์ฌ๊ธฐ์ ์ ์ธ)
16*1024 / 50
ํ๋์ ํ์ด์ง์ ์ฝ 327๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์. - ์ธ๋ฑ์ค ํค๊ฐ 100byte๋ผ๋ฉด?
ํ๋์ ํ์ด์ง์ ์ฝ 164๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์.
โ 300๊ฐ์ ๋ฐ์ดํฐ row๋ฅผ ์ฝ์ ๋ 50byte๋ผ๋ฉด 1๊ฐ์ ํ์ด์ง๋ง ์ฝ์ด๋๋์ง๋ง 100byte๋ฉด 2๊ฐ์ ํ์ด์ง๋ฅผ ์ฝ์ด์ผํจ
โ ์ธ๋ฑ์ค ํค๋ ์ฑ๋ฅ์ ์ํฅ์ด ์๋ค.
- ํ ์ด๋ธ๋น 1๊ฐ๋ง ์กด์ฌ
- PK์ ์ฝ์กฐ๊ฑด์ผ๋ก ์ปฌ๋ผ์ ์์ฑํ๋ฉด ์๋ ์์ฑ(PK๊ฐ ์์ ๋ Unique ์ปฌ๋ผ์ ์์ฑํ๋ฉด Clustered Index ์๋ ์์ฑ)
- Unique ์ปฌ๋ผ์ ๋จผ์ ์์ฑํ๊ณ ์ดํ์ PK ์ปฌ๋ผ์ ์๋ก ์์ฑํ๋ฉด PK์ปฌ๋ผ์ Clustered Index ์์ฑ๋๊ณ Unique ์ปฌ๋ผ์ Non-Clustered Index๋ก ๋ณ๊ฒฝ๋จ)
- 48kb ํ๋ ์ปฌ๋ผ โ ๋ณ ๊ธฐ๋ฅ์์ด์ PK ๋ง๋ค์ด์ฃผ๋๊ฒ ์ข์
- ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ ํ์ด์ง๊ฐ ํจ๊ป ์กด์ฌ
- ๋ฆฌํ ํ์ด์ง == ๋ฐ์ดํฐ ํ์ด์ง(BTree)
- ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ์ฌ์ผ ํ๋ค.
- CUD(์ถ๊ฐ, ์์ ,์ญ์ )์์ ๋ฐ์ดํฐํ์ด์ง๋ฅผ ์ ๋ ฌ์์ผ์ผํจ ์ ๋ ฌ๋ ์ํ
- ๋ค์๊ฐ ์กด์ฌ ํ ์ ์์
- Unique ์ ์ฝ์กฐ๊ฑด์ผ๋ก ์ปฌ๋ผ์ ์์ฑํ๋ฉด Non-Clustered Index๊ฐ ์๋ ์์ฑ
- ์ธ๋ฑ์ค์ ๋ฐ์ดํฐํ์ด์ง๊ฐ ์กด์ฌํ์ง ์์
- ์ต์ข ์ ์ผ๋ก ๋ฐ์ดํฐํ์ด์ง์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด
- CUD(์ถ๊ฐ, ์์ ,์ญ์ )์์ ๋ฐ์ดํฐํ์ด์ง๋ฅผ ์ ๋ ฌํ์ง ์์๋๋จ โ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ง ์์๋ ๋๋ค.
- ๋ฐ์ดํฐ ํ์ด์ง๋ฅผ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ Clustered Index์ ๋น๊ตํด์ ์กฐํ ์๋๊ฐ ์กฐ๊ธ ๋จ์ด์ง(Clustered Index์ ๋น๊ตํด์ ๋จ์ด์ง๋๊ฒ์ด ๋๋ฆฐ๊ฒ์ด ์๋)
- ๋ฐ์ดํฐ ํ์ด์ง ์ ๋ ฌ์ด ํ์์์ผ๋ฏ๋ก CUD ์ฑ๋ฅ์ด Clustered Index์ ๋น๊ต์ ๋ถํ๊ฐ ์ ์
์ธ๋ฑ์ค์ ํจ์จ์ฑ์ ํ๋จํ ์ ์๋ ์์น ์ค ํ๋
์ฌ์ ์ ์๋ฏธ: ์งํฉ์ ํฌ๊ธฐ ๋๋ ๋๋, ์งํฉ์ ์์ ๊ฐ์์ ๋ํ ์ฒ๋
https://ko.wikipedia.org/wiki/์งํฉ์_ํฌ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํด๋น ์ปฌ๋ผ์ ์ค๋ณต๋ ์์น๋ฅผ ์๋ฏธ
์ข ๋ ์ฝ๊ฒ ์ดํดํ๋ ค๋ฉด ์นด๋๋๋ฆฌํฐ๋ '์ปฌ๋ผ ๋ด๋ถ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์' ๋ผ๊ณ ํ ์ ์๋ค.
ex. ์ฐํ, ์ฐํ, ์ง์ฐ๊ฐ, ๋ณผํ, ํ๊ดํ, ํ๊ดํ, ํ๊ดํ ์ด๋ ๊ฒ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ ๋ํฌํ ๊ฐ์ [์ฐํ, ์ง์ฐ๊ฐ, ๋ณผํ, ํ๊ดํ] 4๊ฐ๋ค
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค == '์ค๋ณต๋๊ฐ ๋ฎ๋ค'
- ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ, ์ฐํธ๋ฒํธ, ์ฃผ์, ์ ํ๋ฒํธ ๋ฑ๋ฑ์ ์ค๋ณต๋๊ฐ ๋ฎ์ผ๋ฏ๋ก ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค.
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๋ค == '์ค๋ณต๋๊ฐ ๋๋ค'
- ์ฑ๋ณ, ๊ตญ๊ฐ ์ ๊ฒฝ์ฐ ์ค๋ณต๋๊ฐ ๋์ผ๋ฏ๋ก ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๋ค.
- ์ฑ๋ณ์ ๊ฒฝ์ฐ ๋จ,์ฌ ๋ง ์กด์ฌํ๊ธฐ๋๋ฌธ์ 50%์ ๋ฐ์ดํฐ๋ง ํํฐ๋ง โ ๋๋จธ์ง 50%์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฐพ์์ผํจ
- ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง โ ๋น ๋ฅธ ๊ฒ์ ๊ฐ๋ฅ
- HashTable
- B-Tree
- B+Tree
HashTable
- ์ฐ๋ฆฌ๊ฐ ํํ ์๋ HashTable์
- ๋จ์ผ ์กฐํ์ ํนํ๋จ (where name = xxx) O(1)
- ๋ฒ์ ๊ฒ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ (where age > 10)
B-Tree
- ๋ฐ์ดํฐ๊ฐ ํญ์ ์ ๋ ฌ๋ ์ํ
- ๊ฐ์ฅ ์๋จ์ '๋ฃจํธ ๋ ธ๋'
- ์ค๊ฐ ๋ ธ๋๋ฅผ '๋ธ๋์น ๋ ธ๋'
- ๋ง์ง๋ง ๋ ธ๋๋ฅผ '๋ฆฌํ ๋ ธ๋'
- ๊ฐ์ ๋์ด๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์กฐํํด๋ ๋น์ทํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋๊ฒ ํน์ง = ๊ท ์ผ์ฑ
- ๋ธ๋์น ๋ ธ๋์์๋ 'ํค-๊ฐ'์ ํํ๋ก ์์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ค. โ ํค-๊ฐ์ ๊ฐ์ง๋ ๋งํผ ์ฉ๋์ ๋ ํฌ๋ฏ๋ก ๋ฐ์ดํฐ์ ์ซ์๊ฐ ์ค์ด๋ฌ โ ํธ๋ฆฌ์ ๋์ด๋ ๋ ํฌ๋ค
B+Tree
- B-Tree์ ๊ตฌ์กฐ๋ ๋๊ฐ์
- ๋จ ์ค๊ฐ ๋ ธ๋(๋ธ๋์น ๋ ธ๋)์์ 'ํค-๊ฐ'์ ๊ฐ์ง๋๊ฒ ์๋๋ผ ํค๋ง ๊ฐ์ง๊ณ ์์
- ์ค๊ฐ ๋ ธ๋๋ ํค๋ง์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ํค-๊ฐ์ ๊ฐ์ง๋๊ฒ๋ณด๋ค ํ๋์ ๋ฐ์ดํฐ๊ฐ ์ฐจ์งํ๋ ์ฉ๋์ด ์์ โ ๋ ๋ง์ ํค๋ฅผ ๊ฐ์ง โ ํธ๋ฆฌ์ ๋์ด๊ฐ ๋ฎ์์ง
- ๋ฆฌํ ๋ ธ๋์์๋ง ํค-๊ฐ์ ๊ฐ์ง
- ๊ฐ์ ๋ ๋ฒจ์ ๋ ธ๋๋ผ๋ฆฌ๋ Doubly-LinkedList๋ก ์ฐ๊ฒฐ๋จ
- ์์ ๋ ธ๋์๋ Singly-LinkedList๋ก ์ฐ๊ฒฐ๋จ
- ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๋ณด์ฅํด์ค๋๋ค. (์์ ์ ์์ ์ฑ์ ๋ณด์ฅ)
- ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ์ ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌ or ํ๋๋ผ๋ ์ฒ๋ฆฌํ์ง ๋ชปํ ๊ฒฝ์ฐ ์์ํ๋ก ๋ณต๊ตฌํด์ ์์ ์ ์ผ๋ถ๋ง ๋ฐ์๋์ง ์๋๋ก ํ๋ ๊ธฐ๋ฅ
- ์ ๊ธ(Lock)์ ๋์์ฑ์ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ฅ (๋์์ฑ์ ๋ณด์ฅํด์ผํ๋ ๊ฒฝ์ฐ Lock์ ํ์ฉํด์ ๋ค๋ฅธ ์์ ์ ๋ง์)
- MyISAM, MEMORY -> ํธ๋์ญ์
์ ์ง์ํ์ง ์์
- ํธ๋์ญ์
์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ
์ด๋ธ์ด ๋ถ๋ถ ์
๋ฐ์ดํธ ๋๋ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.)
- ex. ์ํ ์ฃผ๋ฌธ ์ ์ํ ์ฃผ๋ฌธ์ ๋ํ ๋ ์ฝ๋ ์ถ๊ฐ์, ์ํ ๊ฐ์ ์์ ์ด ๋ฐ์ํด์ผํ๋๋ฐ ์ํ ์ฃผ๋ฌธ ์ถ๊ฐ๋ ์ฑ๊ณต์ ์ผ๋ก ํ์ง๋ง ์ผํ ๊ฐ์ ์์ ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ํ ์ฃผ๋ฌธ์ ์ด๋ค์ก์ง๋ง ๊ฐ์๊ฐ ์ค์ด๋ค์ง ์์์ผ๋ฏ๋ก ์ด๋ฐ ์ํฉ์ ๋ถ๋ถ ์ ๋ฐ์ดํธ๊ฐ ์ผ์ด๋ฌ๋ค๊ณ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ง์ถ๋๊ฒ ์๋นํ ์ด๋ ต์ต๋๋ค.
- ํธ๋์ญ์
์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ
์ด๋ธ์ด ๋ถ๋ถ ์
๋ฐ์ดํธ ๋๋ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.)
- InnoDB -> ํธ๋์ญ์
์ ์ง์
- ํ๋์ ํธ๋์ญ์
์ 1๊ฐ ์ด์์ ์ฟผ๋ฆฌ๋ ๋
ผ๋ฆฌ์ ์ธ ์์
์
ํ๋๋ก 100% ์๋ฃ ๋๊ฑฐ๋ or ๋
ผ๋ฆฌ์ ์ธ ์์
์
๋ด๋ถ์์ ์ฟผ๋ฆฌ ํ๋๋ผ๋ ์๋ฃ๋์ง ๋ชปํ๋ฉด ์ด๋ค๊ฒ๋ ์ ์ฉํ์ง ์๋๊ฒ์
๋๋ค.
- 100% ์๋ฃ๋ผ์ ์์ ์ ์ ์ฉ์ํด (commit)
- ์ฟผ๋ฆฌ ํ๋๋ผ๋ ์คํจํด์ ์ด๋ค ์ฟผ๋ฆฌ๋ ์ ์ฉํ์ง ์์ (roll back)
- ํ๋์ ํธ๋์ญ์
์ 1๊ฐ ์ด์์ ์ฟผ๋ฆฌ๋ ๋
ผ๋ฆฌ์ ์ธ ์์
์
ํ๋๋ก 100% ์๋ฃ ๋๊ฑฐ๋ or ๋
ผ๋ฆฌ์ ์ธ ์์
์
๋ด๋ถ์์ ์ฟผ๋ฆฌ ํ๋๋ผ๋ ์๋ฃ๋์ง ๋ชปํ๋ฉด ์ด๋ค๊ฒ๋ ์ ์ฉํ์ง ์๋๊ฒ์
๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์์ ํธ๋์ญ์ ์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์
- ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ DB ์ปค๋ฅ์ ์ ๊ฐ์ง๋ ๋ฒ์์ ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ต์ํ ํด์ผํฉ๋๋ค.
- 1~2์ค์ ๊ฐ๋จํ ์ฝ๋๋ผ๋ ๋คํธ์ํฌ ์์ ์ด๋ผ๋ฉด ํธ๋์ญ์ ์์ ์ ์ธ์์ผ์ผํฉ๋๋ค.
- DBMS ์๋ฒ๊ฐ ๋์ ๋ถํ์ํ or ์ํํ ์ํ์ ๋น ์ง๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- MySQL ์์ง ๋ ๋ฒจ ์ ๊ธ
- MySQL ์๋ฒ์์
A(Atomicity), ์์์ฑ : Commit or Rollback. ๋ชจ๋ ์ ์ฉ๋๊ฑฐ๋, ๋ชจ๋ ์ ์ฉ๋์ง ์๊ฑฐ๋ C(Consistency), ์ผ๊ด์ฑ : ํธ๋์ญ์ ์์๊ณผ ๋ ์ ํ๋ก ๋ฐ์ดํฐ๋ ์ผ๊ด์ ์ด์ด์ผ ํ๋ค. (ํธ๋์ญ์ ์ค๊ฐ์ DataType, ๋๋ ์ ์ฝ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋๋ฉด ์๋๋ค.) I(Isolation), ๊ณ ๋ฆฝ์ฑ : ํธ๋์ญ์ ์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ฐฉํด๋ฐ์ง ์์์ผ ํ๋ค. D(Durability), ์ง์์ฑ : Commit๋ ๋ฐ์ดํฐ๋ ์์คํ ์ ์ง์์ ์ผ๋ก ์ ์ฅ๋์ด ์์ด์ผํ๋ค.
- MySQL ์์ง๋ ๋ฒจ์ ์ ๊ธ
- MySQL ์์ง์ด๋? MySQL ์๋ฒ์์ ์คํ ๋ฆฌ์ง ์์ง ๋ถ๋ถ์ ์ ์ธํ ๋๋จธ์ง ๋ถ๋ถ์ ์๋ฏธ
- ๋ชจ๋ ์คํ ๋ฆฌ์ง ์์ง์ ์ํฅ์ ๋ฏธ์นจ
- ์คํ ๋ฆฌ์ง ์์ง ๋ ๋ฒจ ์ ๊ธ
- ์คํ ๋ฆฌ์ง ์์ง ๊ฐ์ ์ํธ ์ํฅ์ด ์์ต๋๋ค.
- 'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ผ๋ก๋ง ํ๋์ด ๊ฐ๋ฅ
- MySQL ์๋ฒ ์ ์ฒด์ ์ํฅ์ ์ค (๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฌ๋ผ๋ ๋์ผํ๊ฒ ์ํฅ์ ์ค)
- MySQL์์ ์ ๊ณตํ๋ ๋ฝ ์ค์ ๊ฐ์ฅ ๋ฒ์๊ฐ ํผ
- ํ ์ธ์ ์์ ๊ธ๋ก๋ฒ ๋ฝ์ ํ๋ํ๋ฉด ๋ค๋ฅธ ์ธ์ ์์ SELECT๋ฌธ์ ์ ์ธํ ๋๋ถ๋ถ์ DDL๋ฌธ์ด๋ DML๋ฌธ์ ์คํํ๋ ๊ฒฝ์ฐ ๊ธ๋ก๋ฒ ๋ฝ์ด ํด์ ๋ ๋ ๊น์ง ๋๊ธฐ์ํ๋ก ๋จ์ต๋๋ค.
- ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ MyISAM์ด๋ MEMORY ํ ์ด๋ธ์ ๋ํด์ mysqldump๋ก ์ผ๊ด๋ ๋ฐฑ์ ์ ๋ฐ์์ผํ ๋ ๊ธ๋ก๋ฒ ๋ฝ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ ์คํ๊ณผ ๋์์ MySQL ์๋ฒ์ ์กด์ฌํ๋ ๋ชจ๋ ํ ์ด๋ธ์ ์ ๊ธ์ ๊ฒ๋๋ค.
์ด๋ฏธ ํ ์ด๋ธ์ด๋ ๋ ์ฝ๋์ ์ฐ๊ธฐ ์ ๊ธ์ ๊ฑธ๊ณ ์๋ SQL์ด ์คํ๋๊ณ ์์๋ค๋ฉด, 'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ ํด๋น ํ ์ด๋ธ์ ์ฝ๊ธฐ ์ ๊ธ์ ๊ฑธ๊ธฐ ์ํด SQL์ด ์๋ฃ๋๊ณ ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ ํ ์ด๋ธ์ ์ฝ๊ธฐ ์ ๊ธ๋ง ๊ฑธ๊ธฐ ์ ์ ๋จผ์ ํ ์ด๋ธ์ ํ๋ฌ์(flush)ํด์ผํ๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ์ ์คํ๋๊ณ ์๋ ๋ชจ๋ ์ข ๋ฅ์ ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋์ผ๋ง ํ ์ด๋ธ์ ํ๋ฌ์ํ๊ณ ์ ๊ธ์ ๊ฑธ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฅ์๊ฐ ์คํ๋๋ SELECT ์ฟผ๋ฆฌ๊ฐ ์คํ์ค์ด๋ผ๋ฉด 'FLUSH TABLES WITH READ LOCK'๋ช ๋ น์ด๋ ํด๋น SELECT ์ฟผ๋ฆฌ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผํฉ๋๋ค.
์ฅ์๊ฐ ์คํ๋๋ SELECT ์ฟผ๋ฆฌ์ 'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ด๊ฐ ์ต์ ์ ์ผ์ด์ค๋ก ์คํ๋๋ฉด ๋ชจ๋ ํ ์ด๋ธ์ ๋ํ INSERT, UPDATE, DELETE๊ฐ ์ฅ์๊ฐ ์คํ๋์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ ค์ผํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์น์๋น์ค์ฉ์ผ๋ก ์ฌ์ฉ๋๋ MySQL ์๋ฒ์๋ ๊ฐ๊ธ์ 'FLUSH TABLES WITH READ LOCK'๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
mysqldump ๊ฐ์ ๋ฐฑ์ ํ๋ก๊ทธ๋จ์ 'FLUSH TABLES WITH READ LOCK' ๋ช ๋ น์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ๋ฐฑ์ ํ ๋๋ ์์ผ๋ฏ๋ก mysqldump์์ ์ฌ์ฉํ๋ ๋ช ๋ น์ ๋ฐ๋ผ ์ด๋ค ์ ๊ธ์ ๊ฑฐ๋์ง ์์๋ด์ผํฉ๋๋ค.
- ๊ฐ๋ณ ํ ์ด๋ธ ๋จ์๋ก ์ค์ ๋๋ ์ ๊ธ์ด๋ฉฐ, ๋ช ์์ ๋๋ ๋ฌต์์ ์ผ๋ก ํน์ ํ ์ด๋ธ์ ๋ฝ์ ํ๋ํ ์ ์์ต๋๋ค.
- ๋ช ์์ ํ ์ด๋ธ ๋ฝ ํ๋ : LOCK TABLES table_name [READ | WRITE] ๋ช ๋ น
- ๋ช ์์ ํ ์ด๋ธ ๋ฝ์ ํด์ (๋ฐ๋ฉ) : UNLOCK TABLES
- ๋ช ์์ ํ ์ด๋ธ ๋ฝ๋ ํน๋ณํ ์ํฉ์ด ์๋๋ฉด ๊ฑฐ์ ์ธ ์ผ์ด ์์ -> ๊ธ๋ก๋ฒ ๋ฝ ์ฒ๋ผ ์น ์๋น์ค์ ์๋นํ ์ํฅ์ ๋ฏธ์นจ
- ๋ฌต์์ ํ
์ด๋ธ ๋ฝ
- MyISAM์ด๋ MEMORY ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ฌต์์ ์ธ ํ
์ด๋ธ ๋ฝ์ด ์ค์ ๋ฉ๋๋ค.
- MySQL์๋ฒ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ํ ์ด๋ธ์ ์ ๊ธํ๊ณ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ, ์ฆ์ ์ ๊ธ์ ํด์ ํ๋ ํํ๋ก ์ฌ์ฉ
- InnoDB ํ
์ด๋ธ์ ๊ฒฝ์ฐ ์คํ ๋ฆฌ์ง ์์ง ์ฐจ์์์ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ธ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋จ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฟผ๋ฆฌ๋ก ์ธํด ๋ฌต์์ ์ธ ํ
์ด๋ธ ๋ฝ์ด ์ค์ ๋์ง ์์ต๋๋ค.
- ์ ํํ๋ InnoDB ํ
์ด๋ธ์๋ ํ
์ด๋ธ ๋ฝ์ด ์ค์ ์ ๋์ง๋ง
- ๋๋ถ๋ถ์ ํ ์ด๋ธ ๋ณ๊ฒฝ DML ์ฟผ๋ฆฌ์์๋ ๋ฌด์๋๊ณ
- ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ DDL ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ์ ํํ๋ InnoDB ํ
์ด๋ธ์๋ ํ
์ด๋ธ ๋ฝ์ด ์ค์ ์ ๋์ง๋ง
- MyISAM์ด๋ MEMORY ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ฌต์์ ์ธ ํ
์ด๋ธ ๋ฝ์ด ์ค์ ๋ฉ๋๋ค.
- GET_LOCK() ํจ์๋ฅผ ์ด์ฉํด ์์๋ก ์ ๊ธ์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ด ์ ๊ธ์ ํน์ง์ ํ ์ด๋ธ์ด๋ ๋ ์ฝ๋ ๋๋ AUTO_INCREMENT๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๊ฐ ์๋๋ผ๋ ์
- ์ ์ ๋ฝ์ ๋จ์ํ ์ฌ์ฉ์๊ฐ ์ง์ ํ ๋ฌธ์์ด(String, ์ ๊ธ์ ์ด๋ฆ์ฒ๋ผ ์ฌ์ฉ๋จ)์ ๋ํด ํ๋ํ๊ณ ๋ฐ๋ฉํ๋ ์ ๊ธ ์ ๋๋ค.
- ์ ์ ๋ฝ์ ์์ฃผ ์ฌ์ฉ๋์ง๋ ์์ต๋๋ค. ๋ถ์ฐ ๋ฝ ๊ตฌํ - ์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค 1๋๋ฅผ ์น ์๋ฒ 5๋๊ฐ ํจ๊ป ์ฌ์ฉํ ๋ 5๋์ ์น ์๋ฒ๊ฐ ์ด๋ค ์ ๋ณด๋ฅผ ๋๊ธฐํํด์ผ ํ๋ ์๊ฑด์ฒ๋ผ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ํธ ๋๊ธฐํ ์ฒ๋ฆฌํด์ผ ํ ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ์ ๋ฝ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์ ์ ๋ฝ์ ๋ง์ ๋ ์ฝ๋๋ฅผ ํ๋ฒ์ ๋ณ๊ฒฝํ๋ ํธ๋์ญ์ ์ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ฐฐ์น์ฒ๋ผ ํ๊บผ๋ฒ์ ๋ง์ ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ ๋ฐ๋๋ฝ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
- ์ด๋ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ฐธ์กฐํ๋ ํ๋ก๊ทธ๋จ๋ผ๋ฆฌ ์ ์ ๋ฝ์ ๊ฑธ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.
// "mylock"์ด๋ผ๋ ๋ฌธ์์ด์ ๋ํด ์ ๊ธ์ ํ๋ํ๋ค.
// ์ด๋ฏธ ์ ๊ธ์ด ์ฌ์ฉ ์ค์ด๋ฉด 2์ด ๋์๋ง ๋๊ธฐํ๋ค.
mysql > SELECT GET_LOCK('mylock', 2);
// "mylock"์ด๋ผ๋ ๋ฌธ์์ด์ ๋ํด ์ ๊ธ์ด ์ค์ ๋ผ ์๋์ง ํ์ธํ๋ค.
mysql > SELECT IS_FREE_LOCK('mysql');
// "mylock"์ด๋ผ๋ ๋ฌธ์์ด์ ๋ํด ํ๋ํ๋ ์ ๊ธ์ ๋ฐ๋ฉ(ํด์ )ํ๋ค.
mysql > SELECT RELEASE_LOCK('mysql');
// 3๊ฐ ํจ์ ๋ชจ๋ ์ ์์ ์ผ๋ก ๋ฝ์ ํ๋ํ๊ฑฐ๋ ํด์ ํ ๊ฒฝ์ฐ์๋ 1์, ์๋๋ฉด NULL์ด๋ 0์ ๋ฐํํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ํ๋ํ๋ ์ ๊ธ์ ๋๋ค. (ํ ์ด๋ธ์ด๋ ๋ทฐ ๋ฑ๋ฑ)
- ๋ช ์์ ์ผ๋ก ํ๋ํ๋ ๊ฒ์ด ์๋ ํ ์ด๋ธ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ์ด ์ผ์ด๋๋ฉด ์๋์ผ๋ก ํ๋ํ๋ฉด ์ ๊ธ์ ๋๋ค.
- ์ค์๊ฐ์ผ๋ก ํ ์ด๋ธ์ ๋ฐ๊ฟ์ผ ํ๋ ์๊ฑด์ด ์์ฃผ ๋ฐ์ํ๋ ๋ฐฐ์น ํ๋ก๊ทธ๋จ์์ ์ ์ฉํ๊ฒ ์ฐ์ด๊ณ ์๋ค.
์ฐธ๊ณ : MySQL์ ์ ๊ธ
- InnoDB๋ ์คํ ๋ฆฌ์ง ์์ง ๋ด๋ถ์์ ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ธ ๋ฐฉ์์ ํ์ฌ
- MySQL์์ ์ ๊ณตํ๋ ์ ๊ธ๊ด๋ ๋ณ๊ฐ
- ๋ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ธ๋ฐฉ์ ๋๋ถ์ MyISAM๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ ๋์์ฑ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณต
- ์ ๊ธ ์ ๋ณด๋ ์๋นํ ์์ ๊ณต๊ฐ์์ ๊ด๋ฆฌํจ
- ๋ ์ฝ๋๋ฝ -> ํ์ด์ง๋ฝ ๋๋ ํ ์ด๋ธ๋ฝ ์ผ๋ก ๋ ๋ฒจ์ (์์ค์ปฌ๋ ์ด์ ) ๋๋ ๊ฒฝ์ฐ๊ฐ ์์
- ๋ ์ฝ๋ ์์ฒด๋ง ์ ๊ธ
- InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ ์ฝ๋ ์์ฒด๋ฅผ ์ ๊ธ X, ์ธ๋ฑ์ค์ ๋ ์ฝ๋๋ฅผ ์ ๊ธ
- ๋ ์ฝ๋์ ๋ฐ๋ก ์ธ์ ํ ๋ ์ฝ๋ ์ฌ์ด์ ๊ฐ๊ฒฉ๋ง ์ ๊ธ
- ๋ ์ฝ๋์ ๋ ์ฝ๋ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์๋ก์ด ๋ ์ฝ๋๊ฐ ์์ฑ(Insert)๋๋ ๊ฒ์ ์ ์ดํ๋ ์ญํ
- ๋ ์ฝ๋ ๋ฝ + ๊ฐญ ๋ฝ
- ์์ค ์๋ฒ์์ ๋ง๋ ๊ฒฐ๊ณผ == ๋ ํ๋ฆฌ์นด ์๋ฒ์์ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ(statement ํฌ๋งท)์ ๊ธฐ๋ก๋๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด ์ฃผ ๋ชฉ์
- ๊ฐญ ๋ฝ + ๋ฅ์คํธ ํค ๋ฝ์ผ๋ก ์ธํด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ฑฐ๋ ๋ค๋ฅธ ํธ๋์ญ์
์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ ์ผ์ด ๋ฐ์ํจ
- ์ด๋๋ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ํฌ๋งท์ Statement ํฌ๋งท -> Row ํฌ๋งท์ผ๋ก ๋ณ๊ฒฝํด์ ๊ฐญ ๋ฝ, ๋ฅ์คํธ ํค ๋ฝ์ ์ค์ฌ์ฃผ๋๊ฒ ์ข์ต๋๋ค.
- ํ ์ด๋ธ ์์ค์ ์ ๊ธ
- ๋ช ์์ ์ผ๋ก ํ๋ํ๊ณ ํด์ ํ๋๊ฒ์ด ๋ถ๊ฐ๋ฅ
- ์์ฃผ ์งง์ ์๊ฐ๋์ ๊ฑธ๋ ธ๋ค๊ฐ ํด์ ๋๋ ์ ๊ธ -> ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์
- Auto_Increment ๊ฐ์ด ํ๋ฒ ์ฆ๊ฐํ๋ฉด ์ค์ด๋ค์ง ์๋ ์ด์ (Roll back์ด ์ผ์ด๋๋ auto_increment๋ ๊ทธ๋๋ก์ธ ์ด์ )
- ์๋ ์ฆ๊ฐ ๋ฝ์ ์ต์ํ ํ๊ธฐ ์ํจ
- INSERT ์ฟผ๋ฆฌ ์คํจ -> auto_increment ๊ฐ์ ์ด๋ฏธ ์ฆ๊ฐ -> auto_increment์ ๊ฐ์ ๊ตณ์ด ์ค์ด์ง ์๊ณ ๊ทธ๋๋ก ๋
Oracle์๋ Sequence๊ฐ ์กด์ฌ. Sequence ๊ฐ์ ๊ฒฝ์ฐ ๋ง์ฝ 50๋จ์์ ID๊ฐ ํ์ํ๋ค๋ฉด (๋ฐฐ์น Insert๋ก 50๊ฐ์ ํ์ ์ ์ฅ) 50size ๋งํผ์ ID๋ค์ ๊ฐ์ ธ์์ ์งํ InnoDB๋ ๋ด๋ถ์ ์ผ๋ก Sequence๊ฐ ์กด์ฌํ์ง ์์์ JPA์์ batch insert๋ฅผ ํ๊ฒ๋๋ฉด ๊ณ์ํด์ DB์ ์ ๊ทผํด์ ๋ค์ ์์ด๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. (50๋ง๊ฐ๋ฉด 50๋ง๋ฒ ์งํ)
- ํธ๋์ญ์ ์ด ์ด๋ค ์ ๊ธ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋์ง, ์ด๋ค ํธ๋์ญ์ ์ด ํ์ํ ์ ๊ธ์ ๊ฐ์ง๊ณ ์๋ -> ๋ฉํ ์ ๋ณด๋ฅผ ํตํด ์กฐํ ๊ฐ๋ฅ
- MySQL 5.1 ๋ถํฐ
- infomation_schema์์ INNODB_TRX, INNODB_LOCKS, INNODB_LOCK_WAITS๋ฅผ ํตํด ํ์ธ ๊ฐ๋ฅ -> Deprecated
- performance_schema์์ DATA_LOCKS, DATA_LOCK_WAITS๋ฅผ ํตํด ํ์ธ ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก ์จ๋ผ์ธ ์๋น์ค ์ฉ๋์์๋ READ COMMITED ๋๋ REPEATABLE READ๋ฅผ ์ฌ์ฉ
- RDBMS ํ์ค์์ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ์์ค์ผ๋ก ์ธ์ ํ์ง ์์ ์ ๋๋ก ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ฌธ์ ๊ฐ ๋ง์ ๊ฒฉ๋ฆฌ ์์ค
- MySQL์ ์ฌ์ฉํ๋ค๋ฉด, ์ต์ํ READ COMMITED ์ด์์ ๊ฒฉ๋ฆฌ ์์ค์ ์ฌ์ฉํด์ผํจ
- DIRTY READ
- ์ด๋ค ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ๋ ์์ ์ด ์๋ฃ๋์ง ์์๋๋ฐ, ๋ค๋ฅธ ํธ๋์ญ์ ์์ ๋ณผ ์ ์๋ ํ์
- ๋ฐ์ดํฐ๊ฐ ๋ํ๋ฌ๋ค ์ฌ๋ผ์ก๋ค ํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์ฌ์ฉ์ ๋ชจ๋ ํผ๋์ค๋ฝ๊ฒ ํฉ๋๋ค.
- Oracle์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฉ๋ฆฌ ์์ค
- ์จ๋ผ์ธ ์๋น์ค์์ ๊ฐ์ฅ ๋ง์ด ์ ํํ๋ ๊ฒฉ๋ฆฌ ์์ค
- ํธ๋์ญ์
๊ฐ์ ๊ณ ๋ฆฝ์ ์์ ํ ๋ณด์ฅํ์ง ๋ชปํด NON-REPEATABLE READ, PHANTOM READ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- NON-REPEATABLE READ
- ํ๋์ ํธ๋์ญ์ ์์ ๋๊ฐ์ SELECT ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ง๋ง, ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค์ง ์๋ ํ์
- ๊ธ์ ์ ์ธ ์ฒ๋ฆฌ์ ์ฐ๊ฒฐ๋๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
- PHANTOM READ ๊ฐ ๋ฐ์ํ ์ ์์
- ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ํํ๋ ๋ณ๊ฒฝ ์์ ์ ์ํด ๋ฐ์ดํฐ๊ฐ ๋ณด์๋ค ์๋ณด์๋ค ํ๋ ํ์
- NON-REPEATABLE READ
- MySQL์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฉ๋ฆฌ ์์ค
- MVCC (Multi Version Concurrency Control)
- ์ผ๋ฐ์ ์ผ๋ก ๋ ์ฝ๋ ๋ ๋ฒจ์ ํธ๋์ญ์ ์ ์ง์ํ๋ DBMS๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ์ ๊ธ์ ์ฌ์ฉํ์ง ์๋ ์ผ๊ด๋ ์ฝ๊ธฐ์ ์์ต๋๋ค. -> ์ด ๊ธฐ๋ฅ์ InnoDB๋ ์ธ๋(undo) ๋ก๊ทธ๋ฅผ ์ด์ฉํด ๊ตฌํํฉ๋๋ค.
- READ_COMMITED ์ด์์ ๊ฒฉ๋ฆฌ ์์ค์์๋ ์ปค๋ฐ๋๊ธฐ ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์กฐํ ์ InnoDB ๋ฒํผ ํ์ด๋ ๋ฐ์ดํฐํ์ผ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์ง ์ ์ ๋ด์ฉ์ ๋ณด๊ดํ๋ ์ธ๋ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฆ Update ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ ๋ InnoDB ๋ฒํผ ํ์ ์ฆ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ๋๋ฉฐ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ์ธ๋๋ก ๋ณต์ฌํฉ๋๋ค.
- ๋ง์ฝ update ์ฟผ๋ฆฌ๊ฐ ์ปค๋ฐ๋์ง ์๊ณ ๋กค๋ฐฑ๋๋ฉด InnoDB๋ ์ธ๋ ์์ญ์ ๋ฐฑ์ ๋ ๋ฐ์ดํฐ๋ฅผ InnoDB ๋ฒํผํ๋ก ๋ณต๊ตฌํ๊ณ ํด๋น ์ธ๋ ์์ญ์ ๋ด์ฉ์ ์ญ์ ํฉ๋๋ค.
- InnoDB์ ํธ๋์ญ์ ์ ๊ณ ์ ํ ํธ๋์ญ์ ๋ฒํธ๋ฅผ ๊ฐ์ง๋๋ค.(์์ฐจ์ ์ผ๋ก ์ฆ๊ฐ)
- ํ ์ด๋ธ๊ณผ ์ธ๋๋ก๊ทธ์ ๋ชจ๋ ๋ ์ฝ๋์๋ ๋ณ๊ฒฝ์ ๋ฐ์์ํจ ํธ๋์ญ์ ์ ๋ฒํธ๋ฅผ ํฌํจํฉ๋๋ค.
- 1๊ฐ์ ๋ ์ฝ๋์ 1๊ฐ ์ด์์ ๋ฐฑ์
๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ํธ๋์ญ์
์ ์์ํ๊ณ ์ฅ์๊ฐ ์ข
๋ฃํ์ง ์์ผ๋ฉด?
- ์ธ๋๋ก๊ทธ ํฌ๊ธฐ๊ฐ ๋ฐฑ์ ๋ฐ์ดํฐ๋ก ์ธํด ๋ฌดํ์ ์ปค์ง ์ ์์
- MySQL ์๋ฒ์ ์ฑ๋ฅ์ด ๋จ์ด์ง
- ์ฌ์ฉ์๊ฐ ํธ๋์ญ์
์ ์์ํ๊ณ ์ฅ์๊ฐ ์ข
๋ฃํ์ง ์์ผ๋ฉด?
- PHANTOM READ ๊ฐ ๋ฐ์ํ ์ ์์
- ๊ฐ์ฅ ๋จ์ํ ๊ฒฉ๋ฆฌ ์์ค + ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค
- ๋ค๋ฅธ ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค๋ณด๋ค ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๋จ์ด์ง
- ํ ํธ๋์ญ์ ์์ ์ฝ๊ธฐ or ์ฐ๊ธฐ ์์ ์ค์ธ ๋ ์ฝ๋๋ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ ๊ทผํ ์ ์๊ฒํจ


