์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ „์ฒด ๊ธฐ๋Šฅ์œผ๋กœ ๋ณต์›ํ•œ ์ฒซ ๋ฒˆ์งธ ์„ฑ๊ณต์ ์ธ ๊ฒฝํ—˜์„ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ฐ˜๋…„ ์ „์— Postgres DBMS๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๊ทธ ์ „์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

์ €๋Š” ๋Œ€๊ทœ๋ชจ IT ํšŒ์‚ฌ์—์„œ ์ค€ DevOps ์—”์ง€๋‹ˆ์–ด๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ๊ณ ๋ถ€ํ•˜ ์„œ๋น„์Šค์šฉ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์„ฑ๋Šฅ, ์œ ์ง€ ๊ด€๋ฆฌ, ๋ฐฐํฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ‘œ์ค€ ์ž‘์—…์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Django๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์—…๋ฐ์ดํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋ณ€๊ฒฝ), ์ด ํ”„๋กœ์„ธ์Šค ์ „์— ๋งŒ์ผ์„ ๋Œ€๋น„ํ•ด ํ‘œ์ค€ pg_dump ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋คํ”„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋คํ”„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค(Postgres ๋ฒ„์ „ 9.5).

pg_dump: Oumping the contents of table โ€œws_log_smevlogโ€ failed: PQgetResult() failed.
pg_dump: Error message from server: ERROR: invalid page in block 4123007 of relatton base/16490/21396989
pg_dump: The command was: COPY public.ws_log_smevlog [...]
pg_dunp: [parallel archtver] a worker process dled unexpectedly

๊ณค์ถฉ "๋ธ”๋ก์˜ ์ž˜๋ชป๋œ ํŽ˜์ด์ง€" ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ๋ฌธ์ œ๋ฅผ ๋งํ•˜๋Š”๋ฐ ์ด๋Š” ๋งค์šฐ ๋‚˜์ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํฌ๋Ÿผ์—์„œ ๋‹ค์Œ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์™„์ „ ์ง„๊ณต ์˜ต์…˜ ํฌํ•จ zero_damaged_pages ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด. ์ž, ํ•œ๋ฒˆ ํ•ด๋ณด์ž...

ํšŒ๋ณต ์ค€๋น„

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

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜์—๊ฒŒ ์ ํ•ฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋คํ”„๋กœ ์ œํ•œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋œ ํ…Œ์ด๋ธ”์€ ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค(์˜ต์…˜ -T, --exclude-ํ…Œ์ด๋ธ”=ํ…Œ์ด๋ธ” pg_dump์—์„œ).

์„œ๋ฒ„๊ฐ€ ๋ฌผ๋ฆฌ์ ์ด์–ด์„œ ์Šค๋ƒ…์ƒท์„ ์ฐ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ ํ™•์ธ

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

๋‚ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋งˆ์šดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "/srv" ์œ ํ˜•์€ ext4์˜€์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘์ง€: systemctl ์ค‘์ง€ [์ด๋ฉ”์ผ ๋ณดํ˜ธ] ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์šดํŠธ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด์†Œํ”„:
lsof +D /srv

๋˜ํ•œ Redis ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Redis ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ค‘์ง€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. "/srv". ๋‹ค์Œ์œผ๋กœ ๋งˆ์šดํŠธ๋ฅผ ํ•ด์ œํ–ˆ์Šต๋‹ˆ๋‹ค. / srv (๋งˆ์šดํŠธ).

์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. e2fsck ์Šค์œ„์น˜ -f (ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๊นจ๋—ํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฒฝ์šฐ์—๋„ ๊ฐ•์ œ ๊ฒ€์‚ฌ):

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

๋‹ค์Œ์œผ๋กœ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋คํ”„ 2fs (sudo dumpe2fs /dev/mapper/gu2โ€”sys-srv | grep ํ™•์ธ๋จ) ๊ฒ€์‚ฌ๊ฐ€ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

e2fsck ext4 ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์›์„ ๊ณ„์† ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค extXNUMX ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ง„๊ณต์ฒญ์†Œ๊ธฐ ๊ฐ€๋“ (๋ฌผ๋ก  ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ๋งˆ์šดํŠธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).

