μΈλ±μ€
λμ€ν¬ μ½κΈ° λ°©μ
β’
μ±λ₯ νλμ μ΄λ»κ² λμ€ν¬ IO λ₯Ό μ€μ΄λλκ° κ΄κ±΄
HDD, SSD
β’
DB μλ²μμλ νμ λμ€ν¬ μ₯μΉκ° λ³λͺ©
β’
HDD λ κΈ°κ³μ μ μ₯ 맀체
β’
SSD λ μ μμ μ μ₯ 맀체
β¦
κΈ°μ‘΄ HDD μμ λ°μ΄ν° μ μ₯μ© νλν°(μν) μ μ κ±°νκ³ λμ νλμ λ©λͺ¨λ¦¬ μ₯μ°©
β¦
κ·Έλμ κΈ°κ³μ μΌλ‘ νμ μν¬ νμκ° μμ΄μ 빨리 μ
μΆλ ₯ κ°λ₯
β¦
νλμ λ©λͺ¨λ¦¬λ μ μ κ³΅κΈ μμ΄λ λ°μ΄ν° μμ X
β’
μ΄λΉ μ²λ¦¬ νμ
β¦
CPU 10μ΅
β¦
DRAM 1μ΅
β¦
SSD 10λ§
β¦
HDD 200
β’
μμ°¨ IO μμλ ν° μ°¨μ΄κ° μμΌλ λλ€ IO μμ ν° μ°¨μ΄
β’
DB μμλ λλ€ IO μμ
λΉμ€μ΄ λλΆλΆ
λλ€ IO, μμ°¨ IO
β’
λμ€ν¬μ κΈ°λ‘ν΄μΌ ν μμΉλ₯Ό μ°ΎκΈ° μν΄ λλ€ IO λ N λ², μμ°¨ IO λ 1λ²
β’
MySQL μλ²λ κ·Έλ£Ή 컀λ°, λ°μ΄λ리 λ‘κ·Έ λ²νΌ, InnoDB λ‘κ·Έ λ²νΌ κΈ°λ₯ λ΄μ₯
β’
쿼리 νλμ λλ€ IO λ₯Ό μ€μ΄λ κ²μ΄ λͺ©μ
β’
λλ€ IO λ₯Ό μ€μΈλ€λ κ²μ 쿼리λ₯Ό μ²λ¦¬νλ λ°μ κΌ νμν λ°μ΄ν°λ§ μ½λλ‘ μΏΌλ¦¬λ₯Ό κ°μ νλ κ²
β’
μΈλ±μ€ λ μΈμ§ μ€μΊμ λλ€ IO, ν ν
μ΄λΈ μ€μΊμ μμ°¨ IO
B-Tree
β’
Balanced Tree
β’
컬λΌμ μλ κ°μ λ³νμν€μ§ μκ³ μΈλ±μ±
β’
μΈλ±μ€ ꡬ쑰체 λ΄μμ νμ μ λ ¬λ μνλ‘ μ μ§
β’
νΈλ¦¬ ꡬ쑰μ μ΅μμμ νλμ λ£¨νΈ λ
Έλκ° μ‘΄μ¬, κ·Έ νμμ μμ λ
Έλκ° λΆμ΄ μλ νν
β’
루νΈλ μ΅μμ, 리νλ μ΅νμ, λλ¨Έμ§λ λΈλμΉ λ
Έλ
β’
μΈλ±μ€μ μ€μ λ°μ΄ν°κ° μ μ₯λ λ°μ΄ν°λ λ°λ‘ κ΄λ¦¬λ¨
β’
μΈλ±μ€μ 리ν λ
Έλλ νμ μ€μ λ°μ΄ν° λ μ½λλ₯Ό μ°Ύμκ°κΈ° μν μ£Όμκ°
β’
InnoDB μμλ νλΌμ΄λ¨Έλ¦¬ ν€κ° μλ μΈλ±μ€λ‘ κ²μ μΒ μΈλ±μ€ -> PK μΈλ±μ€ -> λ°μ΄ν° λ μ½λΒ μμΌλ‘ κ²μλλ€.
μΈλ±μ€ λ μΈμ§ μ€μΊ
β’
κ²μν΄μΌ ν μΈλ±μ€μ λ²μκ° μμ λ μ¬μ©νλ λ°©μ
μΈλ±μ€ ν μ€μΊ
ν΄λ¬μ€ν°λ§ μΈλ±μ€
β’
ν΄λ¬μ€ν°λ§ μΈλ±μ€λ InnoDB μμλ§ μ§μλλ€.
β’
νλΌμ΄λ¨Έλ¦¬ ν€μλ§ μ μ©λ¨
β’
PK κ°μ΄ λΉμ·ν λ μ½λλΌλ¦¬ λ¬Άμ΄μ μ μ₯
β’
PK κ°μ μν΄ λ μ½λμ μ μ₯ μμΉκ° κ²°μ
β’
PK κ°μ΄ λ³κ²½λλ©΄ λ μ½λμ 물리μ μ μ₯ μμΉκΉμ§ λ°λμ΄μΌ ν¨
β’
ꡬ쑰 μ체λ μΌλ° B Tree μ λΉμ·
β’
λ€λ₯Έ μ μ 리ν λ
Έλμ λ μ½λμ λͺ¨λ μΉΌλΌμ΄ κ°μ΄ μ μ₯λμ΄ μμ
β’
PK κ° μμ κ²½μ°
1.
not null μ΅μ
μ unique index μ€ μ²« λ²μ§Έ μΈλ±μ€λ₯Ό ν΄λ¬μ€ν°λ§ ν€λ‘ μ ν
2.
1λ²λ μμΌλ©΄ μλμΌλ‘ μ λν¬ κ°μ κ°μ§λλ‘ μ¦κ°λλ 컬λΌμ λ΄λΆμ μΌλ‘ μΆκ° ν ν΄λ¬μ€ν°λ§ ν€λ‘ μ ν
β¦
μ¬μ©μμκ² λ
ΈμΆ X
β¦
쿼리 λ¬Έμ₯μ λͺ
μμ μΌλ‘ μ¬μ© λΆκ°
β¦
νν X
β¦
κ°λ₯νλ€λ©΄ PK λ₯Ό λͺ
μμ μΌλ‘ μμ±νμ
μΈμ»¨λ리 μΈλ±μ€
β’
InnoDB ν
μ΄λΈμ λͺ¨λ μΈμ»¨λ리 μΈλ±μ€λ ν΄λΉ λ μ½λκ° μ μ₯λ μ£Όμκ° μλ PK κ°μ μ μ₯νλλ‘ κ΅¬νλ¨
β’
μμ)
β¦
auto_increment PKκ° μκ³ name 컬λΌμ index κ° μ μ©λ κ²½μ°
β¦
select * from member where name='eden'Β μ΄λ©΄ name μΈλ±μ€λ₯Ό κ²μν΄μ λ μ½λμ PK κ°μ νμΈνκ³ PK μΈλ±μ€λ₯Ό κ²μν΄μ μ΅μ’
λ μ½λ κ°μ Έμ΄
ν΄λ¬μ€ν°λ§ μΈλ±μ€ μ£Όμ μ¬ν
β’
PK ν€μ ν¬κΈ°
β¦
λͺ¨λ μΈμ»¨λ리 μΈλ±μ€κ° PK λ₯Ό ν¬ν¨νκΈ°λλ¬Έ
β’
κ°λ₯νλ€λ©΄ auto-increment 보λ€λ μ
무μ μΈ μ»¬λΌμΌλ‘ μμ±
μ λν¬ μΈλ±μ€
β’
μ λν¬ μΈλ±μ€μ μΈμ»¨λ리 μΈλ±μ€λ ꡬ쑰μ μΌλ‘ μ°¨μ΄ X
β’
νλμ κ°μ κ²μνλ κ²½μ°, μ λν¬ μΈλ±μ€μ μΈμ»¨λ리 μΈλ±μ€μμ μ¬μ©λλ μ€ν κ³νμ λ€λ₯Έλ° ν¬κ² μ°¨μ΄λ μλ€.
β’
μλ‘μ΄ λ μ½λκ° insert λκ±°λ μΈλ±μ€ 컬λΌμ κ°μ΄ λ³κ²½λλ κ²½μ° μ€λ³΅λ κ°μ΄ μλμ§ μλμ§ μ²΄ν¬νλ κ³Όμ μ΄ ν λ¨κ³ λ νμν΄μ λ리λ€.
β’
μ λν¬ μΈλ±μ€μμ μ€λ³΅λ κ°μ 체ν¬ν λλ μ½κΈ° μ κΈ, μ°κΈ° ν λλ μ°κΈ° μ κΈνλ μ΄ κ³Όμ μμ λ°λλ½μ΄ μμ£Ό λ°μ
μΈλν€
β’
μΈλν€ μ μ½μ΄ μ€μ λλ©΄ μλμΌλ‘ μ°κ΄λλ ν
μ΄λΈμ 컬λΌμ μΈλ±μ€ μμ±
β’
μΈλν€ μ μ½μ΄ μ κ±°λμ§ μμΌλ©΄ μλμΌλ‘ μμ±λ μΈλ±μ€ μμ λΆκ°
λκΈ° μνμ λΉ μ§λ κ²½μ°
β’
team
id | name |
1 | morak |
2 | sokdak |
β’
member
id | team_id | name |
1 | 1 | eden |
# session 1
start transaction;
update team set name='mo-rak' where id=1;
# id = 1 μΈ λ μ½λμ μ°κΈ° λ½
# session 2
start transaction;
update member set team_id=1 where id=1;
# λκΈ°μ€
# μΈλν€ μ μ½ μ‘°κ±΄λλ¬Έμ ν΄λΉ team_id κ° μ ν¨νμ§ νμΈν΄μΌνκΈ° λλ¬Έμ μ½μΌλ¬ κ°. κ·Έλμ λκΈ°μ€
update member set team_id=2 where id=1;
# query OK
# team_id = 1 λ μ½λμλ§ κ±Έλ €μκΈ°λλ¬Έ
SQL
볡μ¬