λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Dev Note/PostgreSQL

PostgreSQL μ—μ„œ Vacuum 이 ν•„μš”ν•œ 이유 (MVCC, XID)

by iyos 2023. 6. 4.

 

 

🧹 PostgreSQL을 μ‚¬μš©ν•œλ‹€λ©΄ Vacuum에 λŒ€ν•΄ λ°˜λ“œμ‹œ 잘 μ΄ν•΄ν•˜κ³  μ μ ˆν•˜κ²Œ 관리해야 ν•©λ‹ˆλ‹€.
μ–Όλ§ˆμ „ μš΄μ˜ν•˜κ³ μžˆλ˜ μ„œλΉ„μŠ€μ— Vacuum μ„ ν†΅ν•œ 관리가 μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•˜λ˜ 이유둜 DBλΆ€ν•˜κ°€ μ‹¬ν•˜κ²Œ μ™€μ„œ μž₯μ• κ°€ λ°œμƒν•œ 적이 μžˆμŠ΅λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 신경쓰지 μ•ŠμœΌλ©΄ μ„œλΉ„μŠ€μ— 치λͺ…적일 수 μžˆλŠ” Vacuum 의 역할에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

 

 


 

 

Vacuum 의 첫 번째 μ—­ν• , 곡간확보!

Vacuum의 사전적 μ˜λ―ΈλŠ” "μ§„κ³΅μ²­μ†ŒκΈ°λ₯Ό μ΄μš©ν•œ μ²­μ†Œ" μž…λ‹ˆλ‹€. UPDATE 와 DELETE λ₯Ό 톡해 λ³€κ²½ λ˜λŠ” μ‚­μ œλœ μžλ£Œλ“€μ΄ 차지 ν•˜κ³  μžˆλŠ” λ””μŠ€ν¬ 곡간을 λ‹€μ‹œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λΆˆν•„μš”ν•œ μ“°λ ˆκΈ° 데이터듀을 μ •λ¦¬ν•˜κ³ , λ””μŠ€ν¬ κ³΅κ°„μ˜ νš¨μœ¨μ„±μ„ λ†’μž…λ‹ˆλ‹€.

μ™œ λΆˆν•„μš”ν•œ μ“°λ ˆκΈ° 데이터가 곡간을 μ°¨μ§€ν•˜λŠ”κ±ΈκΉŒμš”?

 

 

닀쀑 버전 λ™μ‹œμ„± μ œμ–΄

PostgreSQLμ—μ„œλŠ” UPDATEλ‚˜ DELETE μž‘μ—… λŒ€μƒμ΄ 된 ν•΄λ‹Ή 자료의 μ˜› 버전을 μž‘μ—… μ™„λ£Œ ν›„ λ°”λ‘œ 버리지 μ•ŠμŠ΅λ‹ˆλ‹€μ΄ μž‘μ—…μ€ 닀쀑 버전 λ™μ‹œμ„± μ œμ–΄(multiversion concurrency control, MVCC) 기법을 κ΅¬ν˜„ν•˜λŠ”λ° 이점이 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. λ™μ‹œμ— μ—¬λŸ¬ 개의 데이터 버전을 μ œκ³΅ν•  수 μžˆλŠ” κΈ°λ²•μœΌλ‘œ μ΄ν•΄ν•˜μ‹œλ©΄ μ‰½μŠ΅λ‹ˆλ‹€. μ‚­μ œλœ 자료λ₯Ό λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄, κ·Έ μžλ£Œκ°€ μ‚­μ œλ˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ 개의 λ²„μ „μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” 것이죠.

 