๋ฌผ๋ฆฌ์  ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ๋””์Šคํฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค(๋‹ค์Œ์„ ํ†ตํ•ด). smartctl -a /dev/XXX) ๋˜๋Š” RAID ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์— ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ œ ๊ฒฝ์šฐ์—๋Š” RAID๊ฐ€ 'ํ•˜๋“œ์›จ์–ด'์ธ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์–ด ๋กœ์ปฌ ๊ด€๋ฆฌ์ž์—๊ฒŒ RAID ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค(์„œ๋ฒ„๋Š” ์ €์—๊ฒŒ์„œ ์ˆ˜๋ฐฑ ํ‚ฌ๋กœ๋ฏธํ„ฐ ๋–จ์–ด์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ™•์‹คํžˆ ๋ณต์›์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋„ 1: zero_damaged_pages

์Šˆํผ์œ ์ € ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์œผ๋กœ psql์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์Šˆํผ์œ ์ €๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š”... ์˜ต์…˜ zero_damaged_pages ์˜ค์ง ๊ทธ ์‚ฌ๋žŒ๋งŒ์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šค์ž…๋‹ˆ๋‹ค.

psql -h 127.0.0.1 -U postgres -s [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค_์ด๋ฆ„]

์˜ต์…˜ zero_damaged_pages ์ฝ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๋ ค๋ฉด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(postgrespro ์›น์‚ฌ์ดํŠธ์—์„œ):

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

์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ…Œ์ด๋ธ”์„ ์™„์ „ํžˆ ๋น„์šฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

VACUUM FULL VERBOSE

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)
๋ถˆํ–‰ํžˆ๋„ ๋ถˆ์šด์ž…๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

INFO: vacuuming "โ€œpublic.ws_log_smevlogโ€
WARNING: invalid page in block 4123007 of relation base/16400/21396989; zeroing out page
ERROR: unexpected chunk number 573 (expected 565) for toast value 21648541 in pg_toast_106070

pg_toast โ€“ ํ•œ ํŽ˜์ด์ง€(๊ธฐ๋ณธ์ ์œผ๋กœ 8kb)์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Poetgres์— "๊ธด ๋ฐ์ดํ„ฐ"๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

์‹œ๋„ 2: ์žฌ์ƒ‰์ธ

Google์˜ ์ฒซ ๋ฒˆ์งธ ์กฐ์–ธ์€ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋ถ„ ๋™์•ˆ ๊ฒ€์ƒ‰ํ•œ ๋์— ๋‘ ๋ฒˆ์งธ ํŒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ‰ ์ธ ์†์ƒ๋œ ํ…Œ์ด๋ธ”. ๋‚˜๋Š” ์ด ์กฐ์–ธ์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ณด์•˜์ง€๋งŒ ์ž์‹ ๊ฐ์„ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

reindex table ws_log_smevlog

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

์žฌ์ƒ‰ ์ธ ๋ฌธ์ œ์—†์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ์ง„๊ณต์ด ๊ฐ€๋“ ์ฐธ ๋น„์Šทํ•œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹คํŒจ์— ์ต์ˆ™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐ๋„ท์—์„œ ์กฐ์–ธ์„ ๋” ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ๋‹ค์†Œ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ัั‚ะฐั‚ัŒัŽ.

์‹œ๋„ 3: SELECT, LIMIT, OFFSET

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

for ((i=0; i<"Number_of_rows_in_nodes"; i++ )); do psql -U "Username" "Database Name" -c "SELECT * FROM nodes LIMIT 1 offset $i" >/dev/null || echo $i; done

๋‚ด ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ด๋ธ”์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. + 1 628 991 ์œค๊ณฝ! ์ž˜ ์ฑ™๊ฒจ์•ผ ํ–ˆ์–ด์š” ๋ฐ์ดํ„ฐ ํŒŒํ‹ฐ์…”๋‹, ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ณ„๋„์˜ ํ† ๋ก  ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ํ† ์š”์ผ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” tmux์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์ž ์ž๋ฆฌ์— ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

for ((i=0; i<1628991; i++ )); do psql -U my_user -d my_database -c "SELECT * FROM ws_log_smevlog LIMIT 1 offset $i" >/dev/null || echo $i; done

์•„์นจ๊นŒ์ง€ ๋‚˜๋Š” ์ƒํ™ฉ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋†€๋ž๊ฒŒ๋„ 20์‹œ๊ฐ„ ํ›„์—๋Š” ๋ฐ์ดํ„ฐ์˜ 2%๋งŒ ์Šค์บ”๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค! 50์ผ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์‹ถ์ง€ ์•Š์•˜์–ด์š”. ๋˜ ๋‹ค๋ฅธ ์™„์ „ํ•œ ์‹คํŒจ.

ํ•˜์ง€๋งŒ ๋‚˜๋Š” ํฌ๊ธฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์Šค์บ”ํ•˜๋Š” ๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ(๋‹ค์‹œ postgrespro์— ์žˆ์Œ)์—์„œ ๋‹ค์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

