Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
MongoDB Diagnostics and Performance Tuning
Search
dcrosta
January 23, 2012
Technology
3
1.7k
MongoDB Diagnostics and Performance Tuning
From MongoDB LA, January 19, 2012.
dcrosta
January 23, 2012
Tweet
Share
More Decks by dcrosta
See All by dcrosta
Let the computer write the tests
dcrosta
0
46
Good Test, Bad Test
dcrosta
1
690
Exploring Python Code Objects (PyOhio)
dcrosta
4
300
Python Packaging for Humans
dcrosta
13
490
Exploring Python Code Objects
dcrosta
5
240
Keystone: Python Web Development, Simplified
dcrosta
4
300
MongoDB In the Cloud with Amazon EC2
dcrosta
6
430
Evolution without Migration
dcrosta
2
420
Other Decks in Technology
See All in Technology
ドメイン駆動設計の実践により事業の成長スピードと保守性を両立するショッピングクーポン
lycorptech_jp
PRO
13
2.3k
商品レコメンドでのexplicit negative feedbackの活用
alpicola
2
370
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
170
Azureの開発で辛いところ
re3turn
0
240
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.4k
なぜfreeeはハブ・アンド・スポーク型の データメッシュアーキテクチャにチャレンジするのか?
shinichiro_joya
2
490
今年一年で頑張ること / What I will do my best this year
pauli
1
220
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
RubyでKubernetesプログラミング
sat
PRO
4
160
#TRG24 / David Cuartielles / Post Open Source
tarugoconf
0
590
Unsafe.BitCast のすゝめ。
nenonaninu
0
200
TSのコードをRustで書き直した話
askua
2
190
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Six Lessons from altMBA
skipperchong
27
3.6k
Navigating Team Friction
lara
183
15k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Side Projects
sachag
452
42k
Practical Orchestrator
shlominoach
186
10k
Adopting Sorbet at Scale
ufuk
74
9.2k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Designing for Performance
lara
604
68k
Scaling GitHub
holman
459
140k
Transcript
Diagnostics and Performance Tuning Dan Crosta, 10gen
[email protected]
@lazlofruvous
Agenda •Tools •Performance Indicators
Speed MongoDB is a high-performance database, but how do I
know that I’m getting the best performance
TOOLS
1. mongostat
2.serverStatus > db.serverStatus(); { ! ! "host" : “MacBook.local", "version"
: "2.0.1", "process" : "mongod", "uptime" : 619052, // Lots more stats... }
3.Profiler > db.setProfilingLevel(2); { "was" : 0, "slowms" : 100,
"ok" : 1 }
3.Profiler > db.system.profile.find() { "ts" : ISODate("2011-09-30T02:07:11.370Z"), "op" : "query",
"ns" : "docs.spreadsheets", "query" : { "username": "dcrosta" }, "nscanned" : 20001, "nreturned" : 1, "responseLength" : 241, "millis" : 1407, "client" : "127.0.0.1", "user" : "" }
4.Monitoring Service • MMS: 10gen.com/try-mms • Nagios • Munin
INDICATORS
1.Slow Operations Sun May 22 19:01:47 [conn10] query docs.spreadsheets ntoreturn:100
reslen:510436 nscanned:19976 { username: “dcrosta”} nreturned:100 147ms
2.Replication Lag PRIMARY> rs.status() { "set" : "replSet", "date" :
ISODate("2011-09-30T02:28:21Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "MacBook.local:30001", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1317349400000, "i" : 1 }, "optimeDate" : ISODate("2011-09-30T02:23:20Z"), "self" : true }, { "_id" : 1, "name" : "MacBook.local:30002", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 302, "optime" : { "t" : 1317349400000, "i" : 1 }, "optimeDate" : ISODate("2011-09-28T10:17:47Z"), "lastHeartbeat" : ISODate("2011-09-30T02:28:19Z"),
3.Resident Memory > db.serverStatus().mem { "bits" : 64, // Need
64, not 32 "resident" : 7151, // Physical memory "virtual" : 14248, // Files + heap "mapped" : 6942 // Data files
3.Resident Memory > db.stats() { "db" : "docs", "collections" :
3, "objects" : 805543, "avgObjSize" : 5107.312096312674, "dataSize" : 4114159508, // ~4GB "storageSize" : 4282908160, // ~4GB "numExtents" : 33, "indexes" : 3, "indexSize" : 126984192, // ~126MB "fileSize" : 8519680000, // ~8.5GB "ok" : 1 }
3.Resident Memory ! ! indexSize + dataSize <= RAM
4.Page Faults > db.serverStatus().extra_info { ! "note" : "fields vary
by platform", ! “heap_usage_bytes” : 210656, ! “page_faults” : 2381 }
5.Write Lock Percentage > db.serverStatus().globalLock { "totalTime" : 2809217799, "lockTime"
: 13416655, "ratio" : 0.004775939766854653, }
Concurrency • One writer or many readers • Global RW
Lock • Yields on long-running ops and if we’re likely to go to disk.
High Lock Percentage? You’re Probably Paging!
6.Reader and Writer Queues > db.serverStatus().globalLock { "totalTime" : 2809217799,
"lockTime" : 13416655, "ratio" : 0.004775939766854653, "currentQueue" : { "total" : 1, "readers" : 1, "writers" : 0 }, "activeClients" : { "total" : 2, "readers" : 1, "writers" : 1 }
6.Reader and Writer Queues > db.currentOp() { "inprog" : [
{ "opid" : 6996, "active" : true, "lockType" : "read", "waitingForLock" : true, "secs_running" : 1, "op" : "query", "ns" : "docs.spreadsheets", "query" : { “username” : “Hackett, Bernie” }, "client" : "10.71.194.111:51015", "desc" : "conn", "threadId" : "0x152693000", "numYields" : 0 },
7.Background Flushing > db.serverStatus().backgroundFlushing { "flushes" : 5634, "total_ms" :
83556, "average_ms" : 14.830670926517572, "last_ms" : 4, "last_finished" : ISODate("2011-09-30T03:30:59.052Z") }
Disk Considerations • Raid • SSD • SAN?
8.Connections > db.serverStatus().connections { "current" : 7, "available" : 19993
}
9.Network Speed > db.serverStatus().network { "bytesIn" : 877291, "bytesOut" :
846300, "numRequests" : 9186 }
10.Fragmentation db.spreadsheets.stats() { "ns" : "docs.spreadhseets", "size" : 8200046932, //
~8GB "storageSize" : 11807223808, // ~11GB "paddingFactor" : 1.4302, "totalIndexSize" : 345964544, // ~345MB "indexSizes" : { "_id_" : 66772992, “username_1_filename_1” : 146079744, “username_1_updated_at_1” : 133111808 }, "ok" : 1 }
10.Fragmentation 2 is the Magic Number
storageSize / size > 2 • Might not be reclaiming
free space fast enough • Padding factor might not be correctly calibrated db.spreadsheets.runCommand(“compact”)
paddingFactor > 2 • You might have the wrong data
model • You might be growing documents too much • Should review Schema Design
download at mongoDB.org
We’re Hiring Engineers, Sales, Evangelist, Marketing, Support, Developers @mongodb_jobs http://linkd.in/joinmongo
We’re Always Around For Conferences, Appearances and Meetups 10gen.com/events @mongodb
h2p://bit.ly/mongo8