๋ฌธ์ œ ํ•ด๊ฒฐ

์งˆ๋ฌธ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋‹ค์Œ ํŽ˜์ด์ง€ ์ค‘ ํ•˜๋‚˜์—์„œ ์ด๋ฏธ ํ•ด๊ฒฐ๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์˜ ์ฃผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
ํ˜„์žฌ ์ž‘์—…์˜ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์€ ์ž‘์—… ์™„๋ฃŒ ์‹œ์—๋งŒ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๊ณ  ๋˜๋Š” ๊ธฐํƒ€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

gcloud sql operations list ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํŠน์ • Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์ž‘์—…์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

์ฃผ๋ฌธํ˜• ๋ฐฑ์—… ์ž‘์—…์„ ์‹คํ–‰ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์ž‘์—…์„ ์‹œ์ž‘ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ํ…์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ ์ •๋ณด์˜ ๊ฒฝ์šฐ ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋กœ๊ทธ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • cloudsql.googleapis.com/postgres.log
  • Cloud ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์–ด ์žˆ๊ณ  ์ด๋ฅผ ๋ณด๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ cloudaudit.googleapis.com/activity๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ญ์ œ๋œ ํ›„์—๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐฑ์—…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์ตœ์ข… ๋ฐฑ์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์›ํ•˜๋ฉด Cloud SQL์—์„œ ๋ฐฑ์—…๋„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณต๊ตฌ ๋ฐฑ์—…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์„ ์™„๋ฃŒํ•œ ๊ฒฝ์šฐ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” Cloud Storage์— ์“ฐ์ด๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.

์ž๋™ ๋ฐฑ์—…์ด ์žฅ์‹œ๊ฐ„ ์ค‘๋‹จ๋˜๊ณ  ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ฐฑ์—…์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…์„ ์ทจ์†Œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ๊ฐ์ง€์›์— ์ธ์Šคํ„ด์Šค force restart๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

SQL ๋คํ”„๋ฅผ ๋ณต์›ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ž๋™ ๋ฐฑ์—… ๋ณด๊ด€ ์ผ์ˆ˜๋ฅผ 7์ผ์—์„œ 30์ผ ์ด์ƒ์œผ๋กœ ๋Š˜๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 1๊ฐœ๋ถ€ํ„ฐ 365๊ฐœ๊นŒ์ง€ ์œ ์ง€ํ•  ์ž๋™ ๋ฐฑ์—… ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž๋™ ๋ฐฑ์—…์€ ๊ตฌ์„ฑ๋œ ๋ณด๊ด€ ๊ฐ’์— ๋”ฐ๋ผ ์ •๊ธฐ์ ์œผ๋กœ ํ”„๋ฃจ๋‹๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ ๋ฐฑ์—…์€ ํ˜„์žฌ ํ‘œ์‹œ๋˜๋Š” ๋ฐฑ์—…๋ฟ์ž…๋‹ˆ๋‹ค.

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

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

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ autovacuum์— ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ปค์Šคํ…€ ์ฝ”๋“œ์— ์„ค์ •๋œ ์—ฐ๊ฒฐ ์žฌ์‹œ๋„ ๋กœ์ง์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณต๊ตฌ๋  ๋•Œ๊นŒ์ง€ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์˜€๋‹ค๊ฐ€ ์ฒœ์ฒœํžˆ ๋‹ค์‹œ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค.
๋ฐฑ์—…/๋ณต์› ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋์Œ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์ด ๋กœ๊น…๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CREATE UNLOGGED TABLE ....

์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ”์€ ๋ฐฑ์—…์—์„œ ๋ณต์›์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์˜ ์ฝ˜ํ…์ธ ๋Š” HA ์ธ์Šคํ„ด์Šค์˜ ์žฅ์•  ์กฐ์น˜ ์‹œ ์œ ์‹ค๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์€ postgres ๋น„์ •์ƒ ์ข…๋ฃŒ ์‹œ ์œ ์‹ค๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์€ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์— ๋ณต์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์€ ๋ฐฑ์—… ๋ณต์› ์ค‘์— ์ž๋™์œผ๋กœ ์™„์ „ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฐฑ์—…์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ”์„ ๋ณต์›ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ๋กœ๊น…๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ณต์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํŒŒ์ผ๋กœ ๋คํ”„ํ•˜๊ณ  ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ๋Œ€ํ•˜์—ฌ SET LOGGED๋กœ ALTER TABLEํ•˜์—ฌ ๋คํ”„๋œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ ์ทจ์†Œ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: You can't cancel operation [operation-ID] because this operation isn't in progress.

์™„๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์‹คํŒจํ–ˆ๊ฑฐ๋‚˜ ์ทจ์†Œ๋œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์„ ์ทจ์†Œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: You can't cancel operation [operation-ID] because Cloud SQL doesn't support the cancellation of an [operation-type] operation.

Cloud SQL์—๋Š” IMPORT ๋˜๋Š” EXPORT ์ด์™ธ์˜ ์ž‘์—… ์œ ํ˜•์ด ์žˆ์œผ๋ฏ€๋กœ Cloud SQL์—์„œ๋Š” ์ž‘์—… ์ทจ์†Œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: The [operation-type] operation isn't cancelled. Wait and retry in a few seconds.

Cloud SQL์—์„œ ํ˜„์žฌ ๊ฐ€์ ธ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์„ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”. ๋ฌธ์ œ๊ฐ€ ๊ณ„์†๋˜๋ฉด Google Cloud ์ง€์›ํŒ€์— ๋ฌธ์˜ํ•˜์„ธ์š”.

