All pages
1 of 9

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Flow Control

ProSync์˜ Flow Control์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ •๋ฆฌํ•œ ๋ฌธ์„œ์ด๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๋˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด ์•ˆ์ •์ ์œผ๋กœ ์šด์˜๋˜๊ธฐ ์œ„ํ•ด์„  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๊ด€๊ฑด์ด๋‹ค.

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

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

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

Memory Control

ProSync์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋„๋ฅผ ์ƒ์„ธํžˆ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด Memory ์‚ฌ์šฉ๋Ÿ‰ ์กฐ์ ˆ๋ฐฉ์‹์„ ์•ˆ๋‚ดํ•œ๋‹ค.

ProSync Data Flow

๊ทธ๋ฆผ 1. ProSync DataFlow

๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜๋Š” ์œ„์น˜๋Š” Source DB์˜ Redo Log์ด๋‹ค. Redo Log์—์„œ ๋ฐœ์ƒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Extract ๊ฐ€ ์ถ”์ถœํ•˜์—ฌ Chunk ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•œ๋‹ค.

์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋Š” TCP Socket์„ ํ†ตํ•ด ์ „์†ก์ด ๋œ๋‹ค. Non Blocking ํ†ต์‹ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ „์†ก์ด ์‹คํŒจํ•˜๋ฉด, ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋“ค์€ Non Blocking Queue์— ์Œ“์ด๊ฒŒ ๋œ๋‹ค. ์ด Queue์— ์Œ“์ธ ๋ฐ์ดํ„ฐ๋Š” ์ปค๋„๋กœ๋ถ€ํ„ฐ ๋ฐ˜๋Œ€์ชฝ TCP Recv Buffer๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋Š” ์‹ ํ˜ธ๊ฐ€ ์˜ฌ ๋•Œ, ์ˆœ์„œ๋Œ€๋กœ ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

Apply๋Š” ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ์ฒดํ™” (์—ญ์ง๋ ฌํ™”) ํ•˜์—ฌ TX_HASH์— ์Œ“์ด๊ฒŒ๋œ๋‹ค. xid ๋Š” ํŠธ๋žœ์žญ์…˜ ๊ณ ์œ ์˜ id ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ACID๋ฅผ ์ง€์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜์˜ ์ปค๋ฐ‹๊นŒ์ง„ ์ด ์œ„์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๋ณด๊ด€ํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ ์ปค๋ฐ‹์ด ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์€ Target Database์— ๋ฐ˜์˜์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ํŒ๋‹จํ•˜๊ณ  Replay Queue๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

Wait Queue์— ์Œ“์ธ ๋ฐ์ดํ„ฐ๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ์ปค๋ฐ‹๋œ ์ˆœ์„œ์— ๋งž๊ฒŒ Target Database๋กœ ๋ฐ˜์˜์ด ๋œ๋‹ค. ์ด ๋•Œ ๋ฐ˜์˜ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฐ˜์˜ ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์„ ํ…๋ฐ, ์ด๋“ค๊ฐ„์˜ ์˜์กด์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•˜์—ฌ ์‹œ๊ฐ„ ์ˆœ์„œ์— ๋งž๊ณ , ์˜์กด์„ฑ์ด ์—†๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋†’์ธ๋‹ค.

Case 1. TX_HASH ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์ด ์Œ“์ด๋Š” ๊ฒฝ์šฐ

TX_HASH ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ์Œ“์ธ๋‹ค๋ฉด Out of Memory ๋ฅผ ํ”ผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์ž„๊ณ„์น˜๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ Part File์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์ด ์œ„์น˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์ค€๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ธฐ์ค€์€ ํ˜„์žฌ TX_HASH์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค ์ค‘ ๊ฐ€์žฅ ์šฉ๋Ÿ‰์ด ํฐ ํŠธ๋žœ์žญ์…˜ ๊ธฐ์ค€์œผ๋กœ ํŒŒ์ผ๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋˜๋ฉฐ, ๋‚ด๋ ค๊ฐ„ ํŒŒ์ผ์€ ์‹ค์ œ ๋ฐ˜์˜์ด ๋˜๋Š” ์‹œ์ ๊นŒ์ง„ ๊ณ„์† Disk์— ๋‚จ๊ฒŒ ๋œ๋‹ค

์ด์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ TX_HASH_SIZE ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค. TX_HASH_SIZE๋ผ๋Š” ์ž„๊ณ„์น˜๋ณด๋‹ค ๋” ๋งŽ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฒŒ ๋  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋™์ž‘์ด ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