ν•˜μ§€λ§Œ, λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 더 이상이 κ·Έ μ˜› 버전 μžλ£Œμ— λŒ€ν•œ 접근이 ν•„μš” μ—†λ‹€λ©΄, μ˜› 버전 μžλ£ŒλŠ” μ“Έλͺ¨ μ—†λŠ” μžλ£Œκ°€ λ©λ‹ˆλ‹€. 이 μƒνƒœλ‘œ 계속 운영 λœλ‹€λ©΄, λ””μŠ€ν¬μ—λŠ” μ“Έλͺ¨ μ—†λŠ” μžλ£Œλ“€μ΄ λ„˜μ²˜λ‚˜κ²Œ λ˜λŠ”λ°, 이 μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ  μžλ£Œλ“€μ„ μ •λ¦¬ν•΄μ„œ κ·Έ μžλ£Œκ°€ μžˆμ—ˆλ˜ 곡간을 μ •λ¦¬ν•˜λŠ”κ²Œ vacuum의 μ—­ν• μž…λ‹ˆλ‹€. Vacuum이 곡간을 μ •λ¦¬ν•˜λŠ” 방법은 μžμ„Ένžˆ 2κ°€μ§€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

 

 

Vacuum이 곡간을 μ •λ¦¬ν•˜λŠ” 두 가지 방법

1. 였래된 이전 버전 λ ˆμ½”λ“œ μ‚­μ œ μž‘μ—…μ„ ν†΅ν•œ 곡간 확보 - Vacuum

첫번째 μž‘μ—…μ€ μ“Έλͺ¨μ—†λŠ” 자료λ₯Ό μ •λ¦¬ν•˜κ³ , κ·Έ 자리λ₯Ό λ‹€λ₯Έ μžλ£Œκ°€ μ €μž₯될 수 μžˆλ„λ‘ λΉˆκ³΅κ°„μœΌλ‘œ ν‘œμ‹œν•˜λŠ”λ°μš”. 사싀 이 μž‘μ—…μ€ 운영체제 μž…μž₯μ—μ„œ λ””μŠ€ν¬ μ—¬μœ  곡간을 ν™•λ³΄ν•˜λŠ” 것을 μ˜λ―Έν•˜μ§€λŠ” μ•Šκ³  μ±„μ›Œμ§ˆ 수 있게 λΉ„μ›Œμ£ΌλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 

 

 

 

2. 였래된 이전 버전 λ ˆμ½”λ“œ μ‚­μ œ μž‘μ—… 후에 κ³΅κ°„ μ••μΆ• - Vacuum Full

이와 λ°˜λŒ€λ‘œ Vacuum Full μž‘μ—…μ€ ν•΄λ‹Ή ν…Œμ΄λΈ”μ˜ μ‚¬μš©ν•  수 μžˆλŠ” μžλ£Œλ“€λ§Œ λ”°λ‘œ λͺ¨μ•„ μ•„μ˜ˆ μƒˆ νŒŒμΌμ— μ €μž₯ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ‹€μ œ λ””μŠ€ν¬ μ—¬μœ  곡간을 ν™•λ³΄ν•˜κ³  ν•΄λ‹Ή ν…Œμ΄λΈ”μ„ 졜적의 물리적 크기둜 λ§Œλ“œλŠ” μž‘μ—…μ΄μ£ . ν•˜μ§€λ§Œ λ°˜λ“œμ‹œ μ£Όμ˜ν•΄μ•Όν•  사항은 이듀 λͺ…령은 ν…Œμ΄λΈ” λŒ€μƒμœΌλ‘œ 배타적 μž κΈˆμ„ ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€. ν‘œμ€€ vacuum μž‘μ—…κ³ΌλŠ” 달리 DMLκ³Ό 락 ν˜Έν™˜μ„±μ΄ μ—†κ³  μ‹¬μ§€μ–΄λŠ” SELECT λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ„Έμ…˜λ„ 락을 λŒ€κΈ°ν•΄μ•Όν•©λ‹ˆλ‹€. 즉, 이 μž‘μ—…μ΄ μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€ κ·Έ ν…Œμ΄λΈ”μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” λ‹€λ₯Έ λͺ¨λ“  μž‘μ—…λ“€μ„ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œλŠ” ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. μΆ”κ°€λ‘œ, 이듀 μž‘μ—…μ€ μž‘μ—… 도쀑 원본과 λ‹€λ₯Έ μƒˆλ‘œμš΄ 볡사본 자료λ₯Ό λ§Œλ“€κΈ° λ•Œλ¬Έμ— 그만큼의 λ””μŠ€ν¬ 곡간이 ν•„μš”ν•˜λ‹€λŠ” 것도 κΈ°μ–΅ν•΄μ•Όν•©λ‹ˆλ‹€.

 

 

