Docs Menu
Docs Home
/
MongoDB ๋งค๋‰ด์–ผ
/ / / /

Database Profiler

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋ง ํ™œ์„ฑํ™” ๋ฐ ๊ตฌ์„ฑ
  • ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฐ์ดํ„ฐ ๋ณด๊ธฐ
  • ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์˜ค๋ฒ„ํ—ค๋“œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ์‹คํ–‰ ์ค‘์ธ mongod ์ธ์Šคํ„ด์Šค์— ์‹คํ–‰๋œ ์ธ์Šคํ„ด์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ช…๋ น์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” CRUD ์ž‘์—…์€ ๋ฌผ๋ก  ๊ตฌ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๋ช…๋ น๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ์ˆ˜์ง‘ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœํŒŒ์ผ๋ง๋œ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์ธ system.profile ์ปฌ๋ ‰์…˜์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ system.profile ๋ฌธ์„œ์— ๋Œ€ํ•œ ๊ฐœ์š”๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ off ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋ณ„๋กœ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด ํŽ˜์ด์ง€์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ์˜ ์ค‘์š”ํ•œ ๊ด€๋ฆฌ ์˜ต์…˜์ด ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฒฝ๊ณ 

system.profile์ด๋ผ๋Š” ์ด๋ฆ„์˜ time series ์ปฌ๋ ‰์…˜ ๋˜๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ๋งˆ์„ธ์š”. MongoDB 6.3 ์ด์ƒ ๋ฒ„์ „์—์„œ ์ด๋ฅผ ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ IllegalOperation ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด์ „ MongoDB ๋ฒ„์ „์€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

0
ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊บผ์ ธ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ์„ค์ •๋œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.
1

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” slowms ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ ์ง€์ •๋œ ํ•„ํ„ฐํ•˜๋‹ค ์™€ ์ผ์น˜ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

ํ•„ํ„ฐ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ:

  • slowms, sampleRate ์˜ต์…˜์€ ํ”„๋กœํŒŒ์ผ๋ง์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ํ•„ํ„ฐ์ผ์น˜ํ•˜๋Š” ์ž‘์—…๋งŒ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

2
ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“  ์ž‘์—…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

mongod ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” mongosh ํ—ฌํผ ๋ฉ”์„œ๋“œ db.setProfilingLevel()์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ๋ฉ”์„œ๋“œ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋“œ๋ผ์ด๋ฒ„ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

mongod ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 0๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” system.profile ์ปฌ๋ ‰์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•œ ํ›„ MongoDB๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— system.profile ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ ์„ค์ •ํ•˜๋ ค๋ฉด db.setProfilingLevel() ํ—ฌํผ์—๊ฒŒ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์— ๋Œ€ํ•ด ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด mongosh์—์„œ ์ด ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel(2)

์…ธ์€ was ํ•„๋“œ์—์„œ ์ด์ „ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ƒˆ ์ˆ˜์ค€์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ถœ๋ ฅ์—์„œ "ok" : 1 ํ‚ค-๊ฐ’ ์Œ์€ ์ž‘์—…์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

์ƒˆ ์„ค์ •์€ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€ ํ™•์ธ ์„น์…˜์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

MongoDB 5.0๋ถ€ํ„ฐ profile ๋ช…๋ น ๋˜๋Š” db.setProfilingLevel() ๋ž˜ํผ(wrapper) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ level, slowms, sampleRate ๋˜๋Š” filter์— ๋Œ€ํ•ด ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์€ log file์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

slowms ๋ฐ sampleRate ํ”„๋กœํŒŒ์ผ๋ง ์„ค์ •์€ ๊ธ€๋กœ๋ฒŒ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

profile ๋ช…๋ น์ด๋‚˜ db.setProfilingLevel() ์…ธ ํ—ฌํผ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€ ๋ฐ ํ•„ํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜์ค€์—์„œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ๋˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ ์˜ต์…˜์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€ ๋ฐ filter ์„ค์ •์ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋Š๋ฆฐ ์ž‘์—…์˜ ์ž„๊ณ„๊ฐ’์€ 100๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค.