Part File์€ ๋ฐ˜์˜์ด ์™„๋ฃŒ๋˜๋ฉด ์ œ๊ฑฐ๊ฐ€ ๋˜๋ฉฐ, ๋ฐ˜์˜์ด ๋˜๊ธฐ ์ „๊นŒ์ง„ Disk์— ๋‚จ๋Š”๋‹ค. ์‹ค์ œ ํŠธ๋žœ์žญ์…˜ ๋ฐ˜์˜ ์‹œ์ ์—๋„ Part File๋กœ ๋‚ด๋ ค๊ฐ„ DML ๋ฐ์ดํ„ฐ๋“ค์ด ์‹œ๊ฐ„ ์ƒ ๋” ์•ž์„œ๊ธฐ ๋•Œ๋ฌธ์—, ํŒŒ์ผ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋ฐ˜์˜ํ•œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์€ ํŠธ๋žœ์žญ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.

ProSync๋Š” ACID๋ฅผ ์ง€์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ์— ๋งž๊ฒŒ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์•ž์„  ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜์˜๋  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋”ฐ๋ผ์„œ Target Database์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ง€์—ฐ๋œ๋‹ค๋ฉด ๊ทธ๋งŒํผ Queue์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฒŒ ๋œ๋‹ค.

Queue์— ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ProSync๋Š” Queue ๋‚ด์—์„œ ๋Œ€๊ธฐ ํ˜น์€ ๋ฐ˜์˜ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜๋“ค์˜ ํฌ๊ธฐ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•œ๋‹ค. ์ด ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด Memory ํ• ๋‹น์„ ๋ฉˆ์ถฐ์•ผ ํ•œ๋‹ค.

Memory ํ• ๋‹น์„ ๋ฉˆ์ถ”๊ธฐ ์œ„ํ•ด ProSync๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒ์‚ฐ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค. ์ฆ‰, Extract ์ˆ˜์‹ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ฐจ๋‹จํ•จ์œผ๋กœ์จ, ํ˜„์žฌ ๋ณด์œ  ์ค‘์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Extract๋Š” ์•ž์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ๋Œ€๋กœ Non Blocking Queue์— ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“๋‹ค๊ฐ€ ์‹ค์ œ ์ถ”์ถœ์„ ๋ฉˆ์ถค์œผ๋กœ์จ ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ ์ƒ์‚ฐ์„ ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค.

์ž„๊ณ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • MEMORY_CTRL_STOP_SIZE Wait Queue์— ์ด ํฌ๊ธฐ ์ด์ƒ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋ฉด Socket ์œผ๋กœ ๋ถ€ํ„ฐ ์ถ”๊ฐ€์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ง‰๋Š”๋‹ค.

  • MEMORY_CTRL_RESUME_SIZE Wait Queue์— ์ด ํฌ๊ธฐ ์ดํ•˜๋งŒํผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“ค๋ฉด, Socket ์œผ๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Active-Active Cluster์ธ RDBMS๋“ค์€ Physical Disk๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ๊ณต๊ฐ„์— ์„œ๋กœ ์ˆœ์„œ์— ์ ํ•ฉํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. Redo Log๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ณณ์— ์ž‘์„ฑํ•˜๋”๋ผ๋„ Change Data๋“ค์˜ ์‹œ๊ฐ„์€ ์ˆœ์„œ์— ๋งž๊ฒŒ ๋” ์ž‘์„ฑ์ด ๋œ๋‹ค. ProSync ์ž…์žฅ์—์„œ ๋ณด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ๋‚จ์€ Redo Log๋“ค์„ ๋ชจ์•„ ์ง๋ ฌํ™”๋ฅผ ํ•˜๋ฉด ๊ฒฐ๊ตญ DB Time ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ProSync์˜ Apply ์ž…์žฅ์—์„  ์ถ”์ถœ์ด Cluster์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ DB Time๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ผ๋ฉด ๋‹จ์ˆœํžˆ ํ•œ ์ค„๋กœ ์„ธ์›Œ ๋†“๊ณ  ํ•˜๋‚˜์”ฉ ์ฟผ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ๋ฌธ์ œ๋Š” ์žฅ์•  ์ƒํ™ฉ์ด๋‚˜ ์ง€์—ฐ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

๋งŒ์•ฝ์— ํ•œ์ชฝ ๋…ธ๋“œ์—์„œ ์•„๋ฌด๋Ÿฐ ๋ถ€ํ•˜๊ฐ€ ์—†๊ฑฐ๋‚˜ ์žฅ์• ๋กœ ๋ฉˆ์ถฐ๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋ฉด Redo Log ์ž‘์„ฑ์ด ๋ฉˆ์ถ”๊ฒŒ ๋œ๋‹ค. ์ฝ์„ ๊ฒƒ์ด ์—†๋Š” Extract ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜๊ฐ€ ์—†๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Apply ํ”„๋กœ์„ธ์Šค ์ž…์žฅ์—์„  ํ˜„์žฌ Cluster ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žฅ์• ๊ฐ€ ๋‚˜์„œ ๋ชป ๋ณด๋‚ด๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ์ง€, ๋ถ€ํ•˜๊ฐ€ ์—†์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชป ๋ณด๋‚ด๋Š” ๊ฒƒ์ธ ์ง€ ํ™•์ธํ• ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

