Docs Menu

fsync

fsync

๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ์“ฐ๊ธฐ๋ฅผ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์—์„œ ๋””์Šคํฌ๋กœ ํ”Œ๋Ÿฌ์‹œํ•ฉ๋‹ˆ๋‹ค. lock ํ•„๋“œ๋ฅผ true(์œผ)๋กœ ์„ค์ •ํ•˜๋ฉด ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ์ž ๊ธˆ์„ ์„ค์ •ํ•˜์—ฌ ์ž ๊ธˆ์ด ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ์ถ”๊ฐ€ ์“ฐ๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

MongoDB 7.0.2 ๋ถ€ํ„ฐ ์‹œ์ž‘ (also available starting in 6.0.11, and 5.0.22) the fsync and fsyncUnlock commands can run on mongos to lock and unlock a sharded cluster.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋ฉด MongoDB๋Š” ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•œ ๋‹ค์Œ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์”๋‹ˆ๋‹ค.

๋””์Šคํฌ์— ์“ฐ๊ธฐ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋ ค๋ฉด fsync๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

์ค‘์š”

์„œ๋ฒ„๋Š” fsync ๋ฝ ํšŸ์ˆ˜๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. lock ํ•„๋“œ ๋ฅผ true ์œผ)๋กœ ์„ค์ •ํ•˜๋‹ค ํ•œ fsync ๋ช…๋ น์€ ๋ฝ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  fsyncUnlock ๋ช…๋ น์€ ์ž ๊ธˆ ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ์ž ๊ธด ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์—์„œ ์“ฐ๊ธฐ๋ฅผ ํ™œ์„ฑํ™” ํ•˜๋ ค๋ฉด ๋ฝ ํšŸ์ˆ˜๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ fsyncUnlock ๋ช…๋ น์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋ฐฑ์—… ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์“ฐ๊ธฐ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ

mongosh์—์„œ ์ด ๋ช…๋ น์„ db.fsyncLock() ํ—ฌํผ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด ๋ช…๋ น์€ ๋‹ค์Œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • MongoDB Enterprise: MongoDB์˜ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

  • MongoDB Community: MongoDB์˜ ์†Œ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌด๋ฃŒ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

db.adminCommand(
{
fsync: 1,
lock: <Boolean>,
fsyncLockAcquisitionTimeout: <integer>,
comment: <any>
}
)

๋ช…๋ น์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„๋“œ
์œ ํ˜•
์„ค๋ช…

fsync

integer

fsyncLockAcquisitionTimeoutMillis

integer

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

๊ธฐ๋ณธ๊ฐ’ : 90000

๋ฒ„์ „ 7.0.2์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋จ:

lock

๋ถ€์šธ

์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž ๊ทธ๊ณ  ๋ชจ๋“  ์“ฐ๊ธฐ ์ž‘์—…์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. lock ์ž‘์—…์ด ์žˆ๋Š” ๊ฐ๊ฐ์˜ fsync์€(๋Š”) ์ž ๊ธˆ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

comment

any