3. ꢌμž₯λ˜λŠ” μ „λž΅μ€? autovacuum!

일반적으둜 ꢌμž₯λ˜λŠ” μ „λž΅μ€ 첫번째 ν‘œμ€€ vacuum 을 주기적으둜 μž‘μ—…μ„ ν•΄μ„œ κΎΈμ€€νžˆ 빈 곡간을 ν™•λ³΄ν•΄μ„œ, λ‘λ²ˆμ§Έ μž‘μ—…μΈ full vacuum을 ν•΄μ•Όν•˜λŠ” 상황을 λ°©μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ””μŠ€ν¬κ°€ μ–΄λŠ 정도 컀지지 μ•Šλ„λ‘ κ³„μ†ν•΄μ„œ λ‹€λ₯Έ μžλ£Œκ°€ μ €μž₯될 수 μžˆλ„λ‘ 자리λ₯Ό ν™•λ³΄ν•΄μ£ΌλŠ” 것이죠. 이 μ „λž΅μ„ μœ„ν•΄ ν‘œμ€€ vacuum을 μžλ™μœΌλ‘œ μ‹€ν–‰ν•΄μ£ΌλŠ” autovacuum κΈ°λŠ₯을 ν™œμš©ν•©λ‹ˆλ‹€. λ¬Όλ‘  더이상 λ³€κ²½/μ‚­μ œκ°€ 없을 ν…Œμ΄λΈ”μ˜ 정리λ₯Ό 톡해 λ””μŠ€ν¬ 곡간을 ν™•λ³΄ν•˜κΈΈ μ›ν•œλ‹€λ©΄ full vacuum μž‘μ—…μ„ μ„ νƒν•˜λŠ” 것도 λ°©λ²•μž…λ‹ˆλ‹€. 

λ§Œμ•½ autovacuum κΈ°λŠ₯을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, ν•΄λ‹Ή λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” λͺ¨λ“  λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄μ„œ κ΄€λ¦¬μžκ°€ 직접 VACUUM μž‘업을 ν•΄μ•Όν•©λ‹ˆλ‹€. 일반적으둜 ν•˜λ£¨μ— ν•œ 번 λ°€μ‹œκ°„μ— μ§€μ •ν•˜λŠ” 것이 일반적이며, μžλ£Œκ°€ λΉˆλ²ˆν•˜κ²Œ λ³€κ²½λ˜λŠ” ν…Œμ΄λΈ”μ— λŒ€ν•΄μ„œλŠ” 더 자주 vacuum μž‘μ—… ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€. (μ•„μ£Ό λΉˆλ²ˆν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄μ„œ λͺ‡ 뢄에 ν•œ λ²ˆμ”© μž‘μ—… ν•˜λ„λ‘ μ„€μ •ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.)

 

 


 

 

Vacuum 의 두 번째 μ—­ν• , XID Frozen!

 μ‚¬μ‹€ 곡간 μž¬ν™œμš©μ„ μœ„ν•œ Vacuum은 ν•„μˆ˜ 사항은 μ•„λ‹™λ‹ˆλ‹€. 단지 λ””μŠ€ν¬ μ‚¬μš© 효율과 ν…Œμ΄λΈ” λ‚΄μ˜ 곡간 ν™œμš© 효율이 λ–¨μ–΄μ§ˆ 뿐이죠. ν•˜μ§€λ§Œ XID Frozen을 μœ„ν•œ vacuum μž‘μ—…μ€ λ°˜λ“œμ‹œ μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. autovacuum을 ν™œμš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λ°˜λ“œμ‹œ μˆ˜λ™ vacuum을 ν•΄μ•Όν•˜λŠ” μ΄μœ μ΄κΈ°λ„ ν•©λ‹ˆλ‹€.

 

 

XID κ°€ 뭔데?