๋”ฐ๋ผ์„œ Extract ์—์„œ๋Š” ๋ฐœ์ƒํ–ˆ์„, ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ TCP Socket์œผ๋กœ ์ „๋‹ฌํ•ด์ฃผ๊ณ , ๋ถ€ํ•˜๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•˜์—ฌ ProSync์šฉ Dummy Table์— ๊ฐ•์ œ๋กœ ๋ถ€ํ•˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•ด์„œ ์ „๋‹ฌํ•ด์ค€๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด Applyํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ Cluster Node์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•ญ์ƒ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ •๋ ฌ์„ ์œ„ํ•œ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด ์œ„์น˜๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

์œ„์™€ ๊ฐ™์ด Extract๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ์ƒํ™ฉ (Active Cluster) ์—์„  ๊ฐ Extract ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € Merge Queue์— ์Œ“์•„ ๋†“๋Š”๋‹ค. ์Œ“์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง๋ ฌํ™”๊ฐ€ ๋˜๋ ค๋ฉด ๋ชจ๋“  Extract ๋ณ„ ๋ฐ์ดํ„ฐ๊ฐ€ 1๊ฐœ๋ผ๋„ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋•Œ๊นŒ์ง„ Merge Queue์— ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๊ฒŒ ๋œ๋‹ค.

๋‹ค๋งŒ ๋„คํŠธ์›Œํฌ ์žฅ์• ๋‚˜ ๋ชจ์ข…์˜ ์ด์œ ๋กœ ํ•œ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ํ–‰์œ„๊ฐ€ ๋งค์šฐ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๊ธฐ์„œ๋„ ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๊ฒŒ TCP Socket์œผ๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ง‰๋Š” ๋™์ž‘์ด ์‚ฌ์šฉ๋œ๋‹ค.

์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • MERGE_BLOCK_CNT ํŠน์ • ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด ๊ฐฏ์ˆ˜ ์ด์ƒ๋งŒํผ ์Œ“์ด๋ฉด ํ•ด๋‹น TCP Socket์„ ๋ง‰๋Š”๋‹ค.

  • MERGE_RESUME_CNT ํŠน์ • ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด ๊ฐฏ์ˆ˜ ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ํ•ด๋‹น TCP Socket์„ ๋‹ค์‹œ ์—ด์–ด์ค€๋‹ค.

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Extract ๋ณ„๋กœ ์—ฐ๊ฒฐ์ด ๋”ฐ๋กœ ์กด์žฌํ•˜๋ฏ€๋กœ ์ด์™€ ๊ฐ™์ด ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

Performance

ProSync๋Š” Apply ํ”„๋กœ์„ธ์Šค ์ง€์—ฐ ์‹œ ๋ชจ๋“  ๊ณณ์— ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ๋ณธ ์žฅ์—์„  Performance ์ธก๋ฉด์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Configuration๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

Case 2. Wait Queue์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์ด ์Œ“์ด๋Š” ๊ฒฝ์šฐ

์ฃผ์˜

Wait Queue ๊ด€๋ จ

Replay ์ชฝ์—์„  ๋งŽ์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ Wait Queue๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ Queue๋‚˜ Tree ๋“ฑ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„  ์„ค๋ช…์„ ์œ„ํ•ด ๋ชจ๋‘ Wait Queue๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์„ค๋ช…ํ•œ๋‹ค.

Source DB๊ฐ€ Cluster์ธ ๊ฒฝ์šฐ์˜ ๊ณ ๋ ค์‚ฌํ•ญ

๊ทธ๋ฆผ 2. TX_HASH ํฌ๊ธฐ๊ฐ€ TX_HASH_SIZE ํŒŒ๋ผ๋ฏธํ„ฐ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
๊ทธ๋ฆผ 3. Socket Block in ProSync
๊ทธ๋ฆผ 4. Merge Queue
๊ทธ๋ฆผ 5. Socket Block in ProSync 2

Conflict

๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ, ์ฒ˜๋ฆฌ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ํ™•์ธํ•œ๋‹ค.

Batch Execution

Batch Execution์€ RDBMS ์ƒ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Batch ๊ด€๋ จ API๋ผ๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์šฉ์ดํ•˜๋‹ค. DML ๊ฐ๊ฐ์„ ๋ชจ๋‘ ์ฟผ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌํ•˜๊ธฐ๋ณด๋‹จ, ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ๋ผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ Batch๋‹จ์œ„๋กœ ๋ชจ์•„์„œ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด Insert ์™€ ๊ฐ™์€ DML์ด ์—ฐ์†ํ•ด์„œ ๋“ค์–ด์˜ฌ ๋•Œ, Target Database ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์ฆ๊ฐ€ ์‹œํ‚ค๊ณ  ๋™๊ธฐํ™” ์†๋„๋ฅผ ๋Œ์–ด ์˜ฌ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ œ์•ฝ์‚ฌํ•ญ๋„ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘๊ฐ€์ง€ ๊ด€์ ์—์„œ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ

  • Batch๋กœ ๋ชจ์•˜์„ ๋•Œ์˜ ํ•œ๊ณ„