OFFSET์€ ํ–‰ ์ถœ๋ ฅ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ง€์ •๋œ ์ˆ˜์˜ ํ–‰์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
OFFSET๊ณผ LIMIT๊ฐ€ ๋ชจ๋‘ ์ง€์ •๋œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ๋จผ์ € OFFSET ํ–‰์„ ๊ฑด๋„ˆ๋›ด ๋‹ค์Œ LIMIT ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•œ ํ–‰ ์ˆ˜ ๊ณ„์‚ฐ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

LIMIT๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฒฐ๊ณผ ํ–‰์ด ํŠน์ • ์ˆœ์„œ๋กœ ๋ฐ˜ํ™˜๋˜๋„๋ก ORDER BY ์ ˆ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ํ–‰ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์œ„์˜ ๋ช…๋ น์€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ฃผ๋ฌธ, ๊ฒฐ๊ณผ๊ฐ€ ์ž˜๋ชป๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜์งธ, Postgres๋Š” ๋จผ์ € OFFSET ํ–‰์„ ์Šค์บ”ํ•˜๊ณ  ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. OFFSET ์ƒ์‚ฐ์„ฑ์€ ๋”์šฑ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‹œ๋„ 4: ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋คํ”„๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๊ฒ‰๋ณด๊ธฐ์—๋Š” ํ›Œ๋ฅญํ•ด ๋ณด์ด๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋คํ”„๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋…น์Œ๋œ ์ค„์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋จผ์ € ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ws_log_smevlog:

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. "์‹ ๋ถ„์ฆ", ํ–‰์˜ ๊ณ ์œ  ์‹๋ณ„์ž(์นด์šดํ„ฐ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš์€ ์ด๋žฌ์Šต๋‹ˆ๋‹ค.

  1. ํ…์ŠคํŠธ ํ˜•์‹(SQL ๋ช…๋ น ํ˜•์‹)์œผ๋กœ ๋คํ”„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ํŠน์ • ์‹œ์ ์—์„œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋คํ”„๊ฐ€ ์ค‘๋‹จ๋˜์ง€๋งŒ ํ…์ŠคํŠธ ํŒŒ์ผ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋””์Šคํฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  3. ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋์„ ๋ณด๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋œ ๋งˆ์ง€๋ง‰ ์ค„์˜ ์‹๋ณ„์ž(id)๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ…์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๋คํ”„๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

pg_dump -U my_user -d my_database -F p -t ws_log_smevlog -f ./my_dump.dump

์˜ˆ์ƒ๋Œ€๋กœ ๋คํ”„๊ฐ€ ๋™์ผํ•œ ์˜ค๋ฅ˜๋กœ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

pg_dump: Error message from server: ERROR: invalid page in block 4123007 of relatton base/16490/21396989

๋” ๋‚˜์•„๊ฐ€ ๊ผฌ๋ฆฌ ๋คํ”„์˜ ๋๋ถ€๋ถ„์„ ๋ณด๋‹ˆ (๊ผฌ๋ฆฌ -5 ./my_dump.dump) id๊ฐ€ ์žˆ๋Š” ๋ผ์ธ์—์„œ ๋คํ”„๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. 186 525. โ€œ๊ทธ๋ž˜์„œ ๋ฌธ์ œ๋Š” ID 186 526์— ์žˆ๋Š” ์ค„์— ์žˆ๊ณ , ๊นจ์ ธ์„œ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!โ€ โ€“ ๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ยซID=186529์ธ ws_log_smevlog์—์„œ *๋ฅผ ์„ ํƒํ•˜์„ธ์š”."์ด ์ค„์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค... ์ธ๋ฑ์Šค๊ฐ€ 186 - 530์ธ ํ–‰๋„ ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ "ํ›Œ๋ฅญํ•œ ์•„์ด๋””์–ด"๋Š” ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‚˜๋Š” ์™œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ๋•Œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  "๋ฐ๋“œ ํŠœํ”Œ"๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ž๋™ ์ง„๊ณตํ™” ์ด ์ค„์„ ์‚ญ์ œ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์ด ์ค„์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ดํ•˜์ž๋ฉด, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  autovacuum์ด ํ™œ์„ฑํ™”๋˜๋ฉด ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ๋„ 5: SELECT, FROM, WHERE id=

์‹คํŒจ๋Š” ์šฐ๋ฆฌ๋ฅผ ๋”์šฑ ๊ฐ•ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฒฐ์ฝ” ํฌ๊ธฐํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋๊นŒ์ง€ ๋‚˜์•„๊ฐ€ ์ž์‹ ๊ณผ ์ž์‹ ์˜ ๋Šฅ๋ ฅ์„ ๋ฏฟ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์„ ์‹œ๋„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ(์œ„ ์ฐธ์กฐ)๋ฅผ ์•Œ๋ฉด ๊ณ ์œ ํ•œ(๊ธฐ๋ณธ ํ‚ค) id ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์—๋Š” 1๊ฐœ์˜ ํ–‰์ด ์žˆ๊ณ  id ์ˆœ์„œ๋Œ€๋กœ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for ((i=1; i<1628991; i=$((i+1)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id=$i" >/dev/null || echo $i; done

๋ˆ„๊ตฐ๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์„ ํ–‰๋ณ„๋กœ ์Šค์บ”ํ•˜๊ณ  stdout์„ ๋‹ค์Œ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. / dev / null, ๊ทธ๋Ÿฌ๋‚˜ SELECT ๋ช…๋ น์ด ์‹คํŒจํ•˜๋ฉด ์˜ค๋ฅ˜ ํ…์ŠคํŠธ๊ฐ€ ์ธ์‡„๋˜๊ณ (stderr์ด ์ฝ˜์†”๋กœ ์ „์†ก๋จ) ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋œ ์ค„์ด ์ธ์‡„๋ฉ๋‹ˆ๋‹ค(|| ๋•๋ถ„์— ์„ ํƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋ช…๋ น์˜ ๋ฐ˜ํ™˜ ์ฝ”๋“œ). 0))์ด ์•„๋‹™๋‹ˆ๋‹ค.

์šด์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ํ•„๋“œ์— ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. id:

์‹คํŒจ ํ›„ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต๊ตฌํ•œ ์ฒซ ๋ฒˆ์งธ ๊ฒฝํ—˜(relatton base/4123007์˜ ๋ธ”๋ก 16490์— ์žˆ๋Š” ์ž˜๋ชป๋œ ํŽ˜์ด์ง€)

์ด๋Š” ์›ํ•˜๋Š” ID๊ฐ€ ์žˆ๋Š” ๋ผ์ธ์„ ์ฐพ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ๋Š” ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž, ๋‹ค์Œ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. tmux ๊ทธ๋ฆฌ๊ณ  ์ž๋Ÿฌ ๊ฐ€์ž.

์•„์นจ๊นŒ์ง€ ๋‚˜๋Š” ์•ฝ 90๊ฐœ์˜ ํ•ญ๋ชฉ์„ ์กฐํšŒํ•œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ, ์ด๋Š” 000%๊ฐ€ ์กฐ๊ธˆ ๋„˜๋Š” ์ˆ˜์น˜์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฉ๋ฒ•(5%)๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ํƒ์›”ํ•œ ๊ฒฐ๊ณผ! ํ•˜์ง€๋งŒ 2์ผ์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์‹ซ์—ˆ์–ด์š”...

์‹œ๋„ 6: SELECT, FROM, WHERE id >= ๋ฐ id

๊ณ ๊ฐ์€ ์šฐ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์šฉ ์„œ๋ฒ„๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋“€์–ผ ํ”„๋กœ์„ธ์„œ ์ธํ…” ์ œ์˜จ E5-2697 v2, ์šฐ๋ฆฌ ์œ„์น˜์—๋Š” ๋ฌด๋ ค 48๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ์„œ๋ฒ„์˜ ๋กœ๋“œ๋Š” ํ‰๊ท  ์ˆ˜์ค€์ด์—ˆ๊ณ  ์•ฝ 20๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฌธ์ œ ์—†์ด ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. RAM๋„ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ 384GB!

๋”ฐ๋ผ์„œ ๋ช…๋ น์„ ๋ณ‘๋ ฌํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

for ((i=1; i<1628991; i=$((i+1)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id=$i" >/dev/null || echo $i; done

์—ฌ๊ธฐ์„œ๋Š” ์•„๋ฆ„๋‹ต๊ณ  ์šฐ์•„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ณ‘๋ ฌํ™” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. 0-1628991 ๋ฒ”์œ„๋ฅผ ์ˆ˜๋™์œผ๋กœ 100๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๋‹ค์Œ ํ˜•์‹์˜ 000๊ฐœ ๋ช…๋ น์„ ๋ณ„๋„๋กœ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

for ((i=N; i<M; i=$((i+1)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id=$i" >/dev/null || echo $i; done

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

for ((i=N; i<M; i=$((i+1000)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id>=$i and id<$((i+1000))" >/dev/null || echo $i; done

tmux ์„ธ์…˜์—์„œ 16๊ฐœ์˜ ์ฐฝ์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1) for ((i=0; i<100000; i=$((i+1000)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id>=$i and id<$((i+1000))" >/dev/null || echo $i; done
2) for ((i=100000; i<200000; i=$((i+1000)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id>=$i and id<$((i+1000))" >/dev/null || echo $i; done
โ€ฆ
15) for ((i=1400000; i<1500000; i=$((i+1000)) )); do psql -U my_user -d my_database -c "SELECT * FROM ws_log_smevlog where id>=$i and id<$((i+1000))" >/dev/null || echo $i; done
16) for ((i=1500000; i<1628991; i=$((i+1000)) )); do psql -U my_user -d my_database  -c "SELECT * FROM ws_log_smevlog where id>=$i and id<$((i+1000))" >/dev/null || echo $i; done

ํ•˜๋ฃจ ํ›„ ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค! ์ฆ‰, XXX ๋ฐ ZZZ ๊ฐ’์€ ๋” ์ด์ƒ ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ERROR:  missing chunk number 0 for toast value 37837571 in pg_toast_106070
829000
ERROR:  missing chunk number 0 for toast value XXX in pg_toast_106070
829000
ERROR:  missing chunk number 0 for toast value ZZZ in pg_toast_106070
146000

์ด๋Š” ์„ธ ์ค„์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ ๋ ˆ์ฝ”๋“œ์˜ id๋Š” 829~000, ์„ธ ๋ฒˆ์งธ ๋ฌธ์ œ ๋ ˆ์ฝ”๋“œ์˜ id๋Š” 830~000 ์‚ฌ์ด์˜€์œผ๋ฉฐ, ๋‹ค์Œ์œผ๋กœ ๋ฌธ์ œ ๋ ˆ์ฝ”๋“œ์˜ ์ •ํ™•ํ•œ id ๊ฐ’์„ ์ฐพ์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋ก์ด ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ 146๋‹จ๊ณ„๋กœ ์กฐ์‚ฌํ•˜๊ณ  ID๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

for ((i=829000; i<830000; i=$((i+1)) )); do psql -U my_user -d my_database -c "SELECT * FROM ws_log_smevlog where id=$i" >/dev/null || echo $i; done
829417
ERROR:  unexpected chunk number 2 (expected 0) for toast value 37837843 in pg_toast_106070
829449
for ((i=146000; i<147000; i=$((i+1)) )); do psql -U my_user -d my_database -c "SELECT * FROM ws_log_smevlog where id=$i" >/dev/null || echo $i; done
829417
ERROR:  unexpected chunk number ZZZ (expected 0) for toast value XXX in pg_toast_106070
146911

ํ•ดํ”ผ์—”๋”ฉ

๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ผ์ธ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. psql์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋™ํ•˜์—ฌ ์‚ญ์ œ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

my_database=# delete from ws_log_smevlog where id=829417;
DELETE 1
my_database=# delete from ws_log_smevlog where id=829449;
DELETE 1
my_database=# delete from ws_log_smevlog where id=146911;
DELETE 1

๋†€๋ž๊ฒŒ๋„ ์˜ต์…˜์ด ์—†์–ด๋„ ๋ฌธ์ œ ์—†์ด ํ•ญ๋ชฉ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. zero_damaged_pages.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ง„๊ณต์ด ๊ฐ€๋“ ์ฐธ (์ด๋ ‡๊ฒŒ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. pg_dump. ๋คํ”„๋Š” ์˜ค๋ฅ˜ ์—†์ด ์ดฌ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ๋ฉ์ฒญํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์จ์€ ๋์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋งŽ์€ ์‹คํŒจ ๋์— ์šฐ๋ฆฌ๋Š” ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌ์˜ ๋ง์”€๊ณผ ๊ฒฐ๋ก 

์ด๊ฒƒ์ด ์‹ค์ œ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณต์›ํ•œ ์ฒซ ๊ฒฝํ—˜์˜ ๊ฒฐ๊ณผ์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ฒฝํ—˜์„ ์˜ค๋žซ๋™์•ˆ ๊ธฐ์–ตํ•  ๊ฒƒ์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์„œ๋ฅผ ๋Ÿฌ์‹œ์•„์–ด๋กœ ๋ฒˆ์—ญํ•ด ์ค€ PostgresPro์—๊ฒŒ ๊ฐ์‚ฌ ์ธ์‚ฌ๋ฅผ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์™„์ „ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ๊ฐ•์ขŒ, ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋™์•ˆ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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