Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB Diagnostics and Performance Tuning

dcrosta
January 23, 2012

MongoDB Diagnostics and Performance Tuning

From MongoDB LA, January 19, 2012.

dcrosta

January 23, 2012
Tweet

More Decks by dcrosta

Other Decks in Technology

Transcript

  1. Speed MongoDB is a high-performance database, but how do I

    know that I’m getting the best performance
  2. 2.serverStatus > db.serverStatus(); { ! ! "host" : “MacBook.local", "version"

    : "2.0.1", "process" : "mongod", "uptime" : 619052, // Lots more stats... }
  3. 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. 1.Slow Operations Sun May 22 19:01:47 [conn10] query docs.spreadsheets ntoreturn:100

    reslen:510436 nscanned:19976 { username: “dcrosta”} nreturned:100 147ms
  5. 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"),
  6. 3.Resident Memory > db.serverStatus().mem { "bits" : 64, // Need

    64, not 32 "resident" : 7151, // Physical memory "virtual" : 14248, // Files + heap "mapped" : 6942 // Data files
  7. 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 }
  8. 4.Page Faults > db.serverStatus().extra_info { ! "note" : "fields vary

    by platform", ! “heap_usage_bytes” : 210656, ! “page_faults” : 2381 }
  9. Concurrency • One writer or many readers • Global RW

    Lock • Yields on long-running ops and if we’re likely to go to disk.
  10. 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 }
  11. 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 },
  12. 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") }
  13. 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 }
  14. storageSize / size > 2 • Might not be reclaiming

    free space fast enough • Padding factor might not be correctly calibrated db.spreadsheets.runCommand(“compact”)
  15. paddingFactor > 2 • You might have the wrong data

    model • You might be growing documents too much • Should review Schema Design