๊ฐ™์€ ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ

ProSync๋Š” ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ DML์ด ์—ฐ์†ํ•ด์„œ ๋“ค์–ด์˜ฌ ๋•Œ ์ด ์ˆœ์„œ๋ฅผ ์ž„์˜๋Œ€๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ์ž…๋ ฅ๋˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉํ•ด์•ผ ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๋Œ€์ „์ œ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Insert * 3, Update*3, Delete* 3์˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ์™€ (Insert, Update, Delete) * 3์˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ Batch Execution ์ž…์žฅ์—์„œ ํฐ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์—ฐ์†ํ•ด์„œ ๋“ค์–ด์˜จ๋‹ค๋ฉด ProSync๋Š” ์ด๋ฅผ Batch๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ, ์ฟผ๋ฆฌ๋“ค์˜ ํ˜•ํƒœ๊ฐ€ ์—ฐ์†์ ์ด์ง€ ์•Š๊ฒŒ ๋“ค์–ด์˜จ๋‹ค๋ฉด Batch๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๋”๋ผ๋„ ํ•˜๋‚˜๋Š” Batch ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Batch ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋‚ด์— ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ฟผ๋ฆฌ๋“ค์ด ์—ฐ์†ํ•ด์„œ ๋“ค์–ด์˜จ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•˜์—ฌ๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ๋ฏธ๋น„ํ•œ ๊ฒฝ์šฐ๋„ ์กด์žฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Insert์˜ ๊ฒฝ์šฐ Batch ๋™์ž‘์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋‚˜ ํฌ๊ธฐ ๋“ฑ์„ Target Database์— ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค€๋‹ค๋ฉด Database๋Š” ์ด์— ๋งž๋Š” ํ”Œ๋žœ์„ ์„ธ์›Œ์„œ ์ตœ์ ํ™” ํ•˜์—ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ Delete๋‚˜ Update ์ฒ˜๋Ÿผ ๊ฐ row ๋ณ„๋กœ Where Clause์— ์˜ํ•ด ๋”ฐ๋กœ ํƒ์ƒ‰์„ ํ•ด์•ผ ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋“ค์–ด์˜จ๋‹ค๋ฉด ์•„๋ฌด๋ฆฌ ๋ชจ์•„ ๋ณด๋‚ด๋„ ์„œ๋ฒ„ ์ž…์žฅ์—์„  ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋‚˜, ๋ชจ์•„์„œ ๋“ค์–ด์˜จ๊ฑธ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋‚˜ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ProSync๋Š” ํŠน๋ณ„ํ•œ ์„ค์ •์ด ์—†๋‹ค๋ฉด Insert์— ๋Œ€ํ•œ Batch๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ๋™์ž‘์ด๋‹ค. ํ•˜์ง€๋งŒ Database ๋ณ„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Batch ์‚ฌ์šฉ ์—ฌ๋ถ€๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ชจ๋‘ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค.

Parameter ๋ณ„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

  • USE_BATCH_MODE ๊ธฐ๋ณธ ๊ฐ’์€ Y ๋กœ, Batch๋Š” ํ•ญ์ƒ ๋™์ž‘ํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.

  • BATCH_MEM_SIZE ๊ธฐ๋ณธ ๊ฐ’์€ 10MB๋กœ ์„œ๋ฒ„์— ๋ณด๋‚ผ ๋•Œ ์ตœ๋Œ€ 10MB์˜ ๋ฐ์ดํ„ฐ๊นŒ์ง€๋งŒ ์Œ“๊ณ  ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

  • USE_ONLY_INSERT_BATCH Insert ๋งŒ Batch ๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒƒ ์ธ์ง€์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ธฐ๋ณธ ๊ฐ’์€ Y ์ด๋‹ค.

Where Clause

Redo Log๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ๋ถ„์ด ๋‚จ๋Š”๋‹ค. RDBMS (์ฃผ๋กœ Oracle, Tibero) ์—์„œ๋Š” row ๋ฐ์ดํ„ฐ๊ฐ€ ROW_ID ๋ผ๋Š” ๊ณ ์œ ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ID์—๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์œ„์น˜, ํŒŒ์ผ ๋‚ด ๋ฐ์ดํ„ฐ ๋ธ”๋ก์˜ ์œ„์น˜, ๋ธ”๋ก ๋‚ด row์˜ ์œ„์น˜ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.

ProSync๋Š” ์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •ํ•ด์ง„ ROW_ID๋งŒ ๊ฐ€์ง€๊ณ ๋Š” Target Database์—์„œ ์ •ํ™•ํ•˜๊ฒŒ ์–ด๋–ค row์ธ์ง€ ํŒ๋ณ„ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋„ ๋‹ค๋ฅผ ๊ฒƒ์ด๊ณ , ๋ธ”๋ก ์œ„์น˜๋‚˜ row ์œ„์น˜ ์ •๋ณด๋„ ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ROW_ID๋กœ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ Database์˜ row๋ฅผ ๋งค์นญ ์‹œํ‚ค๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

