Java ๊ฐœ๋ฐœ์ž์˜ ์‹œ๊ฐ์œผ๋กœ ๋ณธ PostgreSQL์˜ ์ธ๋ฑ์Šค ์ƒํƒœ

์•ˆ๋…•.

์ œ ์ด๋ฆ„์€ Vanya์ด๊ณ  Java ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์ €๋Š” PostgreSQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •, ๊ตฌ์กฐ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”, ์ฃผ๋ง์— ์•ฝ๊ฐ„์˜ DBA ์—ญํ• ์„ ํ•˜๋Š” ๋“ฑ ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ตœ๊ทผ์— ์ €๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •๋ฆฌํ•˜๊ณ  Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. pg-์ƒ‰์ธ-๊ฑด๊ฐ•๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ž‘์—…์ด ๋” ์‰ฌ์›Œ์ง€๊ณ  ์‹œ๊ฐ„์ด ์ ˆ์•ฝ๋˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”ํžˆ ๋ฒ”ํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ด์•ผ๊ธฐํ•  ๋„์„œ๊ด€์ด ๋ฐ”๋กœ ์ด ๋„์„œ๊ด€์ž…๋‹ˆ๋‹ค.

Java ๊ฐœ๋ฐœ์ž์˜ ์‹œ๊ฐ์œผ๋กœ ๋ณธ PostgreSQL์˜ ์ธ๋ฑ์Šค ์ƒํƒœ

์ฑ…์ž„ ๋ถ€์ธ

์ œ๊ฐ€ ์ž‘์—…ํ•˜๋Š” PostgreSQL์˜ ๊ธฐ๋ณธ ๋ฒ„์ „์€ 10์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  SQL ์ฟผ๋ฆฌ๋„ ๋ฒ„์ „ 11์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์ตœ์†Œ ๋ฒ„์ „์€ 9.6์ž…๋‹ˆ๋‹ค.

์„ ์‚ฌ ์‹œ๋Œ€

์ด ๋ชจ๋“  ์ผ์€ ๊ฑฐ์˜ XNUMX๋…„ ์ „์— ๋‚˜์—๊ฒŒ ์ด์ƒํ•œ ์ƒํ™ฉ์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ๊ฒฝ์Ÿ์ ์ธ ์ธ๋ฑ์Šค ์ƒ์„ฑ์ด ์˜ค๋ฅ˜๋กœ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ‰์†Œ์™€ ๊ฐ™์ด ์ธ๋ฑ์Šค ์ž์ฒด๋Š” ์ž˜๋ชป๋œ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋‚จ์•„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ ๋ถ„์„ ๊ฒฐ๊ณผ ๋ถ€์กฑํ•จ์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ž„์‹œ_ํŒŒ์ผ_ํ•œ๊ณ„. ๊ทธ๋ฆฌ๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค... ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๋ฉด์„œ ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ์—์„œ ์ˆ˜๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ์†Œ๋งค๋ฅผ ๊ฑท์–ด๋ถ™์ด๊ณ  ๋ˆˆ์„ ๋ฐ˜์ง๋ฐ˜์ง ๋น›๋‚ด๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ XNUMX - ๊ธฐ๋ณธ ๊ตฌ์„ฑ

์•„๋งˆ๋„ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ปคํ”ผ๋ฉ”์ด์ปค์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Postgres์— ๋Œ€ํ•œ ๋น„์œ ์— ๊ฝค ์ง€์ณค์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ... ๊ธฐ๋ณธ ๊ตฌ์„ฑ์€ ์‹ค์ œ๋กœ ๋งŽ์€ ์งˆ๋ฌธ์„ ์ œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๋ณด์ˆ˜_์ž‘์—…_๋ฉค, ์ž„์‹œ_ํŒŒ์ผ_ํ•œ๊ณ„, ๋ฌธ_์‹œ๊ฐ„ ์ดˆ๊ณผ ะธ lock_timeout.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์œ ์ง€ ๋ณด์ˆ˜_์ž‘์—…_๋ฉค ๊ธฐ๋ณธ๊ฐ’์€ 64MB์˜€์œผ๋ฉฐ ์ž„์‹œ_ํŒŒ์ผ_ํ•œ๊ณ„ ๋Œ€๋žต 2GB ์ •๋„์ž…๋‹ˆ๋‹ค. ํฐ ํ…Œ์ด๋ธ”์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—์„œ pg-์ƒ‰์ธ-๊ฑด๊ฐ• ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋ชจ์•„๋ดค์Šต๋‹ˆ๋‹ค ํ‚ค, ์ œ ์ƒ๊ฐ์—๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ XNUMX - ์ค‘๋ณต ์ธ๋ฑ์Šค