ํด๋ก 

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
constraints/sql.restrictAuthorizedNetworks ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ํด๋ก ์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ํด๋ก  ์ž‘์—…์ด Authorized Networks ๊ตฌ์„ฑ์— ์˜ํ•ด ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Authorized Networks๊ฐ€ Google Cloud ์ฝ˜์†”์˜ ์—ฐ๊ฒฐ ์„น์…˜์—์„œ ๊ณต๊ฐœ IP ์ฃผ์†Œ์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ํด๋ก ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด Cloud SQL ์ธ์Šคํ„ด์Šค์—์„œ ๋ชจ๋“  Authorized Networks ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Authorized Networks ํ•ญ๋ชฉ ์—†์ด ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋ก ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•  ํ• ๋‹น๋œ IP ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ณ  ์†Œ์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง€์ •๋œ ๋ฒ”์œ„๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ก ๋œ ์ธ์Šคํ„ด์Šค๋Š” ๋ฌด์ž‘์œ„ ๋ฒ”์œ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

gcloud๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋ก ํ•˜๊ณ 
--allocated-ip-range-name ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋น„๊ณต๊ฐœ IP๋กœ ์ธ์Šคํ„ด์Šค ํด๋ก ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์—ฐ๊ฒฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
Aborted connection. ๋ฌธ์ œ ์›์ธ:
  • ๋„คํŠธ์›Œํ‚น ๋ถˆ์•ˆ์ •.
  • TCP ์—ฐ๊ฒฐ ์œ ์ง€ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ณผ๋ถ€ํ•˜๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„ ์—ฐ๊ฒฐ ์ˆ˜๋ช…์ด ์ดˆ๊ณผ๋˜์–ด ์„œ๋ฒ„์—์„œ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋„คํŠธ์›Œํฌ ์žฅ์• ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ์—ฐ๊ฒฐ ํ’€๋ง ๋ฐ ์žฌ์‹œ๋„์™€ ๊ฐ™์€ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ๊ฒฐ ํ’€๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค(๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์ •์ƒ์ ์œผ๋กœ ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„. ์žฌ์‹œ๋„ ๊ฐ„๊ฒฉ์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  2. ๋ฌด์ž‘์œ„ ๋ฐฑ์˜คํ”„๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์กฐํ•ฉํ•˜๋ฉด ์ œํ•œ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Certificate verify failed.

ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ธ์ฆ์„œ ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธ์ฆ์„œ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋‹ค์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

FATAL: database 'user' does not exist. gcloud sql connect --user๊ฐ€ ๊ธฐ๋ณธ postgres ์‚ฌ์šฉ์ž์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ์ž์™€ ์—ฐ๊ฒฐํ•œ ํ›„ ์‚ฌ์šฉ์ž๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋กœ๊ทธ์ธํ•˜๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT datname,
usename,
application_name as appname,
client_addr,
state,
now() - backend_start as conn_age,
now() - state_change as last_activity_age
FROM pg_stat_activity
WHERE backend_type = 'client backend'
ORDER BY 6 DESC
LIMIT 20
   

Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames.

ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๊ฐ€ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ๋Œ€์ฒด ์ด๋ฆ„์— ์žˆ๋Š” ์ฃผ์†Œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

verify-full ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” Node.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ servername ๋งค๊ฐœ๋ณ€์ˆ˜์— DNS ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์„ธ์š”. openssl์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธ์ฆ์„œ์—์„œ DNS ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด openssl x509 -in server-cert.pem -noout -text |grep 'DNS:'์ž…๋‹ˆ๋‹ค.

 ssl: {
  rejectUnauthorized: true,
  ca: fs.readFileSync("/path/to/server/CA"),
  servername: 'N-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx.us-central1.sql.goog'
}

์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. ํ• ๋‹น๋œ IP ๋ฒ”์œ„์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฃผ์†Œ๊ฐ€ ๋” ์ด์ƒ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์— ํ• ๋‹น๋œ IP ๋ฒ”์œ„์˜ ํฌ๊ธฐ๊ฐ€ /24๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค.
  • ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์— ํ• ๋‹น๋œ IP ๋ฒ”์œ„์˜ ํฌ๊ธฐ๊ฐ€ Cloud SQL ์ธ์Šคํ„ด์Šค ์ˆ˜์— ๋น„ํ•ด ๋„ˆ๋ฌด ์ž‘์Šต๋‹ˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ํ• ๋‹น๋œ IP ๋ฒ”์œ„์˜ ํฌ๊ธฐ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋” ์ปค์ง‘๋‹ˆ๋‹ค. ํ• ๋‹น๋œ ๋ฒ”์œ„ ํฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๊ธฐ์กด ํ• ๋‹น๋œ IP ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ IP ๋ฒ”์œ„๋ฅผ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ IP ์ฃผ์†Œ ๋ฒ”์œ„ ํ• ๋‹น์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ --allocated-ip-range-name ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ง€์ •๋œ IP ๋ฒ”์œ„๋งŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ”์œ„๋ฅผ ํ• ๋‹นํ•  ๊ฒฝ์šฐ ํ• ๋‹น์ด ๊ธฐ์กด ํ• ๋‹น๊ณผ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ IP ๋ฒ”์œ„๋ฅผ ๋งŒ๋“  ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VPC ํ”ผ์–ด๋ง์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
    

๊ธฐ์กด ํ• ๋‹น์„ ํ™•์žฅํ•˜๋Š” ๊ฒฝ์šฐ ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ๋Š˜๋ฆฌ๊ธฐ๋งŒ ํ•˜๊ณ  ์ค„์ด์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๋ž˜ ํ• ๋‹น์ด 10.0.10.0/24์ธ ๊ฒฝ์šฐ ์ƒˆ ํ• ๋‹น์„ ์ตœ์†Œ 10.0.10.0/23์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ /24 ํ• ๋‹น์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์กฐ๊ฑด(์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค ์œ ํ˜• ๊ทธ๋ฃน, ์ถ”๊ฐ€ ๋ฆฌ์ „)์— ๋Œ€ํ•ด /mask๋ฅผ 1๋งŒํผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋™์ผํ•œ ํ• ๋‹น์—์„œ ๋‘ ์ธ์Šคํ„ด์Šค ์œ ํ˜• ๊ทธ๋ฃน์„ ๋ชจ๋‘ ๋งŒ๋“ค๋ ค๋Š” ๊ฒฝ์šฐ /24์—์„œ /23์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด IP ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VPC ํ”ผ์–ด๋ง์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID
    
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID]. Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: HTTPError 400: Invalid request: Incorrect Service Networking config for instance: PROJECT_ID:INSTANCE_NAME:SERVICE_NETWORKING_NOT_ENABLED.

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Service Networking API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