PostgreSQLμ—μ„œλŠ” νŠΈλžœμž­μ…˜ μžλ£Œμ— λŒ€ν•΄ MVCC 기법을 ν™œμš©ν•œλ‹€κ³  μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆμŠ΅λ‹ˆλ‹€. MVCCλŠ” 쿼리가 μˆ˜ν–‰ν•œ μ‹œμ μ˜ 데이터 버전을 읽을 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ”λ°, μ΄λ•Œ 'μˆ˜ν–‰ν•œ μ‹œμ '의 기쀀은 νŠΈλžœμž­μ…˜ ID (XID) μž…λ‹ˆλ‹€. ν…Œμ΄λΈ” 내에 이전 데이터와 ν˜„μž¬ 데이터가 λ™μ‹œμ— μ €μž₯되기 λ•Œλ¬Έμ—, μ‹œμ μ— λ§žλŠ” 데이터λ₯Ό μΆ”μΆœν•˜κΈ° μœ„ν•΄ λ ˆμ½”λ“œ λ³„λ‘œ XIDλ₯Ό μ§€μ •ν–ˆλ‹€κ³  μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€. XIDλ₯Ό 숫자둜 μ²˜λ¦¬ν•˜κ³  그것을 λΉ„κ΅ν•˜λŠ” 방식을 ν™œμš©ν•˜μ—¬ 쿼리가 μ‹œμž‘λœ μ‹œμ μ˜ XID와 κ°™κ±°λ‚˜ μž‘μ€ 데이터 버전을 μ½λŠ” 것이 MVCC의 핡심이죠. Read와 Write μž‘μ—… κ°„μ˜ λΈ”λ‘œν‚Ήμ„ μ™„λ²½νžˆ μ œκ±°ν•¨μœΌλ‘œμ¨ λ™μ‹œμ„±μ„ 높일 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 

 

사싀 λ ˆμ½”λ“œ λ³„λ‘œ XIDκ°€ μ‘΄μž¬ν•œλ‹€λŠ” 것은 곡간 μ‚¬μš© μΈ‘λ©΄μ—μ„œ 맀우 λΉ„νš¨μœ¨μ μž…λ‹ˆλ‹€. XID λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ ˆμ½”λ“œλ‹Ή 4λ°”μ΄νŠΈκ°€ μΆ”κ°€λ‘œ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ PostgreSQL은 FrozenXID λΌλŠ” νŠΉλ³„ XIDλ₯Ό 미리 μ˜ˆμ•½ ν•΄ 두어 μ‚¬μš©ν•©λ‹ˆλ‹€. 일반적인 비ꡐ λŒ€μƒμ—μ„œ 항상 λ³΄μ—¬μ§€λŠ” XID, 즉 μ–΄λ– ν•œ XID보닀 μž‘μ€ Frozen XIDλ₯Ό μ μš©ν•˜μ—¬ 항상 visible ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

 

Frozen XID ?

항상 λ³΄μ—¬μ§€λŠ” XID λΌλŠ” κ°œλ…μ„ μ’€ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 일반적인 XID 비ꡐ 방법은 2의 32승 λ‚˜λ¨Έμ§€ 연산을 μ΄μš©ν•©λ‹ˆλ‹€. 이 말은 20μ–΅ 개의 "μ˜›" XID와, 20μ–΅ 개의 "μƒˆ" XID 둜 λ‚˜λˆ„κ³ , 이 XID 값은 계속 μˆœν™˜ ν•˜λ©° μ‚¬μš©ν•œλ‹€λŠ” λœ»μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ ν•œ XID둜 μ €μž₯ λ˜μ—ˆλ‹€λ©΄, κ·Έ 이후 20μ–΅ 개의 νŠΈλžœμž­μ…˜μ΄ 생기기 μ „κΉŒμ§€λŠ” κ·Έ μžλ£ŒλŠ” "μ˜›" XID둜 μ²˜λ¦¬λ˜μ§€λ§Œ, κ·Έ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ 생기면 κ·Έ μ˜› XIDλŠ” μ•žμœΌλ‘œ μ €μž₯될 XID둜 κ°„μ£Όν•΄ λ²„λ¦½λ‹ˆλ‹€. 이 문제λ₯Ό ν”Όν•˜λŠ” 방법은 20μ–΅ νŠΈλžœμž­μ…˜μ΄ 생기기 전에, κ·Έ μ˜› XID 자료의 XID 값을 FrozenXID둜 λ°”κΎΈλŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ 영ꡬ λ³΄κ΄€μš© 자료둜 λ°”κΏ” λ†“μœΌλ©΄, νŠΈλžœμž­μ…˜ XID 비ꡐ μž‘μ—…μ—μ„œ 항상 μ œμ™Έ 되기 λ•Œλ¬Έμ—, XID κ²ΉμΉ¨ 였λ₯˜λ₯Ό ν”Όν•΄κ°ˆ 수 있게 되고, 이 XID λ³€κ²½ μž‘μ—…μ„ λ°”λ‘œ VACUUM (anti-wraparound autovacuum) μ΄ ν•©λ‹ˆλ‹€.

 


 

 