์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” SSD ๋“œ๋ผ์ด๋ธŒ์— ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ HA-์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ, ๋งˆ์Šคํ„ฐ ํ˜ธ์ŠคํŠธ ๋ฐ n-๋ณต์ œ๋ณธ ์ˆ˜. ๋””์Šคํฌ ๊ณต๊ฐ„์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์šฐ ๊ท€์ค‘ํ•œ ์ž์›์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๊ณผ CPU ์†Œ๋น„๋งŒํผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋น ๋ฅธ ์ฝ๊ธฐ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋Š” ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์†๋„๋ฅผ ๋Šฆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ถˆํ•„์š”ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ชจ๋“  ๊ฒƒ์„ ๋ณต์›ํ•œ ํ›„ ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค ๊ทธ๋ฆฌ๊ณ  ์ถฉ๋ถ„ํžˆ ๋ดค์œผ๋‹ˆ ์˜ฌ๋ ‰ ๋ฐ”๋ฅดํˆฌ๋…ธํ”„(Oleg Bartunov)์˜ ๋ณด๊ณ ์„œ, ๋‚˜๋Š” "๋Œ€๋‹จํ•œ" ์ˆ™์ฒญ์„ ์กฐ์งํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ๋ณ„๋กœ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ธฐ๋ณธ ํ‚ค์— ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ๋ฑ์Šค์™€ ๊ณ ์œ  ์—ด์— ์œ ์‚ฌํ•œ "์ˆ˜๋™" ์ธ๋ฑ์Šค๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Postgres๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ž์ฒด์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ๋ฑ์Šค๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ชฉ์ ์œผ๋กœ ์ง„๋‹จ์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. Duplicate_indexes.

๋ฌธ์ œ XNUMX - ๊ต์ฐจ ์ธ๋ฑ์Šค

๋Œ€๋ถ€๋ถ„์˜ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋Š” ๋‹จ์ผ ์—ด์— ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ ์ฐจ์ ์œผ๋กœ ์ด ๋น„์ฆˆ๋‹ˆ์Šค๋ฅผ ์ฒ ์ €ํžˆ ๊ฒฝํ—˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์—ฌ๋Ÿฌ ์—ด์„ ํฌํ•จํ•˜๋Š” ๋” ๋ณต์žกํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. A, A + B, A + B + C ๋“ฑ๋“ฑ. ์ด ์ธ๋ฑ์Šค ์ค‘ ์ฒ˜์Œ ๋‘ ๊ฐœ๋Š” ์„ธ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์ ‘๋‘์‚ฌ์ด๋ฏ€๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋˜ํ•œ ๋งŽ์€ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•˜๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ง„๋‹จ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ต์ฐจ_์ธ๋ฑ์Šค.

๋ฌธ์ œ XNUMX - ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ์™ธ๋ž˜ ํ‚ค

Postgres๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฑ์—… ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ƒํ™ฉ์—์„œ ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹ฌ์ง€์–ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค... ๋‹น๋ถ„๊ฐ„์€...

์šฐ๋ฆฌ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์ผ์ •์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๊ณ  ํ…Œ์ŠคํŠธ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์šฐ๋Š” ์ž‘์—…์ด ๋งˆ์Šคํ„ฐ ํ˜ธ์ŠคํŠธ์— ์˜ํ•ด ์šฐ๋ฆฌ์—๊ฒŒ "์ถ”๊ฐ€"๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. CPU์™€ IO๊ฐ€ ๋‚ญ๋น„๋˜๊ณ  ์š”์ฒญ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ๋˜์—ˆ์œผ๋ฉฐ ์„œ๋น„์Šค๋Š” XNUMX๊ฐœ์˜€์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ๋ถ„์„ pg_stat_activity ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

delete from <table> where id in (โ€ฆ)

๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ์—๋Š” ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— id๋ณ„ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์—ˆ๊ณ , ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‚ญ์ œ๋œ ๋ ˆ์ฝ”๋“œ๋Š” ๊ฑฐ์˜ ์—†์—ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•  ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฉ‹์ง„ ๋ถ„์ด ๊ตฌ์ถœํ•˜๋Ÿฌ ์˜ค์…จ์–ด์š” ์„ค๋ช…ํ•˜๋‹ค ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๋„ ์žˆ๋Š”๋ฐ ๊ด€๋ จ ํ…Œ์ด๋ธ” ์ค‘ ํ•˜๋‚˜์—์„œ ์ด ๊ฒ€์‚ฌ๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ฐจ ์Šค์บ” ์ ์ ˆํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ ์ง„๋‹จ์ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. foreign_keys_without_index.

๋ฌธ์ œ XNUMX โ€“ ์ธ๋ฑ์Šค์˜ null ๊ฐ’