gcloud services enable servicenetworking.googleapis.com \
--project=PROJECT_ID
    
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Failed to create subnetwork. Required 'compute.projects.get' permission for PROJECT_ID. ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด Service Networking API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ์‹œ์— ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— Service Networking API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ  ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋น„์Šค ๊ณ„์ •์ด ์‹œ์Šคํ…œ ์ „์ฒด์— ์ „ํŒŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: More than 3 subject alternative names are not allowed. ์ปค์Šคํ…€ SAN์„ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— DNS ์ด๋ฆ„์„ 3๊ฐœ ์ด์ƒ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค์— DNS ์ด๋ฆ„์„ 3๊ฐœ ์ด์ƒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Subject alternative names %s is too long. The maximum length is 253 characters. Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” DNS ์ด๋ฆ„์ด 253์ž(์˜๋ฌธ ๊ธฐ์ค€)๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Subject alternative name %s is invalid.

Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” DNS ์ด๋ฆ„์ด ๋‹ค์Œ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์™€์ผ๋“œ ์นด๋“œ ๋ฌธ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ›„ํ–‰ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • RFC 1034 ์‚ฌ์–‘์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
HTTP Error 409: Operation failed because another operation was already in progress. ์ธ์Šคํ„ด์Šค์— ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์š”์ฒญ์„ ์‹œ๋„ํ•˜์„ธ์š”.
HTTP Error 403: The service account does not have the required permissions for the bucket. ๋ฒ„ํ‚ท์ด ์žˆ๊ณ  ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋น„์Šค ๊ณ„์ •์— ๋ฒ„ํ‚ท์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” Storage Object Creator ์—ญํ• (roles/storage.objectCreator)์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Cloud Storage์— ๋Œ€ํ•œ IAM ์—ญํ• ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
CSV ๋‚ด๋ณด๋‚ด๊ธฐ์— ์„ฑ๊ณตํ–ˆ์ง€๋งŒ SQL ๋‚ด๋ณด๋‚ด๊ธฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. CSV ํ˜•์‹๊ณผ SQL ํ˜•์‹์€ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐฉ์‹์ด ์„œ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. SQL ํ˜•์‹์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‚ด๋ณด๋‚ด๋ฉฐ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CSV ํ˜•์‹์€ ๋‚ด๋ณด๋‚ด๊ธฐ์— ํฌํ•จํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์š”์†Œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CSV ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํ•ญ๋ชฉ๋งŒ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆผ Cloud SQL์€ ๋™์‹œ ๋™๊ธฐ ์ž‘์—…์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ ์˜ค๋ฅ˜ ๋คํ”„ ํŒŒ์ผ์— ์ง€์›๋˜์ง€ ์•Š๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋คํ”„ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ์ฐธ์กฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

pg_dumpall ์‚ฌ์šฉ ์˜ค๋ฅ˜ pg_dumpall ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ --global ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ˆ˜ํผ์œ ์ € ์—ญํ• ์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ด ์—ญํ• ์€ PostgreSQL์šฉ Cloud SQL์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ํฌํ•จ๋œ ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด --no-role-passwords ํ”Œ๋ž˜๊ทธ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๋ณด๋‚ด๊ธฐ ์ „์— ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์—…์ด ํƒ€์ž„์•„์›ƒ๋˜๋ฉด Could not receive data from client: Connection reset by peer. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Cloud Storage๊ฐ€ ํŠน์ • ๊ธฐ๊ฐ„(์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 7๋ถ„) ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ์ด ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋‚ด๋ณด๋‚ด๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pg_dump ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ž๋™ํ™”ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL์€ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—… ์ž๋™ํ™”์— ๋Œ€ํ•œ ์ด ๋ฌธ์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Cloud Scheduler, Pub/Sub, Cloud Run Functions ๊ฐ™์€ Google Cloud์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ์ž๋™ ๋‚ด๋ณด๋‚ด๊ธฐ ์‹œ์Šคํ…œ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์„ธ์…˜์˜ ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ ๋กœ๊ทธ์˜คํ”„ํ•˜๋ฉด ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๊ฐ„๋Œ€๋ฅผ ์‚ฌ์šฉ์ž ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ์›ํ•˜๋Š” ์‹œ๊ฐ„๋Œ€๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL์šฉ Cloud SQL์—์„œ๋Š” ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์„ธ์…˜์ด ๋‹ซํ˜€๋„ .conf ๊ตฌ์„ฑ์„ ๋ชจ๋ฐฉํ•˜์—ฌ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ALTER DATABASE dbname SET TIMEZONE TO 'timezone';
ALTER USER username SET TIMEZONE TO 'timezone';