๋Š๋ฆฐ ์ž‘์—…์€ MongoDB๊ฐ€ ํ•ด๋‹น ์ž‘์—…์— ์†Œ์š”ํ•˜๋Š” ์‹œ๊ฐ„์ธ workingMillis๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ์ž ๊ธˆ ๋Œ€๊ธฐ ๋ฐ ํ๋ฆ„ ์ œ์–ด์™€ ๊ฐ™์€ ์š”์†Œ๋Š” ์ž‘์—…์ด ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ„๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ํ•„์š”ํ•œ ์ž„๊ณ„๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • profile ๋ช…๋ น ๋˜๋Š” db.setProfilingLevel() ์…ธ ํ—ฌํผ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ slowms ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹œ์ž‘ ์‹œ ๋ช…๋ น์ค„์—์„œ --slowms ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ slowOpThresholdMs ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 1๋กœ ์„ค์ •ํ•˜๊ณ  mongod ์ธ์Šคํ„ด์Šค์˜ ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ„๊ฐ’์„ 20 ๋ฐ€๋ฆฌ์ดˆ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel( 1, { slowms: 20 } )

ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์ด 1์ด๋ฉด ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ slowms ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ๋Š๋ฆฐ ์ž‘์—…์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

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

db.setProfilingLevel()์„ ์‚ฌ์šฉํ•˜์—ฌ slowms ๋ฐ sampleRate๋ฅผ mongos์— ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mongos์˜ ๊ฒฝ์šฐ, slowms ๋ฐ sampleRate ๊ตฌ์„ฑ ์„ค์ •์€ ํ”„๋กœํŒŒ์ผ๋ง์ด mongos์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„๋‹Œ ์ง„๋‹จ ๋กœ๊ทธ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. [1]

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๋Š๋ฆฐ ์ž‘์—…์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด mongos ์ธ์Šคํ„ด์Šค์˜ ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ„๊ฐ’์„ 20์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel( 0, { slowms: 20 } )

์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ ํ•ญ๋ชฉ ๋ฐ ์ง„๋‹จ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€(์˜ˆ: mongod/mongos logmessages)์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • planCacheShapeHash ๋Š” ๋™์ผํ•œ ํ”Œ๋žœ ์บ์‹œ ์ฟผ๋ฆฌ ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š” ๋Š๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

    MongoDB 8.0 ๋ถ€ํ„ฐ ๊ธฐ์กด queryHash ํ•„๋“œ ์˜ ์ด๋ฆ„์ด planCacheShapeHash ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ MongoDB ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ planCacheShapeHash queryHash ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • planCacheKey ๋Š๋ฆฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ๊ณ„ํš ์บ์‹œ์— ๊ด€ํ•ด ๋” ๋งŽ์€ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๊ฐ€ ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ—๊ฐ’๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” oplog ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Š๋ฆฐ oplog ๋ฉ”์‹œ์ง€์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • diagnostic log์— ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • applied op: <oplog entry> took <num>ms ํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ REPL ๊ตฌ์„ฑ ์š”์†Œ ์•„๋ž˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

  • ๋กœ๊ทธ ์ˆ˜์ค€(์‹œ์Šคํ…œ ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ค€)์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • slowOpSampleRate์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ๋Š๋ฆฐ oplog ํ•ญ๋ชฉ์„ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋Š๋ฆฐ ์—ฐ์‚ฐ ์ค‘ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋ง๋œ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ค‘ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์›ํ•˜๋Š” ์ƒ˜ํ”Œ ์†๋„๋ฅผ ์ง€์ •ํ•˜์„ธ์š”. [2]

๊ธฐ๋ณธ์ ์œผ๋กœ sampleRate๋Š” 1.0๋กœ ์„ค์ •๋˜๋ฉฐ, ๋Š๋ฆฐ ์ž‘์—…์ด ๋ชจ๋‘ ํ”„๋กœํŒŒ์ผ๋ง๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. sampleRate๋ฅผ 0์—์„œ 1 ์‚ฌ์ด๋กœ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์ด 1์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” sampleRate์— ๋”ฐ๋ผ ๋Š๋ฆฐ ์ž‘์—…์˜ ๋ฌด์ž‘์œ„๋กœ ์ƒ˜ํ”Œ๋ง๋œ ๋น„์œจ๋งŒ ํ”„๋กœํŒŒ์ผ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 1๋กœ ์„ค์ •ํ•˜๊ณ , ๋ชจ๋“  ๋Š๋ฆฐ ์ž‘์—…์˜ 42%๋ฅผ ์ƒ˜ํ”Œ๋งํ•˜๋„๋ก ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel( 1, { sampleRate: 0.42 } )