Vacuum 의 μ„Έ 번째 μ—­ν• , μ‹€μžλ£Œ 지도 κ°±μ‹ 

vacuum μž‘μ—…μ€ μ‹€μžλ£Œ 지도λ₯Ό κ°±μ‹ ν•˜λŠ” μž‘μ—…μ„ ν•©λ‹ˆλ‹€. μ‹€μžλ£Œ 지도(visibility map, vm)λž€ ν˜„μž¬ μž‘μ—… 쀑인 νŠΈλžœμž­μ…˜λ“€(λ˜λŠ” κ·Έ μžλ£Œλ“€μ΄ λ³€κ²½ 되기 μ „κΉŒμ§€ μ΄μš©ν•  미래의 λͺ¨λ“  νŠΈλžœμž­μ…˜λ“€)이 μ‹€μ œλ‘œ μ‚¬μš©ν•  μžλ£Œλ“€μ— λŒ€ν•œ 각 ν…Œμ΄λΈ”λ³„ μ§€λ„μž…λ‹ˆλ‹€.

이 지도 μ •λ³΄λŠ” 인덱슀 μ „μš© 쿼리듀에 λŒ€ν•΄μ„œ λΉ λ₯Έ 응닡을 μ œκ³΅ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€. PostgreSQLμ—μ„œ μ–΄λ–€ 자료λ₯Ό ν•΄λ‹Ή μ„Έμ…˜μ—κ²Œ 보여 μ£Όμ–΄μ•Ό 할지λ₯Ό κ²°μ • ν•˜λŠ” μ •λ³΄λŠ”, κ·Έ 자료의 ν…Œμ΄λΈ” νŽ˜μ΄μ§€κΉŒμ§€ μ‚΄νŽ΄ 보아야 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 인덱슀 μ „μš© 검색인 κ²½μš°μ—λŠ” ν…Œμ΄λΈ” νŽ˜μ΄μ§€λ₯Ό κ²€μƒ‰ν•˜μ§€ μ•Šκ³  λ¨Όμ € 이 μ‹€μžλ£Œ 지도λ₯Ό κ²€μƒ‰ν•΄μ„œ 이곳에 ν•΄λ‹Ή μžλ£Œκ°€ μžˆλ‹€λ©΄ 그것을 μ‚¬μš©ν•©λ‹ˆλ‹€. 그만큼 ν…Œμ΄λΈ” νŽ˜μ΄μ§€ 읽기 μž‘μ—…μ„ 쀄일 수 있고, νŠΉνžˆλ‚˜ ν…Œμ΄λΈ” 크기가 큰 경우라면 λ””μŠ€ν¬ 읽기 μž‘μ—…μ„ μƒλ‹Ήνžˆ μ€„μ΄λŠ” 효과λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, μ‹€μ œ ν…Œμ΄λΈ” νŽ˜μ΄μ§€ 보닀, 이 μ‹€μžλ£Œ μ§€λ„μ˜ ν¬κΈ°λŠ” 훨씬 μž‘κΈ° λ•Œλ¬Έμ΄μ£ .

 


 

 

Vacuum 의 λ„€ 번째 μ—­ν• , μ‹€ν–‰κ³„νš 톡계 정보 κ°±μ‹ 