์ด ์„ค์ •์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ƒˆ ์—ฐ๊ฒฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„๋Œ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•œ ํ›„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ€์šฉ์„ฑ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์ˆ˜๋™ ์žฅ์•  ์กฐ์น˜์— ๋Œ€ํ•œ ์ธก์ •ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž๋™ ์žฅ์•  ์กฐ์น˜๋งŒ ์ธก์ •ํ•ญ๋ชฉ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
Cloud SQL ์ธ์Šคํ„ด์Šค ๋ฆฌ์†Œ์Šค(CPU ๋ฐ RAM) ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฑฐ์˜ 100%์—ฌ์„œ ๊ณ ๊ฐ€์šฉ์„ฑ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์šด๋ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋จธ์‹  ํฌ๊ธฐ๊ฐ€ ๋ถ€ํ•˜์— ๋น„ํ•ด ๋„ˆ๋ฌด ์ž‘์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋” ํฐ ๋จธ์‹  ํฌ๊ธฐ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜ค๊ธฐ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: permission denied for schema public PostgreSQL ๋ฒ„์ „ 15 ์ด์ƒ์—์„œ๋Š” ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ template0์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด GRANT ALL ON SCHEMA public TO cloudsqlsuperuser SQL ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ cloudsqlsuperuser ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœ ์Šคํ‚ค๋งˆ ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
HTTP Error 409: Operation failed because another operation was already in progress. ์ธ์Šคํ„ด์Šค์— ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์š”์ฒญ์„ ์‹œ๋„ํ•˜์„ธ์š”.
๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํ™œ์„ฑ ์—ฐ๊ฒฐ์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. Cloud SQL ์ธ์Šคํ„ด์Šค์˜ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ์— ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๋ฐ์ดํ„ฐ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์˜ ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ปค์ง‘๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์šฉ๋Ÿ‰์€ point-in-time recovery๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ €์žฅ์šฉ๋Ÿ‰์„ ๋ณต๊ตฌํ•˜๋ ค๋ฉด point-in-time recovery๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ์ €์žฅ์šฉ๋Ÿ‰์„ ์ค„์—ฌ๋„ ์ธ์Šคํ„ด์Šค์— ํ”„๋กœ๋น„์ €๋‹๋œ ์ €์žฅ์šฉ๋Ÿ‰์˜ ํฌ๊ธฐ๊ฐ€ ์ถ•์†Œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: GRANT stderr: ERROR: must be member of role ROLE_NAME

Cloud Storage์— ์—…๋กœ๋“œ๋œ SQL ๋คํ”„ ํŒŒ์ผ์„ Cloud SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์ด ์•ฝ 4์ผ ๋™์•ˆ ์‹คํ–‰๋œ ๊ฒฝ์šฐ์— ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ROLE_NAME์€ ์†Œ์Šค PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ •์˜๋œ ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญํ• ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ cloudsqlsuperuser ์‚ฌ์šฉ์ž๊ฐ€ SQL ๋คํ”„ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ROLE_NAME ์—ญํ• ์ด ํฌํ•จ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. SQL ๋คํ”„ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ROLE_NAME ์—ญํ• ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. cloudsqlsuperuser ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค์ง€ ๋งˆ์„ธ์š”. ๋Œ€์‹  ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ROLE_NAME ์—ญํ•  ๊ตฌ์„ฑ์›์ธ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG โ€ฆ]

Vertex AI์™€ ํ†ตํ•ฉ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Google ML integration API is supported only on Postgres version 12 or above. Cloud SQL์—์„œ Vertex AI ํ†ตํ•ฉ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด PostgreSQL์šฉ Cloud SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ 12 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ด ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฃผ ๋ฒ„์ „ ์ธํ”Œ๋ ˆ์ด์Šค ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Google ML Integration API is not supported on shared core instance. Please upsize your machine type. ์ธ์Šคํ„ด์Šค์˜ ๋จธ์‹  ์œ ํ˜•์— ๊ณต์œ  ์ฝ”์–ด๋ฅผ ์„ ํƒํ•œ ๊ฒฝ์šฐ Cloud SQL์—์„œ Vertex AI ํ†ตํ•ฉ์„ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋จธ์‹  ์œ ํ˜•์„ ์ „์šฉ ์ฝ”์–ด๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋จธ์‹  ์œ ํ˜•์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Google ML Integration is unsupported for this maintenance version. Please follow https://cloud.google.com/sql/docs/postgres/self-service-maintenance to update the maintenance version of the instance. Cloud SQL์—์„œ Vertex AI ํ†ตํ•ฉ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค์˜ ์œ ์ง€๋ณด์ˆ˜ ๋ฒ„์ „์ด R20240130 ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์ด ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด ์…€ํ”„์„œ๋น„์Šค ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Cannot invoke ml_predict_row if 'cloudsql.enable_google_ml_integration' is off. cloudsql.enable_google_ml_integration ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”Œ๋ž˜๊ทธ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. Cloud SQL์€ Vertex AI์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด gcloud sql instances patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME --database-flags cloudsql.enable_google_ml_integration=on

