fsync
์ด ํ์ด์ง์ ๋ด์ฉ
์ ์
fsync
๋ณด๋ฅ ์ค์ธ ๋ชจ๋ ์ฐ๊ธฐ๋ฅผ ์คํ ๋ฆฌ์ง ๊ณ์ธต์์ ๋์คํฌ๋ก ํ๋ฌ์ํฉ๋๋ค.
lock
ํ๋๋ฅผtrue
(์ผ)๋ก ์ค์ ํ๋ฉด ์๋ฒ ๋๋ ํด๋ฌ์คํฐ์ ์ ๊ธ์ ์ค์ ํ์ฌ ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ์ถ๊ฐ ์ฐ๊ธฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.MongoDB 7.0.2 ๋ถํฐ ์์ (also available starting in 6.0.11, and 5.0.22) the
fsync
andfsyncUnlock
commands can run onmongos
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> } )
๋ช ๋ น ํ๋
๋ช ๋ น์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋๊ฐ ์์ต๋๋ค.
ํ๋ | ์ ํ | ์ค๋ช
|
---|---|---|
| integer | '1'์(๋ฅผ) |
| integer | ์ ํ ์ฌํญ์ ๋๋ค. ์ ๊ธ์ ํ๋ํ๊ธฐ ์ํด ๋๊ธฐํ๋ ์๊ฐ(๋ฐ๋ฆฌ์ด)์ ์ง์ ํฉ๋๋ค. ์ ๊ธ ํ๋ ์์ ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ๋ช ๋ น์ ์คํจํ ์๋ต์ ๋ฐํํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ : ๋ฒ์ 7.0.2์ ์๋ก ์ถ๊ฐ๋จ: |
| ๋ถ์ธ | ์ ํ ์ฌํญ์
๋๋ค. ์๋ฒ ๋๋ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ทธ๊ณ ๋ชจ๋ ์ฐ๊ธฐ ์์
์ ์ฐจ๋จํฉ๋๋ค. |
| 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 ์ ๊ธ์ ์ ์งํ์ง ์์ผ๋ฉฐ ์ฐ๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ฐฑ์ ์์ ์ค์ ์ ํ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ๊ฒฐ๊ณผ ๋ฐฑ์ ์ด ์ผ๊ด๋์ง ์๊ฑฐ๋ ์ฌ์ฉํ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋ค์ด์์ ๋ณต๊ตฌํ๊ธฐ
fsyncUnlock
๋ช ๋ น์ ์ ๊ธ ๊ฐ์๊ฐ 0์ด ๋ ๋๊น์ง ์คํํ์ฌ ๋ชจ๋ ๋ ธ๋์ ์ ๊ธ์ ํด์ ํฉ๋๋ค.fsync
๋ช ๋ น์ ์คํํ์ฌ ํด๋ฌ์คํฐ์์ fsync ์ ๊ธ์ ๋ค์ ์ค์ ํฉ๋๋ค.๋ฐฑ์ ์ ๋ค์ ์์ํฉ๋๋ค.
๋ํ fsync ์ ๊ธ์ ์๊ตฌ์ ์
๋๋ค. ์ด์ ๊ธฐ๋ณธ๊ฐ์ด ๋ค์ ์จ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด fsyncUnlock
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋
ธ๋์ ์ ๊ธ์ ํด์ ํด์ผ ํฉ๋๋ค.
์์
Fsync ์ ๊ธ
์ฐธ๊ณ
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 ์ ๊ธ์ ์ํํ๋ ์ง์ ๋ ํ์ ๋์ ํด๋น ํ์์ ์ ๊ธ ํด์ ์์ ์ ์คํํ์ฌ ์ฐ๊ธฐ๋ฅผ ์ํด ์๋ฒ ๋๋ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ธ ํด์ ํด์ผ ํฉ๋๋ค.
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
์(๋ฅผ) ๋ฐํํฉ๋๋ค.