PostgreSQL μΏΌλ¦¬ μ‹€ν–‰ κ³„νšκΈ°λŠ” 쿼리의 쒋은 μ‹€ν–‰ κ³„νšμ„ 짜기 μœ„ν•΄μ„œ 각 ν…Œμ΄λΈ”μ— μ €μž₯된 자료λ₯Ό λ°”νƒ•μœΌλ‘œ μˆ˜μ§‘λœ 톡계 정보λ₯Ό μ΄μš©ν•˜λŠ”λ°, 이 톡계 μ •λ³΄λŠ” ANALYZE λͺ…령을 μ΄μš©ν•΄μ„œ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€. 그리고 VACUUM λͺ…령을 μˆ˜ν–‰ν•˜λ©΄μ„œ μ˜΅μ…˜μœΌλ‘œ ANALYZE μž‘μ—…μ„ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 톡계 정보 κ°±μ‹  μž‘μ—…μ΄ μ œλŒ€λ‘œ λ˜μ§€ μ•ŠμœΌλ©΄ μ˜λ„ λ˜μ§€ μ•Šμ€ 쿼리 μ‹€ν–‰ κ³„νšμ΄ μ§œμ—¬μ§€κ³ , μ „μ²΄μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 λ–¨μ–΄λœ¨λ¦¬λŠ” κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•˜κΈ° λ•Œλ¬Έμ— λ°”λ₯Έ 톡계 정보 κ°±μ‹  μž‘μ—…μ„ 주기적으둜 ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

 

μœ„μ—μ„œ μ„€λͺ…ν•œ autovacuum κΈ°λŠ₯을 μ΄μš©ν•œλ‹€λ©΄, 톡계 정보λ₯Ό κ°±μ‹ ν•΄μ•Όν•  ν•„μš”μ„±μ΄ μžˆλŠ” ν…Œμ΄λΈ”λ“€μ— λŒ€ν•΄μ„œ 주기적으둜 ANALYZE λͺ…령을 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ν†΅κ³„ 정보 κ°±μ‹  μž‘μ—…λ„ λ””μŠ€ν¬ μ—¬μœ  곡간 확보λ₯Ό μœ„ν•œ vacuum μž‘μ—…κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ ν…Œμ΄λΈ”μ˜ 자료 λ³€ν™”λŸ‰μ΄ λ§Žμ€ κ²½μš°λŠ” λΉˆλ²ˆν•˜κ²Œ μ§„ν–‰ν•˜λŠ” 것이 μ’‹κ³ , κ·Έ λ°˜λŒ€μΈ κ²½μš°λŠ” μ’€ 더 λ“œλ¬Όκ²Œ μ§„ν–‰ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ¬Όλ‘ , ν…Œμ΄λΈ”μ˜ μžλ£Œκ°€ λΉˆλ²ˆν•˜κ²Œ λ³€κ²½λœλ‹€κ³  ν•˜λ”λΌλ„ κ·Έ λ³€κ²½ λ‚΄μš©μ΄ μˆ˜μ§‘ν•  톡계 정보와 κ΄€λ ¨ μ—†λŠ” 것이라면 λ‹Ήμ—°νžˆ 톡계 정보 κ°±μ‹  μž‘μ—…λ„ ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.

 

 

 


 

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” vacuum이 ν•„μš”ν•œ μ΄μœ μ™€ 역할에 4가지에 λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ vacuum이 ν•„μˆ˜μ μΈ 관리가 ν•„μš”ν•˜λ‹€λ©΄, κ³Όμ—° μ–΄λ–»κ²Œ 적절히 μ„€μ •ν•˜κ³  ν™œμš©ν•΄μ•Ό μ„±λŠ₯에 λ¬Έμ œκ°€ 없을지도 μ•Œμ•„λ΄μ•Όκ² μ£ ? λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. πŸ‘‹πŸ»

 

 

 

 

- 참고자료

https://www.postgresql.eu/events/pgconfeu2019/sessions/session/2748/slides/242/vacuum_future_pgconf_eu_2019.pdf

https://www.interdb.jp/pg/pgsql06.html

https://bstar36.tistory.com/308

https://www.postgresql.kr/docs/9.4/routine-vacuuming.html

https://techblog.woowahan.com/9478/

λ°˜μ‘ν˜•