INSTANCE_NAME์„ ๊ธฐ๋ณธ Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Failed to connect to remote host: Connection refused. Cloud SQL๊ณผ Vertex AI ๊ฐ„์˜ ํ†ตํ•ฉ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด gcloud sql instances patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME
--enable-google-ml-integration


INSTANCE_NAME์„ ๊ธฐ๋ณธ Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Vertex AI API has not been used in project PROJECT_ID before or it is disabled. Enable it by visiting /apis/api/aiplatform.googleapis.com/overview?project=PROJECT_ID then retry. Vertex AI API๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด API ์‚ฌ์šฉ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Vertex AI์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ†ตํ•ฉ ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Permission 'aiplatform.endpoints.predict' denied on resource. Vertex AI ๊ถŒํ•œ์€ Cloud SQL ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ Cloud SQL ์„œ๋น„์Šค ๊ณ„์ •์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๊ณ„์ •์— ์ด๋Ÿฌํ•œ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Vertex AI์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ†ตํ•ฉ ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Publisher Model `projects/PROJECT_ID/locations/REGION_NAME/publishers/google/models/MODEL_NAME` not found. Vertex AI์— ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ๋˜๋Š” LLM์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Resource exhausted: grpc: received message larger than max. Cloud SQL์ด Vertex AI์— ์ „๋‹ฌํ•˜๋Š” ์š”์ฒญ ํฌ๊ธฐ๊ฐ€ ์š”์ฒญ๋‹น gRPC ํ•œ๋„์ธ 4MB๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Cloud SQL attempts to send a request to Vertex AI. However, the instance is in the %s region, but the Vertex AI endpoint is in the %s region. Make sure the instance and endpoint are in the same region. Cloud SQL์ด Vertex AI์— ์š”์ฒญ์„ ์ „์†กํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค๋Š” ํ•œ ๋ฆฌ์ „์— ์žˆ์ง€๋งŒ Vertex AI ์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ค๋ฅธ ๋ฆฌ์ „์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค์™€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฆฌ์ „์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: The Vertex AI endpoint isn't formatted properly. Vertex AI ์—”๋“œํฌ์ธํŠธ์˜ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์˜จ๋ผ์ธ ์˜ˆ์ธก์— ๋น„๊ณต๊ฐœ ์—”๋“œํฌ์ธํŠธ ์‚ฌ์šฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€: Quota exceeded for aiplatform.googleapis.com/online_prediction_requests_per_base_model with base model: textembedding-gecko. Cloud SQL์ด Vertex AI์— ์ „๋‹ฌํ•˜๋Š” ์š”์ฒญ ์ˆ˜๊ฐ€ ํ”„๋กœ์ ํŠธ๋ณ„ ๋ชจ๋ธ๋‹น ๋ฆฌ์ „๋ณ„ ๋ถ„๋‹น ์š”์ฒญ ํ•œ๋„์ธ 1,500๊ฐœ๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊น…

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
Logging์€ Cloud SQL ์ธ์Šคํ„ด์Šค์—์„œ ๋งŽ์€ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊น…์„ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

log_statement ํ”Œ๋ž˜๊ทธ๋ฅผ '์—†์Œ'์œผ๋กœ ์„ค์ •ํ•˜๊ณ  logging_collector ํ”Œ๋ž˜๊ทธ๋ฅผ '๊บผ์ง'์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊น…์ด ๊ณ„์† ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋กœ๊ทธ ๊ด€๋ จ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋˜์—ˆ๋Š”๋ฐ ๋ˆ„๊ฐ€ ์‚ญ์ œํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜์—ˆ์Œ์„ ํ‘œ์‹œํ•˜์ง€๋งŒ ๊ทธ ์ด์ƒ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ž์„ธํ•œ ๊ฐœ์ธ ์‹๋ณ„ ์ •๋ณด(PII)๋ฅผ ๋กœ๊น…ํ•˜๋ ค๋ฉด ๊ฐ์‚ฌ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์–ด๋ ค์›€ ๋กœ๊ทธ๋ฅผ json ๋˜๋Š” ํ…์ŠคํŠธ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.gcloud logging read ๋ช…๋ น์–ด๋ฅผ Linux ํ›„์ฒ˜๋ฆฌ ๋ช…๋ น์–ด์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ๋ฅผ JSON์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d" \
> downloaded-log.json
    

๋กœ๊ทธ๋ฅผ TEXT๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

gcloud logging read \
"resource.type=cloudsql_database \
AND logName=projects/PROJECT_ID \
/logs/cloudsql.googleapis.com%2FLOG_NAME" \
--format json \
--project=PROJECT_ID \
--freshness="1d"| jq -rnc --stream 'fromstream(1|truncate_stream(inputs)) \
| .textPayload' \
--order=asc
> downloaded-log.txt
   
PostgreSQL ๋กœ๊ทธ์—์„œ ์ฟผ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ pgaudit ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. ํ„ฐ๋ฏธ๋„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql connect INSTANCE_NAME
          
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    CREATE EXTENSION pgaudit;
          
  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.enable_pgaudit=on,pgaudit.log=all
         

์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT datname, usename, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - xact_start as xact_age, now() - query_start as query_age, now() - state_change as last_activity_age, wait_event_type, wait_event, query FROM pg_stat_activity WHERE state <> 'idle' ORDER BY 8 DESC LIMIT 20;

ํŠน์ • ํ•„๋“œ์— ์‚ฌ์šฉ ์ค‘์ธ ๋‹จ์œ„๋ฅผ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ž์ฒด FIELD_NAME์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