์ˆ˜์ •๋œ ์ƒ˜ํ”Œ๋ง ์†๋„ ๊ฐ’์€ ์‹œ์Šคํ…œ ๋กœ๊ทธ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel()์„ ์‚ฌ์šฉํ•˜์—ฌ mongos์— slowms ๋ฐ sampleRate๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mongos์˜ ๊ฒฝ์šฐ slowms ๋ฐ sampleRate ์„ค์ •์€ mongos์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ง„๋‹จ ๋กœ๊ทธ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ํ”„๋กœํŒŒ์ผ๋Ÿฌ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [1]

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์€ ๋Š๋ฆฐ ์ž‘์—… ๊ธฐ๋ก์„ ์œ„ํ•œ mongos ์ธ์Šคํ„ด์Šค์˜ ์ƒ˜ํ”Œ๋ง ์†๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel( 0, { sampleRate: 0.42 } )

์ค‘์š”

logLevel์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, MongoDB๋Š” slowOpSampleRate ์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ์†๋„๋กœ ๋Š๋ฆฐ ์ž‘์—…์„ ์ง„๋‹จ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

logLevel์„ ๋” ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋†’์œผ๋ฉด ๋ชจ๋“  ์ž‘์—…์ด ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๊ด€๊ณ„์—†์ด ์ง„๋‹จ ๋กœ๊ทธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ์„ธ์ปจ๋”๋ฆฌ์˜ ์ €์† oplog ํ•ญ๋ชฉ ๋ฉ”์‹œ์ง€ ๋กœ๊น…์€ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์„ธ์ปจ๋”๋ฆฌ ๋กœ๊ทธ๋Š” oplog ํ•ญ๋ชฉ๋งŒ ๊ธฐ๋กํ•˜๋ฉฐ, logLevel ์„ ๋†’์—ฌ๋„ ๋ชจ๋“  oplog ํ•ญ๋ชฉ์ด ๊ธฐ๋ก๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

[1](1, 2) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ ์ƒค๋”ฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

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

mongod ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ filter ๋Š” ์ง„๋‹จ ๋กœ๊ทธ ๋ฐ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํ”„๋กœํŒŒ์ผ๋Ÿฌ์— ๋ชจ๋‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

mongos ์ธ์Šคํ„ด์Šค์˜ ๊ฒฝ์šฐ mongos์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ filter๋Š” ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„๋‹Œ ์ง„๋‹จ ๋กœ๊ทธ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

ํ”„๋กœํŒŒ์ผ๋ง filter๊ฐ€ ์„ค์ •๋˜์—ˆ๋‹ค๋ฉด, slowms๊ณผ sampleRate ์˜ต์…˜์ด ์ง„๋‹จ ๋กœ๊ทธ๋‚˜ ํ”„๋กœํŒŒ์ผ๋Ÿฌ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ db.setProfilingLevel() ์˜ˆ์‹œ์—์„œ๋Š” ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ํ”„๋กœํ•„ ์ˆ˜์ค€์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 2๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์š” ์‹œ๊ฐ„์ด 2์ดˆ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” query ์ž‘์—…๋งŒ ๊ธฐ๋กํ•˜๋„๋ก ํ•˜๋Š” { op: "query", millis: { $gt: 2000 } } ํ•„ํ„ฐ

db.setProfilingLevel( 2, { filter: { op: "query", millis: { $gt: 2000 } } } )

ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ ๋ณด๋ ค๋ฉด mongosh ์—์„œ ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

db.getProfilingStatus()

์…ธ์€ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

was ํ•„๋“œ๋Š” ํ˜„์žฌ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