๋”ฐ๋ผ์„œ SUPPLEMENTAL_LOGGING์˜ต์…˜ ๋“ฑ์„ ํ†ตํ•ด row ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ Redo Log์ƒ์— ํ•จ๊ป˜ ๋‚จ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ Where Clause์— 1๊ฐœ์˜ Column์ •๋ณด๋งŒ ๋„ฃ์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, Redo Log์—๋Š” ํ•ด๋‹น Row ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  Column ์ •๋ณด๊ฐ€ ๋‹ค ๋‚จ๋„๋ก ํ•ด์ค€๋‹ค.

Target Database์™€ Apply ํ”„๋กœ์„ธ์Šค๋Š” ์ด ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์žฌ๊ตฌ์ถ•ํ•œ๋‹ค. ๋‹ค๋งŒ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด, Primary key ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ” ์ž…์žฅ์—์„  ๋ถˆํ•„์š”ํ•œ ๋‹ค๋ฅธ ์ปฌ๋Ÿผ ์ •๋ณด๋“ค์„ Where Clause์— ์ž…๋ ฅํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. Database์˜ ํ”Œ๋žœ ๋ณ„๋กœ ์ตœ์ ํ™”๋˜์–ด ์ž˜ ์ฒ˜๋ฆฌ๋  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋ถˆํ•„์š”ํ•œ ์ƒํ™ฉ ์ž์ฒด๋ฅผ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•ด ProSync์—์„  Primary key๋งŒ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

Parameter ๊ด€๋ จ

USE_PK_FOR_WHERE ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Primary key๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ Update๋‚˜ Delete ์‹œ์— Where Clause์—๋Š” Primary key๋งŒ ์ž…๋ ฅํ•˜๊ฒŒ๋œ๋‹ค.

์ฃผ์˜

Data Conflict Rule(DCR) ๊ด€๋ จ

์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ USE_PK_FOR_WHERE ์˜ต์…˜์€ ๋ฌด์‹œ๋œ๋‹ค. ๋™๊ธฐํ™”์˜ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์ƒ Conflict๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์šฐ์„ ์ด๊ธฐ ๋•Œ๋ฌธ์— ProSync์—์„  ๋‘ ์˜ต์…˜ ๊ฐ„์— ์ด์™€ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘”๋‹ค.

Parallel Execution (Parallel Replay)

์ปค๋ฐ‹์ด ์š”์ฒญ ํŠธ๋žœ์žญ์…˜์€ ๋ฐ˜์˜์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ฐ˜์˜์„ ํ•˜๊ณ , ๋ฐ˜์˜์„ ํ•  ์ˆ˜ ์—†์œผ๋ฉด ํ์—์„œ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฐ˜์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ๋ฐ˜์˜ํ•˜๊ณ ์ž ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฐ˜์˜ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜ ๊ฐ„์˜ ์˜์กด์„ฑ ์ฒดํฌ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ๋…๋ฆฝ์ ์ผ ๊ฒฝ์šฐ ๋ฐ˜์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.

์˜์กด์„ฑ ์ฒดํฌ๋Š” Table๊ณผ Row ๋‹จ์œ„ ๋ชจ๋‘ ํ™•์ธ์„ ํ•œ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ ˆ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋ ˆ์ฝ”๋“œ์—๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” Row๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜๊ณผ ์˜์กด ๊ด€๊ณ„์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

์˜์กด์„ฑ ํ™•์ธ ๋™์ž‘์€ RedBlack Tree(RBT)์™€ Linked List๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋˜๊ณ  ์žˆ๋‹ค. Table ๋‹จ์œ„๋กœ RBT๋ฅผ ํ™•์ธํ•˜๊ณ , Table์ด ํ™•์ธ๋˜๋ฉด, ํ•ด๋‹น Table ๋…ธ๋“œ ๋‚ด์˜ RBT์—์„œ Row๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด ์œ„์น˜์—” Linked List๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์€ ํ•ด๋‹น List์— ์˜์กด์„ฑ ๊ฐ์ฒด(TX Dependency )๋ฅผ ๋‹ฌ์•„ ๋†“๋Š”๋‹ค.

์ด ๋™์ž‘์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  Row์— ๋Œ€ํ•œ Linked List์— TX Dependency๊ฐ€ ๋“ฑ๋ก์ด ๋œ๋‹ค. ๋ฐ˜์˜ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋ฐ˜์˜ ๋Œ€๊ธฐ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‘ ์ด ๊ตฌ์กฐ ์•ˆ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