SELECT name, setting, unit FROM pg_settings WHERE name = 'FIELD_NAME'.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์˜ ํ˜„์žฌ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ž์ฒด SETTING_NAME์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

SHOW SETTING_NAME;

SHOW ALL;์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ฐจ๋‹จ๋œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” pg_signal_backend ์—ญํ• ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1.       GRANT pg_signal_backend TO USERNAME;
          
  2. ์ฐจ๋‹จ๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋œ ํ”„๋กœ์„ธ์Šค์˜ ํ”„๋กœ์„ธ์Šค ID๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
          SELECT pid, usename, state, query FROM pg_stat_activity;
          
  3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ค‘ ๋˜๋Š” ๋น„ํ™œ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
          SELECT pg_cancel_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
          SELECT pg_terminate_backend(pid)
                FROM pg_stat_activity
                WHERE usename = 'USERNAME';
          
          
์ธ์Šคํ„ด์Šค๊ฐ€ ํŠธ๋žœ์žญ์…˜ ID๋ฅผ 100% ๊ฐ€๊นŒ์ด ์†Œ๋น„ํ•จ ๋‚ด๋ถ€ ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํŠธ๋žœ์žญ์…˜ ID๋ฅผ 100% ๊ฐ€๊นŒ์ด ์†Œ๋น„ํ•˜๊ณ  ์žˆ์Œ์„ ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜ ๋ž˜ํ•‘์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

autovacuum ์ž‘์—…์ด ์ฐจ๋‹จ๋˜์—ˆ๊ฑฐ๋‚˜ ์›Œํฌ๋กœ๋“œ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์‹ ์†ํ•˜๊ฒŒ ํŠธ๋žœ์žญ์…˜ ID๋ฅผ ํ™•๋ณดํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋ž˜ํ•‘ ๋ฌธ์ œ๋กœ ์ธํ•œ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด TXID ๋ž˜ํ•‘์„ ๋‹ค๋ฃจ๋Š” ๋‹ค์Œ ์…€ํ”„์„œ๋น„์Šค ๋„์›€๋ง์„ ๊ฒ€ํ† ํ•˜์„ธ์š”.

์ผ๋ฐ˜ ์กฐ์ • ๊ด€๋ จ ์กฐ์–ธ์€ PostgreSQL์˜ ์ฒญ์†Œ ์ž‘์—… ์ตœ์ ํ™”, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž„์‹œ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ž๋™ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋Š˜๋ฆผ ์ž๋™ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ž„์‹œ ํŒŒ์ผ์€ ์‚ญ์ œ๋˜์ง€๋งŒ ์Šคํ† ๋ฆฌ์ง€๋Š” ์ค„์–ด๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ํฌ๊ธฐ๋Š” ๊ณ ๊ฐ์ง€์›์—์„œ๋งŒ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋จ ํ™˜๊ฒฝ์—์„œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์‚ญ์ œ ์‹œ์ ์˜ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋Œ€์‹œ๋ณด๋“œ ๋˜๋Š” ๋‹ค๋ฅธ ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰ ์ค‘์ธ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ ERROR: (gcloud.sql.instances.delete) HTTP Error 409: The instance or operation is not in an appropriate state to handle the request ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ์ธ์Šคํ„ด์Šค์˜ ํ”Œ๋ž˜๊ทธ ์ƒํƒœ๊ฐ€ INSTANCE_RISKY_FLAG_CONFIG์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์„œ๋น„์Šค ๋‹ค์‹œ ์‹œ์ž‘ ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ibtmp1 ํŒŒ์ผ์„ ์ถ•์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์™„ํ™” ์˜ต์…˜์€ ROW_FORMAT=COMPRESSED๋กœ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์ž„์‹œ ํŒŒ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ file-per-table ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ ์€ ๊ฐ ์ž„์‹œ ํ…Œ์ด๋ธ”์˜ file-per-table ํ…Œ์ด๋ธ”์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์„ฑ๋Šฅ ๋น„์šฉ์ž…๋‹ˆ๋‹ค.

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

์ธ์Šคํ„ด์Šค์˜ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ๋ถ€์กฑํ•˜๊ณ  ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ์ฆ๊ฐ€ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ์ฆ๊ฐ€๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜จํ”„๋ ˆ๋ฏธ์Šค ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. Google Cloud ์—์„œ๋Š” Cloud SQL์— ์—†๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋‹ค์‹œ ์‹œ์ž‘ ์‹œ ์ข…๋ฃŒ๊ฐ€ ๋А๋ฆผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ 60์ดˆ ์ด๋‚ด์— ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ๋กœ ์ธํ•ด ๋น„์ •์ƒ ์ข…๋ฃŒ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

60์ดˆ ๋ฏธ๋งŒ ์ง€์†๋˜๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์˜ ์—ฐ๊ฒฐ์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ๋ช‡ ์‹œ๊ฐ„ ๋˜๋Š” ๋ฉฐ์น  ๋™์•ˆ ์—ด์–ด๋‘๋ฉด ์ข…๋ฃŒ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข…์†๋œ ๊ฐ์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ํ• ๋‹นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ์ข…์†๋œ ๊ฐ์ฒด๋ฅผ ์ฐพ์€ ํ›„ ์ด ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