slowms ํ•„๋“œ๋Š” ์ž‘์—… ์‹œ๊ฐ„ ์ž„๊ณ„๊ฐ’(๋ฐ€๋ฆฌ์ดˆ)์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋Š๋ฆฐ ์ž‘์—…์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

sampleRate ํ•„๋“œ๋Š” ํ”„๋กœํŒŒ์ผ๋ง์ด ํ•„์š”ํ•œ ๋Š๋ฆฐ ์ž‘์—…์˜ ๋น„์œจ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋ง์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด mongosh์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

db.setProfilingLevel(0)

์ฐธ๊ณ 

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

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

mongod ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์‹œ์ž‘ ์‹œ ๋‹ค์Œ ์˜ต์…˜์„ mongod๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

mongod --profile 1 --slowms 15 --slowOpSampleRate 0.5

๋˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ operationProfiling์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 1์œผ๋กœ ์„ค์ •ํ•˜๊ณ , 15๋ฐ€๋ฆฌ์ดˆ๋ณด๋‹ค ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ์ž‘์—…์„ ๋Š๋ฆฐ ์ž‘์—…์œผ๋กœ ์ •์˜ํ•˜๋ฉฐ, ๋Š๋ฆฐ ์ž‘์—…์˜ 50%๋งŒ ํ”„๋กœํŒŒ์ผ๋งํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. [2]

logLevel์ด 0๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ slowms ๋ฐ slowOpSampleRate๋Š” ์ง„๋‹จ ๋กœ๊ทธ์— ๊ธฐ๋ก๋˜๋Š” ์ž‘์—…์—๋„ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. slowms ๋ฐ slowOpSampleRate๋Š” mongos์˜ ์ง„๋‹จ ๋กœ๊ทธ ๊ตฌ์„ฑ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [2]

ํŒ

๋‹ค์Œ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

mongos ์ธ์Šคํ„ด์Šค์—์„œ๋Š” ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ์ƒค๋”ฉ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ mongod ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ mongos์—์„œ --slowms ๋ฐ slowOpSampleRate๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋Š๋ฆฐ ์ž‘์—…์— ๋Œ€ํ•œ ์ง„๋‹จ ๋กœ๊ทธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” system.profile ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

system.profile ์ปฌ๋ ‰์…˜์„ ์ฟผ๋ฆฌํ•˜์—ฌ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์˜ˆ์‹œ๋Š” ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ ์˜ˆ์‹œ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด์ œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ system.profile ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์ฝ๊ธฐ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” system.profile ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ถœ๋ ฅ ์„ธ๋ถ€ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋กœํŒŒ์ผ๋Ÿฌ ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

system.profile ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ ๋กœ๊ทธ ํ•ญ๋ชฉ 10๊ฐœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

๋ช…๋ น ์ž‘์—…($cmd)์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

ํŠน์ • ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ์œ ์‚ฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” mydb ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ test ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

db.system.profile.find( { ns : 'mydb.test' } ).pretty()

์™„๋ฃŒํ•˜๋Š” ๋ฐ 5๋ฐ€๋ฆฌ์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

db.system.profile.find( { millis : { $gt : 5 } } ).pretty()

ํŠน์ • ์‹œ๊ฐ„ ๋ฒ”์œ„์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”.

db.system.profile.find( {
ts : {
$gt: new ISODate("2012-12-09T03:00:00Z"),
$lt: new ISODate("2012-12-09T03:40:00Z")
}
} ).pretty()

๋‹ค์Œ ์˜ˆ์‹œ๋Š” ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์‚ดํŽด๋ณด๊ณ , ์ฝ๊ธฐ ์‰ฝ๋„๋ก ์ถœ๋ ฅ์—์„œ user ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ, ๊ฐ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

db.system.profile.find( {
ts : {
$gt: new ISODate("2011-07-12T03:00:00Z"),
$lt: new ISODate("2011-07-12T03:40:00Z")
}
}, { user: 0 } ).sort( { millis: -1 } )