๊ธฐ๋ณธ์ ์œผ๋กœ Postgres๋Š” btree ์ธ๋ฑ์Šค์— null ๊ฐ’์„ ํฌํ•จํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๋Ÿฌํ•œ null์„ ๋ถ€์ง€๋Ÿฐํžˆ ๋ฒ„๋ฆฌ๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค(์ง„๋‹จ indexes_with_null_values), ์œ ํ˜•๋ณ„๋กœ Null ํ—ˆ์šฉ ์—ด์— ๋ถ€๋ถ„ ์ธ๋ฑ์Šค ์ƒ์„ฑ where <A> is not null. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ธ๋ฑ์Šค ์ค‘ ํ•˜๋‚˜์˜ ํฌ๊ธฐ๋ฅผ 1877MB์—์„œ 16KB๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค ์ค‘ ํ•˜๋‚˜์—์„œ๋Š” ์ธ๋ฑ์Šค์—์„œ null ๊ฐ’์„ ์ œ์™ธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๊ธฐ๊ฐ€ ์ด 16%(์ ˆ๋Œ€ ์ˆ˜์น˜๋กœ 4.3GB) ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์ˆ˜์ •์œผ๋กœ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํฌ๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

๋ฌธ์ œ XNUMX โ€“ ๊ธฐ๋ณธ ํ‚ค ๋ถ€์กฑ

๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํŠน์„ฑ์ƒ ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šค์˜ MVCC ์ด๋Ÿฐ ์ƒํ™ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ๊ณ ์ฐฝ์ฆ์ฃฝ์€ ๋ ˆ์ฝ”๋“œ ์ˆ˜๊ฐ€ ๋งŽ์•„ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ปค์ง€๋Š” ๊ฒฝ์šฐ. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ˜‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ˆœ์ง„ํ•˜๊ฒŒ ๋ฏฟ์—ˆ๊ณ , ์šฐ๋ฆฌ ๊ธฐ์ง€์—๋Š” ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ˆœ์ง„ํ•˜๊ฒŒ ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ์™€์šฐ!!! ํ‰๋ฒ”ํ•œ ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค... ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฉ์ฒญํ•˜๊ณ  ์ˆœ์ง„ํ–ˆ๋Š”์ง€...

์–ด๋Š ๋‚  ๋ฉ‹์ง„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํ™œ๋ฐœํžˆ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๊ทœ๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ‘์ž๊ธฐ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ฅผ +100GB๋กœ ๋Š˜๋ ธ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋ถ€๋„๋Ÿฌ์šด ์ผ์ด์—ˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๋ถˆ์šด์€ ๊ฑฐ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ž๋™ ์ง„๊ณต ์ž‘์—…์ด 15์‹œ๊ฐ„ ํ›„์— ์ข…๋ฃŒ๋œ ํ›„ ๋ฌผ๋ฆฌ์  ์œ„์น˜๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  VACUUM FULL์„ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. pg_repack. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๊ทธ๊ฒƒ์€ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค pg_repack ๊ธฐ๋ณธ ํ‚ค๋‚˜ ๊ธฐํƒ€ ๊ณ ์œ ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด ์—†์ด ํ…Œ์ด๋ธ”์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ณ  ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ง„๋‹จ์ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค tables_without_primary_key.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์—์„œ๋Š” 0.1.5 ๋Š˜์–ด๋‚˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ ์‹œ์— ๋Œ€์‘ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ XNUMX, XNUMX - ์ธ๋ฑ์Šค ๋ถ€์กฑ ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค

๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ง„๋‹จ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. tables_with_missing_indexes ะธ ๋ฏธ์‚ฌ์šฉ_์ธ๋ฑ์Šค โ€“ ๋น„๊ต์  ์ตœ๊ทผ์— ์ตœ์ข… ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์š”์ ์€ ๊ทธ๋ƒฅ ๊ฐ€์ ธ์™€์„œ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์ž‘์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณต์ œ๋ณธ์ด ์žˆ๋Š” ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ˜ธ์ŠคํŠธ๋งˆ๋‹ค ์ฝ๊ธฐ ๋กœ๋“œ๊ฐ€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ผ๋ถ€ ํ˜ธ์ŠคํŠธ์˜ ์ผ๋ถ€ ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ํ†ต๊ณ„๋ฅผ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ†ต๊ณ„ ์žฌ์„ค์ • ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—๋„ ํ•„์š”ํ•˜๋ฉฐ ๋งˆ์Šคํ„ฐ์—์„œ๋งŒ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”์— ๋ˆ„๋ฝ๋œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜์‹ญ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์œผ๋กœ์„œ

๋ฌผ๋ก  ๊ฑฐ์˜ ๋ชจ๋“  ์ง„๋‹จ์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์™ธ ๋ชฉ๋ก. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ ์†ํ•˜๊ฒŒ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์˜ค๋ž˜๋œ ์˜ค๋ฅ˜๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ง„๋‹จ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋กค์•„์›ƒํ•œ ์งํ›„ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด ๋„์„œ๊ด€์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์˜ˆ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ๋ชจ.

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ์ธ๋ฑ์Šค์™€ ํŒฝ์ฐฝ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธฐ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์ •๋ง ๊ทธ๋žฌ์œผ๋ฉด ์ข‹๊ฒ ์–ด pg-์ƒ‰์ธ-๊ฑด๊ฐ• ์œ ์šฉํ•˜๊ณ  ์ˆ˜์š”๊ฐ€ ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ง„๋‹จ์„ ์ œ์•ˆํ•จ์œผ๋กœ์จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์— ๊ธฐ์—ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€