์„ ํƒ ์‚ฌํ•ญ. ์ด ๋ช…๋ น์— ์ฒจ๋ถ€ํ•  ์‚ฌ์šฉ์ž ์ œ๊ณต ์ฝ”๋ฉ˜ํŠธ์ž…๋‹ˆ๋‹ค. ์„ค์ •๋˜๋ฉด ์ด ์„ค๋ช…์€ ๋‹ค์Œ ์œ„์น˜์—์„œ ์ด ๋ช…๋ น์˜ ๋ ˆ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€์€ ์œ ํšจํ•œ ๋ชจ๋“  BSON types (๋ฌธ์ž์—ด, ์ •์ˆ˜, ๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fsync ๋ช…๋ น์„ lock ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด cp, scp ๋˜๋Š” tar ์™€ ๊ฐ™์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘๋œ mongod ์—๋Š” ์ž ๊ธด mongod ์˜ ์‚ฌ์šฉ์ž ์ž‘์„ฑ ๋ฐ์ดํ„ฐ์™€ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž ์ž‘์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ๊ธด mongod ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ์ €๋„๋ง ๋™๊ธฐํ™” ๋˜๋Š” WiredTiger ์Šค๋ƒ…์ƒท ๊ณผ ๊ฐ™์€ ์ž‘์—…์œผ๋กœ ์ธํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์ง€๋งŒ(์˜ˆ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ), ์ผ๋ถ€ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB- ๊ถŒ์žฅ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ์ ˆ์ฐจ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์€ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๋ฐฑ์—… ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฒ„์ „ 7.0.2์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋จ:

fsync ๋ช…๋ น์ด mongos์—์„œ ์‹คํ–‰๋˜๋ฉด ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ fsync ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. lock ํ•„๋“œ๋ฅผ true(์œผ)๋กœ ์„ค์ •ํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์— ์ž ๊ธˆ์ด ์„ค์ •๋˜์–ด ์ถ”๊ฐ€ ์“ฐ๊ธฐ๊ฐ€ ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž ๊ทธ๊ธฐ ์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ฐฑ์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์„ธ์š”.

  • ์ฒญํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ๋ฆฌ์ƒค๋”ฉ ๋˜๋Š” DDL ์ž‘์—…์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€ ์ฒญํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์‹œ์ž‘๋˜์ง€ ์•Š๋„๋ก ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

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

fsync ๋ช…๋ น์€ lockCount ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. mongod์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์นด์šดํŠธ๋Š” ์„œ๋ฒ„์— ์„ค์ •๋œ fsync ์ž ๊ธˆ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ mongos์€(๋Š”) ๊ฐ ์ƒค๋“œ์— fsync ์ž‘์—…์„ ์ „์†กํ•˜๊ณ  ๊ฐ๊ฐ์— ๋Œ€ํ•œ lockCount์„(๋ฅผ) ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

lockCount ํ•„๋“œ๊ฐ€ 0๋ณด๋‹ค ํฌ๋ฉด ์„œ๋ฒ„์™€ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ชจ๋“  ์“ฐ๊ธฐ๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋ ค๋ฉด fsyncUnlock ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Fsync ์ž ๊ธˆ์€ ๋ณต์ œ๋ณธ ์„ธํŠธ ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ ๋‹ค์šด์—์„œ ๋ณต๊ตฌํ•˜๊ธฐ

  1. fsyncUnlock ๋ช…๋ น์„ ์ž ๊ธˆ ๊ฐœ์ˆ˜๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  2. fsync ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ fsync ์ž ๊ธˆ์„ ๋‹ค์‹œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ฐฑ์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ fsync ์ž ๊ธˆ์€ ์˜๊ตฌ์ ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธฐ๋ณธ๊ฐ’์ด ๋‹ค์‹œ ์˜จ๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด fsyncUnlock ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

fsync ๋ช…๋ น์„ lock ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด cp, scp ๋˜๋Š” tar ์™€ ๊ฐ™์€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘๋œ mongod ์—๋Š” ์ž ๊ธด mongod ์˜ ์‚ฌ์šฉ์ž ์ž‘์„ฑ ๋ฐ์ดํ„ฐ์™€ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž ์ž‘์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ๊ธด mongod ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์€ ์ €๋„๋ง ๋™๊ธฐํ™” ๋˜๋Š” WiredTiger ์Šค๋ƒ…์ƒท ๊ณผ ๊ฐ™์€ ์ž‘์—…์œผ๋กœ ์ธํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์ง€๋งŒ(์˜ˆ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ), ์ผ๋ถ€ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MongoDB- ๊ถŒ์žฅ ๋ฐฑ์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ์ ˆ์ฐจ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์€ ์ž์ฒด ๊ด€๋ฆฌ ๋ฐฐํฌ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๋ฐฑ์—… ๋ฐฉ๋ฒ•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

fsync ๋ช…๋ น์€ ๊ฐœ๋ณ„ mongod ์ธ์Šคํ„ด์Šค ๋˜๋Š” ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ mongos(์œผ)๋กœ ์ž ๊ธ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. lock ํ•„๋“œ๋ฅผ true(์œผ)๋กœ ์„ค์ •ํ•œ ์ƒํƒœ์—์„œ ์‹คํ–‰ํ•˜๋ฉด fsync ์ž‘์—…์€ ์ธ์Šคํ„ด์Šค ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž ๊ธˆ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์œผ๋กœ ํ”Œ๋Ÿฌ์‹œํ•˜๊ณ  ๋ชจ๋“  ์ถ”๊ฐ€ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž ๊ทธ๋ ค๋ฉด fsync ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ lock ํ•„๋“œ๋ฅผ true(์œผ)๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.adminCommand( { fsync: 1, lock: true } )

์ด ์ž‘์—…์€ ์ž‘์—… ์ƒํƒœ์™€ lockCount์„(๋ฅผ) ํฌํ•จํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

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

์ค‘์š”

fsync ๋ฝ ์ž‘์—…์€ ๋ฝ ํšŸ์ˆ˜๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•˜๋ ค๋ฉด ์ž ๊ธˆ ํšŸ์ˆ˜๊ฐ€ 0์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, fsync ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€์ •๋œ ํšŸ์ˆ˜ ๋™์•ˆ ํ•ด๋‹น ํšŸ์ˆ˜์˜ ์ž ๊ธˆ ํ•ด์ œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜์—ฌ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž ๊ธˆ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋ฒ„์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•˜๋ ค๋ฉด fsyncUnlock ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

db.adminCommand( { fsyncUnlock: 1 } )

์ž ๊ธˆ ํšŸ์ˆ˜๋ฅผ 0์œผ๋กœ ์ค„์ด๋ ค๋ฉด ์ด ๋ช…๋ น์„ ํ•„์š”ํ•œ ๋งŒํผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํšŸ์ˆ˜๊ฐ€ 0์— ๋„๋‹ฌํ•˜๋ฉด ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์“ฐ๊ธฐ๋ฅผ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fsync ์ž ๊ธˆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด db.currentOp()์„(๋ฅผ) ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์…ธ์—์„œ ๋‹ค์Œ JavaScript ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ˜„์žฌ ์ž ๊ฒผ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

serverIsLocked = function () {
var co = db.currentOp();
if (co && co.fsyncLock) {
return true;
}
return false;
}

์ด ํ•จ์ˆ˜๋ฅผ mongosh ์„ธ์…˜์— ๋กœ๋“œํ•œ ํ›„ ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

serverIsLocked()

์ด ํ•จ์ˆ˜๋Š” ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ˜„์žฌ ์ž ๊ฒจ ์žˆ์œผ๋ฉด true์„(๋ฅผ) ๋ฐ˜ํ™˜ํ•˜๊ณ , ์„œ๋ฒ„ ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ž ๊ฒจ ์žˆ์ง€ ์•Š์œผ๋ฉด false์„(๋ฅผ) ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.