ํ”„๋กœํŒŒ์ผ๋ง์ด ํ™œ์„ฑํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ mongosh์˜ show profile ํ—ฌํผ๋Š” ์‹คํ–‰ ์‹œ๊ฐ„์ด 1๋ฐ€๋ฆฌ์ดˆ ์ด์ƒ์ธ ๊ฐ€์žฅ ์ตœ๊ทผ ์ž‘์—… 5๊ฑด์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. mongosh์—์„œ show profile ์‹คํ–‰:

show profile

ํ”„๋กœํŒŒ์ผ๋ง์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒฝ์šฐ ํŠนํžˆ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์ด 2๋กœ ๊ตฌ์„ฑ๋˜๊ฑฐ๋‚˜ ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์„ 1๋กœ ์ ์šฉํ•˜์—ฌ ๋‚ฎ์€ ์ž„๊ณ„๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœํŒŒ์ผ๋ง์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋ง์€ system.profile ์ปฌ๋ ‰์…˜๊ณผ MongoDB logfile์— ๋กœ๊ทธ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํŒŒ์ผ๋ง์€ ๋””์Šคํฌ ๊ณต๊ฐ„๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—์„œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ „์— ์„ฑ๋Šฅ๊ณผ ์ €์žฅ์†Œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ณ ๋ คํ•˜์„ธ์š”.

system.profile ์ปฌ๋ ‰์…˜์€ ๊ธฐ๋ณธ ํฌ๊ธฐ๊ฐ€ 1๋ฉ”๊ฐ€๋ฐ”์ดํŠธ์ธ ๊ณ ์ • ์‚ฌ์ด์ฆˆ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ์ด ์ •๋„ ํฌ๊ธฐ์˜ ์ปฌ๋ ‰์…˜์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ํ”„๋กœํŒŒ์ผ ๋ฌธ์„œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž‘์—…๋‹น ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋” ์ ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋‹จ๊ณ„์— ๋”ฐ๋ผ system.profile ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ผ์ด๋จธ๋ฆฌ์—์„œ system.profile ์ปฌ๋ ‰์…˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋กœํŒŒ์ผ๋ง์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

  2. system.profile ์ปฌ๋ ‰์…˜์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  3. ์ƒˆ system.profile ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  4. ํ”„๋กœํŒŒ์ผ๋ง์„ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 4000000๋ฐ”์ดํŠธ(4MB)์ธ ์ƒˆ system.profile ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค๋ ค๋ฉด mongosh์—์„œ ๋‹ค์Œ ์ž‘์—… ์ˆœ์„œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

db.setProfilingLevel(0)
db.system.profile.drop()
db.createCollection( "system.profile", { capped: true, size:4000000 } )
db.setProfilingLevel(1)

์„ธ์ปจ๋”๋ฆฌ์—์„œ system.profile ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์„ธ์ปจ๋”๋ฆฌ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋…๋ฆฝํ˜•์œผ๋กœ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์œ„์˜ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ๋˜๋ฉด ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ๋ฉค๋ฒ„๋กœ ๋…๋ฆฝํ˜•์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ณต์ œ๋ณธ ์„ธํŠธ ๋ฉค๋ฒ„์˜ ์œ ์ง€ ๊ด€๋ฆฌ ์ˆ˜ํ–‰์„ ์ฐธ์กฐํ•˜์„ธ์š”.

[2](1, 2, 3) ์ด์ œ ๋ณต์ œ๋ณธ ์„ธํŠธ์˜ ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„๊ฐ€ ๋Š๋ฆฐ ์ž‘์—… ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” oplog ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Š๋ฆฐ oplog ๋ฉ”์‹œ์ง€์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • diagnostic log์— ์„ธ์ปจ๋”๋ฆฌ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • applied op: <oplog entry> took <num>ms ํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ REPL ๊ตฌ์„ฑ ์š”์†Œ ์•„๋ž˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ์ˆ˜์ค€(์‹œ์Šคํ…œ ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜์ค€)์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœํŒŒ์ผ๋ง ์ˆ˜์ค€์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • slowOpSampleRate์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ๋Š๋ฆฐ oplog ํ•ญ๋ชฉ์„ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ์•„๊ฐ€๊ธฐ

๊ฒฐ๊ณผ ํ•ด์„