Stack Exchange์˜ ์ด ์Šค๋ ˆ๋“œ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ • ์ฟผ๋ฆฌ๊ฐ€ ๋А๋ฆฌ๊ฒŒ ์‹คํ–‰๋จ ์ฟผ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ • ๋ถ€๋ถ„์ด ์›์ธ์ž…๋‹ˆ๋‹ค. Cloud SQL๊ณผ ๊ด€๋ จ๋  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์ด์œ ๋Š” ์†Œ์Šค(์ž‘์„ฑ์ž ๋˜๋Š” ๋ฆฌ๋”) ๋ฆฌ์†Œ์Šค์™€ ๋Œ€์ƒ(Cloud SQL) ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์ „์— ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ์ผ๋ฐ˜ ์„ฑ๋Šฅ ํŒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฝ์ž…, ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ญ์ œ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

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

์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋ ค๋ฉด ์†Œ์Šค ๋ฆฌ์†Œ์Šค์™€ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋™์ผํ•œ ๋ฆฌ์ „์— ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด๋ผ๊ณ  ํ‘œ์‹œ๋˜์ง€๋งŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์ฐจํŠธ์—๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํŒจํ•˜๊ณ  Out of memory๋ฅผ ๋ณด๊ณ ํ•˜์ง€๋งŒ Google Cloud ์ฝ˜์†”์ด๋‚˜ Cloud Monitoring ์ฐจํŠธ์—๋Š” ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

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

์ธ์Šคํ„ด์Šค์— ์›Œํฌ๋กœ๋“œ์™€ ์ผ๋ถ€ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ถฉ๋ถ„ํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์‚ญ์ œ๋œ ์ธ์Šคํ„ด์Šค ๋ณต๊ตฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ฐฑ์—…์„ ํฌํ•จํ•œ ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์ „์— Cloud Storage๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Cloud SQL ๊ด€๋ฆฌ์ž ์—ญํ• ์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์„ธ์š”.

๊ธฐ์กด Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ ค๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ ค๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋ก ํ•˜๊ณ  ํด๋ก ๋œ ์ธ์Šคํ„ด์Šค์— ์ƒˆ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ˆ˜๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š” ์—†์ด ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ก ๋œ ์ธ์Šคํ„ด์Šค์—๋Š” ์ƒˆ IP ์ฃผ์†Œ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์—์„œ Cloud Storage ๋ฒ„ํ‚ท์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“  ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ ์ธ์Šคํ„ด์Šค๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ค‘์— ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์ธ์Šคํ„ด์Šค์— ์‚ญ์ œ ๋ณดํ˜ธ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค ์‚ญ์ œ ๊ณ„ํš์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ์‚ญ์ œ ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

Private Service Connect

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์ธ์Šคํ„ด์Šค์˜ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์—์„œ Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ˆ˜๋ฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  1. ์—”๋“œํฌ์ธํŠธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    gcloud

    ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด
    gcloud compute forwarding-rules describe ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    | grep pscConnectionStatus

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • ENDPOINT_NAME: ์—”๋“œํฌ์ธํŠธ์˜ ์ด๋ฆ„
    • PROJECT_ID: ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
    • REGION_NAME: ์—”๋“œํฌ์ธํŠธ์˜ ๋ฆฌ์ „ ์ด๋ฆ„

    REST

    ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_ID: Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
    • REGION_NAME: ๋ฆฌ์ „์˜ ์ด๋ฆ„
    • ENDPOINT_NAME: ์—”๋“œํฌ์ธํŠธ์˜ ์ด๋ฆ„

    HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME

    ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

    ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
      "kind": "compute#forwardingRule",
      "id": "ENDPOINT_ID",
      "creationTimestamp": "2024-05-09T12:03:21.383-07:00",
      "name": "ENDPOINT_NAME",
      "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME",
      "IPAddress": "IP_ADDRESS",
      "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME",
      "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default",
      "serviceDirectoryRegistrations": [
        {
          "namespace": "goog-psc-default"
        }
      ],
      "networkTier": "PREMIUM",
      "labelFingerprint": "LABEL_FINGERPRINT_ID",
      "fingerprint": "FINGERPRINT_ID",
      "pscConnectionId": "CONNECTION_ID",
      "pscConnectionStatus": "ACCEPTED",
      "allowPscGlobalAccess": true
    }
    
  2. ์—”๋“œํฌ์ธํŠธ ์ƒํƒœ๊ฐ€ ACCEPTED์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ PENDING์ด๋ฉด ์ธ์Šคํ„ด์Šค์—์„œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค ์ˆ˜์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: The resource 'projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME' was not found ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” Private Service Connect ์—”๋“œํฌ์ธํŠธ์˜ ๊ณ ์ • ๋‚ด๋ถ€ IP ์ฃผ์†Œ๋ฅผ ์˜ˆ์•ฝํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๋œ ์„œ๋ธŒ๋„ท์ด URI๋กœ ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์ง€๋งŒ ๊ณต์œ  VPC ๋„คํŠธ์›Œํฌ์˜ ์„œ๋ธŒ๋„ท์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด URI๋กœ ์„œ๋ธŒ๋„ท์„ ์ง€์ •ํ•˜๊ณ  URI์—์„œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—”๋“œํฌ์ธํŠธ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: - The resource 'projects/PROJECT_ID/global/networks/NETWORK_NAME' was not found ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” Private Service Connect ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •๋œ ๋„คํŠธ์›Œํฌ๊ฐ€ URI๋กœ ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค๋˜ ๊ณต์œ  VPC ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด URI๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์ •ํ•˜๊ณ  URI์—์„œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—”๋“œํฌ์ธํŠธ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ณต์ œ

