Mysql - gksrlfw/study GitHub Wiki
Mysql
μ΅ν°λ§μ΄μ
μ¬μ©μμ 쿼리μ λν΄ μ΅μ μ μ€νλ°©λ²(μ€νκ³ν)μ κ²°μ νλ μν μ ν©λλ€.
μ΅ν°λ§μ΄μ μλ κ·μΉκΈ°λ°κ³Ό λΉμ©κΈ°λ°μ΄ μμΌλ©°, κ΄κ³ν DB μλ λΉμ©κΈ°λ° μ΅ν°λ§μ΄μ λ₯Ό μ 곡ν©λλ€.
λΉμ©κΈ°λ° μ΅ν°λ§μ΄μ
쿼리λ₯Ό μ²λ¦¬νλλ° νμν κ°μ₯ μ μ λΉμ©μ΄ λλ μ€νκ³νμ μ ννλ λ°©μμΌλ‘, λΉμ©μ μμ μμμκ° νΉμ μμ μ¬μ©λμ μλ―Έν©λλ€. μ΄λ₯Ό μμΈ‘νκΈ° μν΄ ν μ΄λΈ, μΈλ±μ€, μΉΌλΌ λ±μ κ°μ²΄ ν΅κ³μ 보μ μμ€ν ν΅κ³μ 보λ₯Ό μ΄μ©νλ©°, ν΅κ³μ λ³΄κ° μλ κ²½μ°μλ μ νν λΉμ© μμΈ‘μ΄ λΆκ°λ₯ν΄μ Έμ λΉν¨μ¨μ μΈ μ€νκ³νμ μμ±ν μ μμ΅λλ€.
λμκ³νμμ±κΈ°μμ μ μ©μμλ³κ²½, μ°μ°λ°©λ²λ³κ²½, μ‘°μΈμμλ³κ²½ λ±μΌλ‘ λ€μν λμ κ³νμ μμ±νμ¬ μ΅μ μ λ°©μμ μ°ΎμΌλ©°, μ΄μ λν λΉμ©μ μμΈ‘νλ λͺ¨λλ μ‘΄μ¬ν©λλ€.
λμκ³νμ μ νν λΉμ©μ μμΈ‘νκΈ° μν΄μ μ°μ°μ μ€κ° μ§ν©μ ν¬κΈ° λ° κ²°κ³Ό μ§ν©μ ν¬κΈ°, λΆν¬λ λ±μ μμΈ‘μ΄ μ νν΄μΌ νλ―λ‘, λ³΄λ€ λμ μμΈ‘μ μν΄ μ΅ν°λ§μ΄μ λ μ νν ν΅κ³μ 보λ₯Ό νμλ‘ ν©λλ€. λν λμ κ³νμ ꡬμ±νλ κ° μ°μ°μ λν λΉμ© κ³μ°μμ΄ μ νν΄μΌ ν©λλ€.
κ·μΉκΈ°λ° μ΅ν°λ§μ΄μ λ μΈλ±μ€λ₯Ό μ¬μ©ν μ μλ€λ©΄ νμ ν ν μ΄λΈ μ€μΊ 보λ€λ μΈλ±μ€λ₯Ό μ¬μ©νλ μ€νκ³νμ μμ±νμ§λ§, λΉμ©κΈ°λ° μ΅ν°λ§μ΄μ λ μΈλ±μ€λ₯Ό μ¬μ©νλ λΉμ©μ΄ ν ν μ΄λΈ μ€μΊ λΉμ©λ³΄λ€ ν¬λ€κ³ νλ¨λλ©΄ μ 체 ν μ΄λΈ μ€μΊμ μννλ λ°©λ²μΌλ‘ μ€νκ³νμ μμ±ν μλ μμ΅λλ€.
λΉμ©κΈ°λ° μ΅ν°λ§μ΄μ λ ν΅κ³μ 보, DBMS λ²μ , DBMS μ€μ μ 보 λ±μ μ°¨μ΄λ‘ μΈν΄ λμΌ SQL λ¬Έλ μλ‘ λ€λ₯Έ μ€νκ³νμ΄ μμ±λ μ μκ³ , λΉμ©κΈ°λ° μ΅ν°λ§μ΄μ μ λ€μν νκ³λ€λ‘ μΈν΄ μ€νκ³νμ μμΈ‘ λ° μ μ΄κ° μ΄λ ΅λ€λ λ¨μ μ΄ μμ΅λλ€.
table full scan μΈ κ²½μ°
- SQL λ¬Έμ μ‘°κ±΄μ΄ μ‘΄μ¬νμ§ μλ κ²½μ°
SQL λ¬Έμ μ‘°κ±΄μ΄ μ‘΄μ¬νμ§ μλλ€λ κ²μ ν μ΄λΈμ λͺ¨λ λΈλ‘μ μ½μΌλ©΄μ 무쑰건 κ²°κ³Όλ₯Ό λ°νν©λλ€.
- SQL λ¬Έμ μ£Όμ΄μ§ 쑰건μ μ¬μ© κ°λ₯ν μΈλ±μ€κ° μ‘΄μ¬νλ μλ κ²½μ°
μ¬μ© κ°λ₯ν μΈλ±μ€κ° μ‘΄μ¬νμ§ μλλ€λ©΄ ν μ΄λΈμ λͺ¨λ λ°μ΄ν°λ₯Ό μ½μΌλ©΄μ μ£Όμ΄μ§ 쑰건μ λ§μ‘±νλμ§ κ²μ¬νκ³ , μ£Όμ΄μ§ 쑰건μ μ¬μ© κ°λ₯ν μΈλ±μ€λ μ‘΄μ¬νλ ν¨μλ₯Ό μ¬μ©νμ¬ μΈλ±μ€ μΉΌλΌμ λ³νν κ²½μ°μ μΈλ±μ€λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- μ΅ν°λ§μ΄μ μ μ·¨μ¬ μ ν
쑰건μ λ§μ‘±νλ λ°μ΄ν°κ° λ§μ κ²½μ°, κ²°κ³Όλ₯Ό μΆμΆνκΈ° μν΄μ ν μ΄λΈμ λλΆλΆμ λΈλ‘μ μ‘μΈμ€ν΄μΌ νλ€κ³ μ΅ν°λ§μ΄μ κ° νλ¨νλ©΄ 쑰건μ μ¬μ© κ°λ₯ν μΈλ±μ€κ° μ‘΄μ¬ν΄λ μ 체 ν μ΄λΈ μ€μΊ λ°©μμΌλ‘ μ½μ μ μμ΅λλ€.
- κ·Έ λ°μ κ²½μ° λ³λ ¬μ²λ¦¬ λ°©μμΌλ‘ μ²λ¦¬νλ κ²½μ° λλ μ 체 ν μ΄λΈ μ€μΊ λ°©μμ ννΈλ₯Ό μ¬μ©ν κ²½μ°μ μ 체 ν μ΄λΈ μ€μΊ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ½μ μ μμ΅λλ€.
index scan
리ν λΈλμ μΈλ±μ€λ₯Ό ꡬμ±νλ μΉΌλΌμ λ°μ΄ν°μ ν΄λΉ λ°μ΄ν°λ₯Ό κ°μ§κ³ μλ νμ μμΉλ₯Ό κ°λ¦¬ν€λ λ μ½λ μλ³μ(RID) λ‘ κ΅¬μ±λ©λλ€. 리ν λΈλμ μλ°©ν₯ λ§ν¬λ‘μ¨, λ΄λ¦Ό, μ€λ¦μ°¨μ κ²μμ μ½κ²ν μ μμ΄, '=', '>', between λ± μ°μ°μλ‘ κ²μνλ λ°©λ²μ λͺ¨λ μ ν©ν©λλ€.
λ§μ½ 37 ~ 50 μ μ°Ύκ³ μνλ€λ©΄, λ¨Όμ 37μ ν΄λΉνλ 리νλΈλμ μ°Ύκ³ , μλ°©ν₯λ§ν¬λ₯Ό ν΅ν΄ 50λ³΄λ€ ν° κ°μ λ§λ λκΉμ§ μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ©΄μ μΈλ±μ€λ₯Ό μ½μ΅λλ€. (λ§μ½ μΈλ±μ€μ μ‘΄μ¬νμ§ μλ μΉΌλΌμ κ°μ΄ νμνλ€λ©΄ μ½μ λ μ½λ μλ³μλ‘ ν μ΄λΈμ μμΈμ€ν©λλ€.)
SQL λ¬Έμμ νμλ‘ νλ λͺ¨λ μΉΌλΌμ΄ μΈλ±μ€ κ΅¬μ± μΉΌλΌμ ν¬ν¨λ κ²½μ° ν μ΄λΈμ λν μ‘μΈμ€λ λ°μνμ§ μμ΅λλ€.
μΈλ±μ€λ μΈλ±μ€ κ΅¬μ± μΉΌλΌμ μμλ‘ μ λ ¬λμ΄ μμ΅λλ€. μΈλ±μ€μ κ΅¬μ± μΉΌλΌμ΄ A+B λΌλ©΄ λ¨Όμ μΉΌλΌ A λ‘ μ λ ¬λκ³ μΉΌλΌ A μ κ°μ΄ λμΌν κ²½μ°μλ μΉΌλΌ B λ‘ μ λ ¬λλ©° μΉΌλΌ B κΉμ§ λͺ¨λ λμΌνλ©΄ λ μ½λ μλ³μλ‘ μ λ ¬λ©λλ€. μΈλ±μ€κ° κ΅¬μ± μΉΌλΌμΌλ‘ μ λ ¬λμ΄ μκΈ° λλ¬Έμ μΈλ±μ€λ₯Ό κ²½μ νμ¬ λ°μ΄ν°λ₯Ό μ½μΌλ©΄ κ·Έ κ²°κ³Ό λν μ λ ¬λμ΄ λ°νλ©λλ€.
μΈλ±μ€ μ€μΊμ μΈλ±μ€μ μ‘΄μ¬νλ λ μ½λ μλ³μλ₯Ό μ΄μ©ν΄μ κ²μνλ λ°μ΄ν°μ μ νν μμΉλ₯Ό μκ³ μ λ°μ΄ν°λ₯Ό μ½μΌλ―λ‘ μΈλ±μ€ μ€μΊ λ°©μμμλ λΆνμνκ² λ€λ₯Έ λΈλ‘μ λ μ½μ νμκ° μμ΅λλ€. λ°λΌμ νλ²μ I/O μμ²μ ν λΈλ‘μ© λ°μ΄ν°λ₯Ό μ½λ λ°λ©΄, ν ν μ΄λΈ μ€μΊμ λ°μ΄ν°λ₯Ό μ½μ λ νλ²μ I/O μμ²μΌλ‘ μ¬λ¬ λΈλ‘μ νκΊΌλ²μ μ½μ΅λλ€.
λ°λΌμ λμ©λ λ°μ΄ν° μ€μμ κ·Ήν μΌλΆμ λ°μ΄ν°λ₯Ό μ°Ύμ λ, μΈλ±μ€ μ€μΊ λ°©μμ μΈλ±μ€λ₯Ό μ΄μ©ν΄ λͺ λ²μ I/O λ§μΌλ‘ μνλ λ°μ΄ν°λ₯Ό μ½κ² μ°Ύμ μ μμ§λ§ ν ν μ΄λΈ μ€μΊμ ν μ΄λΈμ λͺ¨λ λ°μ΄ν°λ₯Ό μ½μΌλ©΄μ μνλ λ°μ΄ν°λ₯Ό μ°ΎμμΌ νκΈ° λλ¬Έμ λΉν¨μ¨μ μΈ κ²μμ νκ² λ©λλ€.
λ°λλ‘ ν μ΄λΈμ λλΆλΆμ λ°μ΄ν°λ₯Ό μ°Ύμ λλ ν λΈλ‘μ© μ½λ μΈλ±μ€ μ€μΊ λ°©μ 보λ€λ μ΄μ°¨νΌ λλΆλΆμ λ°μ΄ν°λ₯Ό μ½μ κ±°λΌλ©΄ νλ²μ μ¬λ¬ λΈλ‘μ© μ½λ ν ν μ΄λΈ μ€μΊ λ°©μμ΄ μ 리ν μ μμ΅λλ€.
κΈ°λ₯
κ³μ
κ³μ±μμ±
μλ λͺ λ Ήμ΄λ‘ κ³μ μ μμ±ν μ μμ΅λλ€.
CREATE USER 'μ¬μ©μλͺ
'@'μ μ νΈμ€νΈ IP' IDENTIFIED BY 'λΉλ°λ²νΈ';
λ§μ½ νΉμ νΈμ€νΈ(111.111.111.111)λ§ κ³μ μ μ κ·Όκ°λ₯νκ² νλ €λ©΄ 'web'@'111.111.111.111' μ κ°μ΄ ν μ μκ³ , μ무곳μμλ μ κ·Όκ°λ₯νκ² νλ €λ©΄ 'web'@'%' λ₯Ό ν©λλ€. λν, 'web'@'192.68.%.%' μ κ°μ΄ νΉμ λμνμΌλ‘ IP λ₯Ό μ€μ ν μλ μμ΅λλ€.
μ°Έκ³ λ‘ μ¬μ©μλͺ μ΄ λμΌν΄λ IP κ° λ€λ₯΄λ©΄ λ€λ₯Έ κ³μ μΌλ‘ μ·¨κΈλ©λλ€. λ°λΌμ κΆνλ κ°κ° λΆμ¬ν΄μΌν©λλ€.
κΆνλΆμ¬
κ³μ μ λ°λΌ μνν μ μλ κΆνμ μ€μ ν μ μμ΅λλ€.
# μΈμ€ν΄μ€ λ 벨λ¨μ
GRANT κΆνλͺ
, κΆνλͺ
ON *.* TO 'μ¬μ©μλͺ
'@'μ μ νΈμ€νΈ IP';
# λ°μ΄ν°λ² μ΄μ€ λ 벨λ¨μ
GRANT κΆνλͺ
, κΆνλͺ
ON λ°μ΄ν°λ² μ΄μ€λͺ
.* TO 'μ¬μ©μλͺ
'@'μ μ νΈμ€νΈ IP';
# μ€λΈμ νΈ λ 벨λ¨μ
GRANT κΆνλͺ
, κΆνλͺ
ON λ°μ΄ν°λ² μ΄μ€λͺ
.μ€λΈμ νΈλͺ
.* TO 'μ¬μ©μλͺ
'@'μ μ νΈμ€νΈ IP';
μλλ μΌλ°μ μΈ μμ μ λλ€.
GRANT create, drop ON db1.* to 'web'@'111.111.111.111';
GRANT ALL PRIVILEGES ON *.* TO 'web'@'111.111.111.111';
κΆννμ
μλ λͺ λ Ήμ΄λ‘ κΆνμ νμν μ μμ΅λλ€.
REVOKE κΆνλͺ
, κΆνλͺ
ON *.* FROM 'μ¬μ©μλͺ
'@'μ μ νΈμ€νΈ IP';
Replication
Replication λ°©μ
Mysql μ 볡μ λ°©μμ κΈ°λ³Έμ μΌλ‘ λκΈ°, λΉλκΈ°λ‘ λλ©λλ€. λκΈ° λ°©μμ Master λ Έλμ λ°μ΄ν° λ³κ²½μ΄ λ°μν κ²½μ° Slave λ ΈλκΉμ§ λμμ μ μ©λλ κ²μ 보μ₯νλ λ°©μμ΄λ©°, λΉλκΈ° λ°©μμ Master λ Έλμ λ³κ²½κ³Ό Slave λ Έλλ‘μ μ μ©μ΄ λμμ μ΄λ£¨μ΄μ§μ§ μμ΅λλ€. λ°λΌμ λκΈ° λ°©μμ κ²½μ° Master λ Έλμ μ₯μ κ° μ겨λ Slave λ Έλλ₯Ό ν΅ν΄ μλΉμ€λ₯Ό μ΄μ΄κ° μ μμ§λ§, λΉλκΈ°μ κ²¨μ° λ°μ΄ν° μ ν©μ±μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
Mysql μ Replication μ κΈ°λ³Έμ μΌλ‘ λΉλκΈ°λ‘ λμν©λλ€. Single point of failure λ₯Ό μμ λ €λ cluster μ λ¬λ¦¬ λ¨μν λ°μ΄ν°λ§ 볡μ νλ©°, λͺ¨λ λ°μ΄ν°κ° λκΈ°νλλ cluster μ λ¬λ¦¬ λκΈ°νκ° λΉλκΈ°μ μΌλ‘ λ°μν©λλ€.
cluster μ λΉκ΅νμ¬ λκΈ°νλ 보μ₯νμ§ μκ³ μΏΌλ¦¬λ₯Ό λΆμ°ν μλ μμ§λ§, κ°μ λ³κ²½νκΈ° μν΄μ ν΄λ¬μ€ν° κ΅°μ μ΄λ£¨λ λ€λ₯Έ μλ²λ€λ κ°μ΄ λ³κ²½λμλμ§ νμΈν΄μΌνλ cluster λ³΄λ€ λΉ λ₯΄κ² λ°μ΄ν°λ₯Ό λ³κ²½ν μ μμ΄ μΏΌλ¦¬ μ±λ₯μ΄ λΉ λ₯΄λ―λ‘, μ€μκ° λκΈ°νκ° νμμλ κ²½μ° cluster λμ replication μ μ¬μ©ν©λλ€.
λ°λΌμ, 쿼리μ μ€μλλ₯Ό νλ¨νμ¬ λ§€μ° μ€μ©ν 쿼리λ Master λ Έλλ‘, μ΄μΈμ μ½κΈ° 쿼리λ Slave λ Έλλ‘ λΆκΈ°μμΌμΌ ν©λλ€. (λ³΄ν΅ Master λ‘ μ°κΈ° & μ½κΈ°, Slave λ‘ μ½κΈ° μμ μ μνν©λλ€.)
λμλ°©μ
Master λ Έλ±μμ λ³κ²½λλ λ°μ΄ν°μ λν μ΄λ ₯μ Binary log μ κΈ°λ‘νλ©΄ Replication Master Thread κ° λΉλκΈ°μ μΌλ‘ μ΄λ₯Ό μ½μ΄μ slave μ μ μ‘νκ³ Relay log μ κΈ°λ‘ν©λλ€.