๋ฐ˜์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋ชจ๋“  TX Dependency๊ฐ€ Linked List์˜ front์— ์กด์žฌํ•˜๋Š” ์ง€์˜ ์—ฌ๋ถ€๋กœ ํ™•์ธํ•œ๋‹ค. ํ•˜๋‚˜๋ผ๋„ front์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ˜์˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ์•ž์„œ ๋ฐ˜์˜ ์ค‘์ธ ํŠธ๋žœ์žญ์…˜์˜ ์™„๋ฃŒ๋ฅผ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆผ 1. ๋ฐ˜์˜์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

๋ฐ˜์˜์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ชจ๋“  ์˜์กด์„ฑ ์ฒดํฌ๋ฅผ ํ–ˆ์„ ๋•Œ Linked List ์ƒ์— TX Dependency ๊ฐ€ ๊ฐ€์žฅ ์•ž์„  ๊ฒฝ์šฐ์ด๋‹ค.

๊ทธ๋ฆผ 2. ๋ฐ˜์˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

๋งŒ์•ฝ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด xid: 111์ธ ํŠธ๋žœ์žญ์…˜์ด ์•„์ง ๋ฐ˜์˜์ด ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฐ˜์˜์ด ์™„๋ฃŒ๋œ ํŠธ๋žœ์žญ์…˜์€ ์œ„ Linked list์—์„œ ์ œ๊ฑฐ๊ฐ€ ๋˜๊ณ , xid: 112๊ฐ€ ๋ฐ˜์˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ˜์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

๊ด€๋ จ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” REPLAY_THREAD_CNT ๋กœ, ํ•ด๋‹น ๊ฐ’์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ๋ณ‘๋ ฌ ์„ธ์…˜์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง„๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๋กœ์ง์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ฒฐ๊ตญ RBT ๋‚ด์—์„œ Table, Row๋‹จ์œ„๋กœ TX Dependency๊ฐ€ ์ž˜ ํ’€๋ ค์•ผ ๋ณ‘๋ ฌ ๋ฐ˜์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋กœ ์ธํ•ด ์ˆซ์ž๋ฅผ ์˜ฌ๋ฆฐ๋‹ค๊ณ  ๋ฐ˜๋“œ์‹œ ์˜ฌ๋ฆฐ ์ˆซ์ž๋งŒํผ ์ •๋น„๋ก€ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•œ๋‹ค.

Data Conflict Rule (DCR)

MAP Rule์—์„œ ์†Œ๊ฐœํ•œ Data Conflict Rule์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋“ค์„ ์ •๋ฆฌํ•œ๋‹ค. ์˜ต์…˜์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

Data Conflict๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด Row๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ProSync์—์„œ๋Š” ์ด์— ๋Œ€ํ•œ ๊ธฐ์ค€์„ Primary key๋กœ ๋‘๊ณ  ์žˆ๋‹ค. Primary key ๋กœ ์ธํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, Source Database, Target Database, Column Min(Max) ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ Conflict์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

Insert๋ฌธ์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์€, ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ Source Database ๊ธฐ์ค€์œผ๋กœ ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

Insert๋ฌธ์„ Update๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ Conflict ์„ ํ•ด์†Œํ•ด์ค€๋‹ค.

Update์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ์€ ์›ํ•˜๋Š” Row๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

Update๋ฌธ์„ Insert๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ Conflict ์„ ํ•ด์†Œํ•ด์ค€๋‹ค.

Delete์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ถฉ๋Œ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Row๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

Delete์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์—†์ด ๋„˜์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

Insert๋ฌธ์˜ ์ถฉ๋Œ์€ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, Target Database ๊ธฐ์ค€์œผ๋กœ ๋งž์ถฐ์•ผ ํ•˜๋ฏ€๋กœ, ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด ํ•ด๋‹น ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค.

Batch๋กœ ๋ชจ์•˜์„ ๋•Œ์˜ ํ•œ๊ณ„

Parameter ๊ด€๋ จ

Data Conflict Rule (DCR)
Row๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด ํ•ด๋‹น ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค.

Row๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ž‘์—… ์—†์ด ํ•ด๋‹น ์ฒ˜๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค.

์œ„ ๋‘ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์กฐํ•ฉ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ Source ๊ธฐ์ค€ ๋˜๋Š” Target ๊ธฐ์ค€์— ๋งž์ถฐ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋‹ค. ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฒƒ์ด Database ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ Column ๋‚ด ๋ฐ์ดํ„ฐ์˜ ๋Œ€์†Œ ๋น„๊ต๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๊ณ , ์ด์— ๋”ฐ๋ผ ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋™์ž‘์€ ์œ„์˜ Source / Target๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

DCR์˜ ์ œ์•ฝ์‚ฌํ•ญ

Prosync๋Š” where์ ˆ์— lob column์€ ํ™•์ธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋น„๊ต ์‹œ ํ•ด๋‹น column์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ๋‹ค๋ฅธ column ๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ dml์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