๋ฌธ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ
์ƒ์„ฑ ์‹œ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์ด ๋ณต์ œ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.
์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - invalidFlagValue ์˜ค๋ฅ˜ ์š”์ฒญ์˜ ํ”Œ๋ž˜๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•œ ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ํ”Œ๋ž˜๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € max_connections ํ”Œ๋ž˜๊ทธ์˜ ๊ฐ’์ด ๊ธฐ๋ณธ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ํ™•์ธํ•˜์„ธ์š”.

max_connections ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •๋œ ๊ฒฝ์šฐ Cloud Logging์—์„œ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ - ์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜ ๋กœ๊ทธ ํŒŒ์ผ์— ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud Logging์˜ ๋กœ๊ทธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์œผ์„ธ์š”.

์˜ค๋ฅ˜๊ฐ€ set Service Networking service account as servicenetworking.serviceAgent role on consumer project์ด๋ฉด Service Networking API๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐธ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ๋””์Šคํฌ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋” ํฐ ๋””์Šคํฌ ํฌ๊ธฐ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
๋””์Šคํฌ ๊ณต๊ฐ„์ด ํ˜„์ €ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•จ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์Šฌ๋กฏ์ด ์žˆ์œผ๋ฉด PostgreSQL์ด WAL ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฌด๊ธฐํ•œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋กœ ์ธํ•ด ๋””์Šคํฌ ๊ณต๊ฐ„๋„ ๋ฌด์ œํ•œ์œผ๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL์—์„œ ๋…ผ๋ฆฌ์  ๋ณต์ œ ๋ฐ ๋””์ฝ”๋”ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์ œ ์Šฌ๋กฏ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณต์ œ ์Šฌ๋กฏ์€ pg_replication_slots ์‹œ์Šคํ…œ ๋ทฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ  active ์—ด๋กœ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pg_drop_replication_slot ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WAL ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์Šฌ๋กฏ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์€ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ฝ๊ธฐ ์ž‘์—…์„ ์บ์‹œํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์Šคํ† ๋ฆฌ์ง€ ํ•œ๋„์— ๋„๋‹ฌํ–ˆ๊ณ  ์Šคํ† ๋ฆฌ์ง€ ์ž๋™ ์ฆ๊ฐ€๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ automatic storage increase๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธด ๋ณต์ œ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•จ ์“ฐ๊ธฐ ๋ถ€ํ•˜๊ฐ€ ๋„ˆ๋ฌด ๋†’์•„ ๋ณต์ œ๋ณธ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณต์ œ๋ณธ์˜ SQL ์Šค๋ ˆ๋“œ๊ฐ€ IO ์Šค๋ ˆ๋“œ๋ฅผ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ฟผ๋ฆฌ ๋˜๋Š” ์›Œํฌ๋กœ๋“œ๋กœ ์ธํ•ด ํŠน์ • ์Šคํ‚ค๋งˆ์—์„œ ์ผ์‹œ์ ์ด๊ฑฐ๋‚˜ ์˜๊ตฌ์ ์ธ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ์˜ ์†๋„๊ฐ€ ๋А๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜์„ธ์š”.
  • ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๊ณ ์œ /๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์— ๊ณ ์œ /๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋งˆ๋‹ค ๋ณต์ œ๋ณธ์—์„œ ์ „์ฒด ํ…Œ์ด๋ธ” ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • DELETE ... WHERE field < 50000000๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์— ๋‹ค์ˆ˜์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฏ€๋กœ ํ–‰ ๊ธฐ์ค€ ๋ณต์ œ์—์„œ ๋ณต์ œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ณต์ œ๋ณธ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ” ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋А๋ฆฐ ์“ฐ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
PostgreSQL 9.6์—์„œ ์ƒ‰์ธ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ PostgreSQL์—์„œ ํŠน์ • ์ƒ‰์ธ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ณต์ œ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๊ณง ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. PostgreSQL 10 ๋ฏธ๋งŒ์˜ PostgreSQL์—์„œ๋Š” ํ•ด์‹œ ์ƒ‰์ธ์ด ๋ณต์ œ๋ณธ์— ์ „ํŒŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ƒ‰์ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ PostgreSQL 10 ์ด์ƒ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ์ง€ ์•Š๊ณ  ๋ณต์ œ๋ณธ๋„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด PostgreSQL 9.6์—์„œ ํ•ด์‹œ ์ƒ‰์ธ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋Š” ํ•ญ์ƒ ์‹คํ–‰๋จ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“  ํ›„์—๋Š” ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' ์ฟผ๋ฆฌ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ œํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•จ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์—์„œ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์žฅ๊ธฐ ์‹คํ–‰ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ธํ•ด ์ฝ๊ธฐ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์ค‘์ง€ํ•œ ํ›„ ๋ณต์ œ๋ณธ์„ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ๋ณต์ œ๋ณธ์˜ vCPU ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋„๊ตฌ์—์„œ vCPU ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜๋ฏ€๋กœ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  1. log_duration ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๊ณ  log_statement ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ddl๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฟผ๋ฆฌ์™€ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ชจ๋‘ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›Œํฌ๋กœ๋“œ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์™€ ์ฝ๊ธฐ ๋ณต์ œ๋ณธ ๋ชจ๋‘์—์„œ ์ฟผ๋ฆฌ์— explain analyze๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฟผ๋ฆฌ ๊ณ„ํš์„ ๋น„๊ตํ•˜๊ณ  ์ฐจ์ด์ ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์ฟผ๋ฆฌ์ด๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐ์ธ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.