Binary log, Relay log
λ°μ΄ν° 볡ꡬλ₯Ό λͺ©μ μΌλ‘ Create, Drop λ±μ DDL κ³Ό Insert, Update λ±μ DML μ΄λ²€νΈλ₯Ό μ μ₯ν©λλ€. (μΌλ°μ μΈ show, select λ¬Έμ μ μ₯λμ§ μμ΅λλ€.) μμΉ΄μ΄λΈλ λ°μ΄ν°κ° μκ³ μμΉ΄μ΄λΈ λ λ€μμ λ€μ΄μ¨ μ΄λ²€νΈλ₯Ό κΈ°λ‘ν Binary log κ° μμΌλ©΄ μνλ μμ μΌλ‘ λ°μ΄ν°λ₯Ό 볡ꡬν μ μμ΅λλ€. λ°μ΄ν°λ² μ΄μ€λ₯Ό λ³κ²½νλ λͺ¨λ μ΄λ²€νΈκ° μ μ₯λμ΄ μμΌλ―λ‘ μ΄λ₯Ό Slave μμ λ€μ μ€ννλ κ²λ§μΌλ‘λ 볡μ¬λ λ°μ΄ν°λ² μ΄μ€κ° λ§λ€μ΄μ§λλ€.
λ°μ΄λ리 λ‘κ·Έλ₯Ό νμ±ννλ©΄ λ‘κ·Έλ₯Ό μ μ΄νκ³ λ³κ²½λ μ΄λ²€νΈλ₯Ό μμ±ν΄μΌ νλ―λ‘ μ±λ₯μ΄ μ½κ° μ νλ©λλ€. λν, replication μ μ¬μ©νλ©΄ Master λ Έλμμ λ‘κ·Έλ₯Ό μ½μ΄κ°λ―λ‘ λμ€ν¬ I/O λ λ°μνκ² λ©λλ€.
my.cnf μμ νμ±νν μ μμ΅λλ€.
[mysqld]
log-bin=/data dir/base_name
mysqlbinlog νλ‘κ·Έλ¨μΌλ‘ λ‘κ·Έλ₯Ό νμΈν μ μμ΅λλ€.
Relay log λ Slave μ μ μ₯λλ©° Binary log μ λ΄μ©, ν¬λ§· λͺ¨λ λμΌν©λλ€.
Cluster
MySQL Cluster λ κΈ°μ‘΄μ MySQL Replication μ Master & Slave μ λ¨μ μ 보μνκ³ λ³΄λ€ μμ ν μμ€ν ꡬνμ΄ κ°λ₯νκ² ν΄μ€λλ€. λμ²΄λ‘ Cluster λ‘ λ¬Άμ¬μ§ μλ²λ Multi Master μλ²λ‘ νμ©λμ΄ μ΄λ μλ²μμ λ°μ΄ν°κ° μ λ ₯, μμ , μμ λλλΌλ λ€λ₯Έ λ°μ΄ν° μλ²λ‘μ κ°±μ μ΄ μ μν μ΄λ£¨μ΄μ§λλ€.
λν Replication μμμλ λ€λ₯΄κ² μ₯μ λ°μμ, μ₯μ ν¬μΈνΈλ₯Ό μΈμ§νμ¬ μ€μ€λ‘ 볡μνλ κΈ°λ₯μ μ 곡νκ³ μμ΄ λ¬΄μ μ§ DBμμ€ν μ μνλ κ³ κ°μκ² κΆμ₯ν λ§ ν©λλ€. λ€λμ μ μμ΄ μ΄λ£¨μ΄μ Έ DB μλ²κ° λ€μ΄λμ΄λ λ λ€λ₯Έ μλ²λ‘ μλΉμ€λ₯Ό μ μ§νκΈ° μν μμ€ν μΌλ‘ 보면 λ©λλ€.
νΈλμμ
autocommit
μ¬λ¬ μ€μ 쿼리μμ rollback νΉμ commit μ°μ°μ λ§λλ©΄ νλμ νΈλμμ μ΄ μ’ λ£λ©λλ€. MySQL μ κΈ°λ³Έ μ€ν λ¦¬μ§ μμ§μ InnoDB λ‘, κΈ°λ³Έμ μΌλ‘ autocommit (μ€ λ¨μ 컀λ°) λͺ¨λκ° μΌμ Έμλ μνμ΄λ―λ‘ νΈλμμ μ΄ μ§μλμ§ μμ΅λλ€. νΈλμμ μ μ§μλ°κΈ° μν΄μλ autocommit λͺ¨λλ₯Ό false λ‘ λ³κ²½ν΄μΌν©λλ€.
show variables like '%commit%'; // commit λͺ¨λ νμΈνκΈ°
set @@autocommit=0; // autocommitλͺ¨λ falseλ‘ λ³κ²½
show variables like '%commit%';
μ λͺ λ Ήμ ν΅ν΄ μΈμ λ¨μμ autocommit λͺ¨λλ₯Ό μ‘°μν μ μκ³ , DB μ κΈ°λ³ΈμΈν μ λ³κ²½νκΈ° μν΄μλ config νμΌμ μμ±ν΄μΌν©λλ€.
[mysqld]
autocommit=0
DDL
DDL rollback
DDL μ νΈλμμ μμμ μ€νλλλΌλ λ‘€λ°±λμ§ μμ΅λλ€. λ‘€λ°± λμμ΄ μλλ―λ‘ νμ autocommit λ©λλ€. (https://dev.mysql.com/doc/refman/5.7/en/cannot-roll-back.html)
Todo. Online DDL
μμ μ DDL μ κ²½μ°, μλ‘κ² μ μλ μ€ν€λ§λ‘ λΉ ν μ΄λΈμ μμ±ν νμ λ°μ΄ν°λ₯Ό 볡μ¬νκ³ , κΈ°μ‘΄μ ν μ΄λΈκ³Ό κ΅μ²΄νλ νμμΌλ‘ μ²λ¦¬λμμ΅λλ€. μ΄ κ³Όμ μμλ ν΄λΉ 리μμ€μ λν read λ κ°λ₯νμ§λ§ write λ ν μ μμμ΅λλ€.
mysql 5.1 μ InnoDB plugin κ³Ό 5.5 μλ Fast index creation μ΄λΌλ κΈ°λ₯μ΄ μΆκ°λμ΄, μΈλ±μ€λ₯Ό μΆκ°ν λ μλ‘μ΄ μ μμ ν μ΄λΈμ μμ±νκ³ λ°μ΄ν°λ₯Ό μμ ν 볡μ¬νλ λμ μΈλ±μ€λ§μ μμ±ν μ μκ² λμμ΅λλ€. μ¦, Secondary index μ λν CREATE INDEX λ DROP INDEX κ° μνλλλ‘ μ΅μ νλμ΄ μΈλ±μ€ μμ±μ 걸리λ μκ°μ μ§§μμ‘μ§λ§, λ§μ°¬κ°μ§λ‘ 리μμ€μ λν λ³κ²½μ λΆκ°λ₯νμ΅λλ€.
5.6 μμλ μ¨λΌμΈ DDL μ΄ μΆκ°λμ΄, μ¨λΌμΈμμ ν μ΄λΈ μ μμ λ³κ²½μ΄ μ€ν κ°λ₯ν κ²½μ° λ°μ΄ν°λ₯Ό 볡μ¬νλ μ€μμλ μ°Έμ‘° λΏ μλλΌ λ³κ²½λ κ°λ₯ν΄μ‘μ΅λλ€. λ¨, ALTER TABLE μ μμκ³Ό μ’ λ£μμ μλ ν μ΄λΈ μ μμ μ ν©μ±μ μν΄ exclusive μ²λ¦¬λ₯Ό νμ¬ row lock μ΄ νμν νΈλμμ κ³Όλ λμμ μ€νν μ μμ΅λλ€.
Lock
μλμμλ μ€μ lock μ 리μμ€(row, table λ±)μ λ°μνκ³ , ν΄λΉ 리μμ€μ μ κ·Όν νΈλμμ μ lock μ μ·¨λνλ€κ³ ννν©λλ€.
Shared lock (LS, Read lock)
μ½κΈ° μ κΈμΌλ‘, νλμ 리μμ€μ λν΄ λμμ μ½μ μλ μμ§λ§ λ³κ²½μ λΆκ°λ₯νκ² νλ lock μ λλ€. νλμ νΈλμμ μμ 리μμ€λ₯Ό μ½μΌλ €κ³ ν λ, λ€λ₯Έ νΈλμμ μμμ shared lock μ νμ©λμ§λ§ exclusive lock μ λΆκ°λ₯ν©λλ€. μ¦, 리μμ€μ λν΄ shared lock λΌλ¦¬λ λμμ μ κ·Όν μ μμ΅λλ€.
Exclusive lock (LX, Wirte lock)
μ°κΈ° μ κΈμΌλ‘, νλμ νΈλμμ μμ λ°μ΄ν°λ₯Ό λ³κ²½ν λ, νΈλμμ μ΄ μλ£λκΈ° μ κΉμ§λ ν΄λΉ ν μ΄λΈμ μ½κ±°λ μ°μ§λͺ»νκ² ν©λλ€.
ν νΈλμμ μ΄ exclusive lock μ μ·¨λνλ©΄ λ€λ₯Έ νΈλμμ μ shared lock μ μ·¨λν μ μμ΅λλ€. ν νΈλμμ μ΄ exclusive lock μ μ·¨λνλ©΄ ν΄λΉ ν μ΄λΈμ λν΄ λ€λ₯Έ νΈλμμ μ exclusive lock μ μ·¨λν μ μμ΅λλ€.
Metadata lock (μ΄μ)
μ¬μ©μ€μΈ μ€λΈμ νΈ(table, trigger, event λ±) μ κ·Όκ³Ό λ°μ΄ν° μΌκ΄μ±μ μ μ§νκΈ° μν΄ metadata lock μ μ¬μ©ν©λλ€. νΈλμμ μ΄ μ μ§λλ λμμ DDL μμ μ΄ λ€μ΄μ€λ©΄ λ½μ΄ κ±Έλ¦¬κ³ , DDL μμ μ΄ λκΈ°νλ λμ μ κ·λ‘ μ μ λ DML 쿼리 μμ λκΈ°μνλ‘ λΉ μ§λλ€. μ΄ λ λκΈ°μ€μΈ 쿼리λ€μ "Waiting for table metadata lock" state κ° λ©λλ€.
μ¦, autocommit μ΄ off μΌ λλ μ΄λ ν μΏΌλ¦¬κ° μ€νλλ μ§κ°μ νΈλμμ μ΄ μμλκ³ commit νΉμ rollback μ΄ λκΈ° μ μλ μ¬μ©λ λͺ¨λ μ€λΈμ νΈμ metadata lock μ΄ μ€μ λλ―λ‘ DDL μ μ€νν μ μμ΅λλ€. λ°λΌμ νμ λͺ μμ μΌλ‘ commit/rollback μ μμ±νμ¬ νΈλμμ μ μ’ λ£ν΄μ£Όμ΄μΌ ν©λλ€.
λΉλκ° λμ μ€λΈμ νΈμΌμλ‘ μ΄μ μκ°λμ λ³κ²½νκΈ° μ΄λ ΅μ§λ§ μνλ€λ©΄ metadata lock μ μ‘λ λͺ¨λ μΈμ μ μ’ λ£ν νμ μ μ©ν μ μμ΅λλ€.
lock_wait_timeout νλΌλ―Έν°λ₯Ό λ³λλ‘ μ€μ νμ¬ μ€μ λ μκ°λ§ λκΈ°νκ³ DDL μμ μ μ·¨μν μλ μμ΅λλ€.
https://suhwan.dev/2019/06/09/transaction-isolation-level-and-lock/