DCR - MIN/MAX ์„ค์ • ํ›„ ๋™์ผํ•œ ๊ฐ’์œผ๋กœ dml ์ˆ˜ํ–‰ ์‹œ, ๋น„๊ต ๋กœ์ง์—์„œ ์ถฉ๋Œ์„ ์œ ๋ฐœํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์–‘์ธก ๋…ธ๋“œ์—์„œ ์ •์ƒ dml์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค

Resolve By Source

1. Insert

2. Update

3. Delete

Resolve By Target

1. Insert

2. Update

์ฐธ๊ณ 

์˜์กด์„ฑ ํŒ๋‹จ ๊ธฐ์ค€

๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋“ฏ์ด, Row ๋‹จ์œ„์˜ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ์˜ค๋ผํด๊ณผ ํ‹ฐ๋ฒ ๋กœ์™€ ๊ฐ™์€ RDBMS ์—๋Š” ROWID๋ผ๋Š” Row๋ณ„ ๊ณ ์œ  ์‹๋ณ„์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค.

ROWID๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋ฒˆํ˜ธ, ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋‚ด ๋ธ”๋ฝ ๋ฒˆํ˜ธ, ๋ธ”๋ฝ ๋‚ด Row๋ฐ์ดํ„ฐ ์œ„์น˜๋กœ ๊ตฌ์„ฑ์ด ๋˜๊ณ  ์ด ๋ฐ์ดํ„ฐ๋Š” Row์˜ ๊ณ ์œ  ID๊ฐ€ ๋œ๋‹ค. ProSync๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ํ™•์ธํ•œ๋‹ค.

๋˜ํ•œ Primary key, Foreign key ๊ด€๊ณ„์— ์žˆ๋Š” ๋‘ Row๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ๋„ ์œ„ Row์— ๋Œ€ํ•œ RedBlack Tree์™€๋Š” ๋ณ„๊ฐœ์˜ Tree๋กœ์จ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค.

3. Delete

Resolve By Min/Max

์ฃผ์˜

Data Conflict Rule(DCR) ๊ด€๋ จ

Data Conflict Rule(DCR) ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ USE_PK_FOR_WHERE ์˜ต์…˜์€ ๋ฌด์‹œ๋œ๋‹ค. ๋™๊ธฐํ™”์˜ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์ƒ Conflict๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์šฐ์„ ์ด๊ธฐ ๋•Œ๋ฌธ์— ProSync์—์„  ๋‘ ์˜ต์…˜ ๊ฐ„์— ์ด์™€ ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘”๋‹ค.

Discard

DML DISCARD

ProSync๊ฐ€ ๋™๊ธฐํ™” ๊ณผ์ • ์†์— DML์„ Target DB์— ๋ฐ˜์˜ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ProSync๊ฐ€ ํ•ด๋‹น DML์— ๋Œ€ํ•œ ๋ฐ˜์˜์„ ์„ฑ๊ณตํ•  ๋•Œ ๊นŒ์ง€ ์žฌ์‹œ๋„ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ •ํ•œ ์—๋Ÿฌ์— ๋Œ€ํ•ด ์žฌ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹  ํ•ด๋‹น DML์— ๋Œ€ํ•œ ๋ฐ˜์˜์„ ์ƒ๋žตํ•˜๊ณ  ์ดํ›„์˜ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ DISCARD ๊ธฐ๋Šฅ์ด ๋ฐœ์ƒํ•œ ์ด๋ ฅ์„ ๊ธฐ๋กํ•˜๋Š” Discard file ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  config ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ Parameter๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

DISCARD_YN=[Y|N]
DISCARD_EC=2 10007 8033
DISCARD_FILE_YN=[Y|N]

DISCARD_FILE_DIR=/directory/to/save/file
DISCARD_FILE_SIZE=200M
DISCARD_BACKUP_DIR=/directory/to/save/backup/file
DISCARD_BACKUP_SIZE=10G
ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„
์„ค๋ช…

DISCARD_YN


DDL๋„ DML๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Target DB์— ๋ฐ˜์˜ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ProSync๊ฐ€ ํ•ด๋‹น DDL์— ๋Œ€ํ•œ ๋ฐ˜์˜์„ ์„ฑ๊ณตํ•  ๋•Œ ๊นŒ์ง€ ์žฌ์‹œ๋„ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์žฌ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹  ํ•ด๋‹น DDL์— ๋Œ€ํ•œ ๋ฐ˜์˜์„ ์ƒ๋žตํ•˜๊ณ  ์ดํ›„์˜ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ DISCARD ๊ธฐ๋Šฅ์ด ๋ฐœ์ƒํ•œ ์ด๋ ฅ์„ ๊ธฐ๋กํ•˜๋Š” Discard file ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  config ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ Parameter๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„
์„ค๋ช…

DDL_DISCARD_FILE_SIZE

discard ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: int32

  • ๋ฒ”์œ„: 1M - 1G

  • ๊ธฐ๋ณธ๊ฐ’: 100M

DDL_DISCARD_BACKUP_DIR

discard ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์„ค์ •ํ•œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์„ฑํ•˜๋Š” ๋ฐฑ์—…ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: ๋””๋ ‰ํ† ๋ฆฌ

  • ๋ฒ”์œ„: -

  • ๊ธฐ๋ณธ๊ฐ’: "/"

DDL_DISCARD_BACKUP_SIZE

backup ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: uint64

  • ๋ฒ”์œ„: 0 - 128G

  • ๊ธฐ๋ณธ๊ฐ’: 0

๋™๊ธฐํ™” ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์— ์Šคํ‚ตํ•  ์ง€์— ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•œ๋‹ค. Y ์ƒํƒœ์—์„  ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๊ฐ€ DISCARD_EC ์— ์ž‘์„ฑ๋œ ์—๋Ÿฌ์ฝ”๋“œ์— ์†ํ•ด์žˆ๋Š” ๊ฒฝ์šฐ ์žฌ์‹œ๋„๋ฅผ ์ƒ๋žตํ•œ๋‹ค.

  • ์œ ํ˜•: Y/N

  • ๋ฒ”์œ„: Y/N

  • ๊ธฐ๋ณธ๊ฐ’: N

DISCARD_EC

์žฌ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ๊ฑด๋„ˆ๋›ฐ๊ณ ์ž ํ•˜๋Š” ์—๋Ÿฌ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

  • ์œ ํ˜•: ์—๋Ÿฌ์ฝ”๋“œ

  • ๋ฒ”์œ„: ์ตœ๋Œ€ 256๊ฐœ

  • ๊ธฐ๋ณธ๊ฐ’:

DISCARD_FILE_YN

DISCARD ๋™์ž‘์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋‚ด์šฉ์„ discard ํŒŒ์ผ์— ๋‚จ๊ธฐ๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

  • ์œ ํ˜•: Y/N, dynamic

  • ๋ฒ”์œ„: Y/N

  • ๊ธฐ๋ณธ๊ฐ’: N

DISCARD_FILE_DIR

discard file์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: ๋””๋ ‰ํ† ๋ฆฌ

  • ๋ฒ”์œ„: -

  • ๊ธฐ๋ณธ๊ฐ’: (LOG_DIR๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ)

DISCARD_FILE_SIZE

discard ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: int32, dynamic

  • ๋ฒ”์œ„: 1M - 1G

  • ๊ธฐ๋ณธ๊ฐ’: 100M

DISCARD_BACKUP_DIR

discard ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์„ค์ •ํ•œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์„ฑํ•˜๋Š” ๋ฐฑ์—…ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: ๋””๋ ‰ํ† ๋ฆฌ

  • ๋ฒ”์œ„: -

  • ๊ธฐ๋ณธ๊ฐ’: DISCARD_FILE_DIR/backup

DISCARD_BACKUP_SIZE

backup ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: uint64, dynamic

  • ๋ฒ”์œ„: 0 - 128G

  • ๊ธฐ๋ณธ๊ฐ’: 0(๋ฌด์ œํ•œ)

DDL_DISCARD_YN

๋™๊ธฐํ™” ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์— ์Šคํ‚ตํ•  ์ง€์— ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•œ๋‹ค.

  • ์œ ํ˜•: Y/N

  • ๋ฒ”์œ„: Y/N

  • ๊ธฐ๋ณธ๊ฐ’: N

DDL_DISCARD_FILE_YN

DISCARD ๋™์ž‘์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ๋‚ด์šฉ์„ discard ํŒŒ์ผ์— ๋‚จ๊ธฐ๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ด๋‹ค.

  • ์œ ํ˜•: Y/N

  • ๋ฒ”์œ„: Y/N

  • ๊ธฐ๋ณธ๊ฐ’: N

DDL_DISCARD_FILE_DIR

์ฃผ์˜

  • DISCARD ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด batch apply ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  • DML์„ ๋ฐ˜์˜ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์— ๋Œ€ํ•ด์„œ ๋งŒ DISCARD ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

  • (12032)Deadlock detected. ์—๋Ÿฌ๋Š” DISCARD ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • SAM_BIND_VALUE=Y ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, discard log์— ์‹คํŒจํ•œ query์˜ value ๊ฐ’์ด ํ•จ๊ป˜ ์ €์žฅ๋œ๋‹ค.

DDL DISCARD

์ฃผ์˜

๋‹จ, TABLE ๊ด€๋ จ DDL์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.

discard file์˜ ์ €์žฅ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ.

  • ์œ ํ˜•: ๋””๋ ‰ํ† ๋ฆฌ

  • ๋ฒ”์œ„: -

  • ๊ธฐ๋ณธ๊ฐ’: "/"

DDL_DISCARD_YN=[Y|N]
DDL_DISCARD_FILE_YN=[Y|N]

DDL_DISCARD_FILE_DIR=/directory/to/save/file
DDL_DISCARD_FILE_SIZE=200M
DDL_DISCARD_BACKUP_DIR=/directory/to/save/backup/file
DDL_DISCARD_BACKUP_SIZE=10G