35
Serie Sviluppo di Un’Applicazione Back to Basics Monitoring & Performance Tuning Senior Solutions Architect, MongoDB Inc. [email protected] Massimo Brignoli #mongodb

Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Embed Size (px)

DESCRIPTION

Ultimo appuntamento con il webinar Back To Basics. In questa puntata vedremo le soluzioni per monitorare il funzionamento di MongoDB e come fare un po' di performance tuning della nostra applicazione

Citation preview

Page 1: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Serie Sviluppo di Un’ApplicazioneBack to BasicsMonitoring & Performance Tuning

Senior Solutions Architect, MongoDB Inc.

[email protected]

Massimo Brignoli

#mongodb

Page 2: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Agenda

• Riassunto

• Tools di Monitoring– MongoDB command line e la shell

• Metriche chiave in MongoDB

• Logs– Livelli di Log– mtools

• Saturazione del Disco

Page 3: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Q & A

• Virtual Genius Bar

– Use the chat to post questions

– EMEA Solution Architecture / Support team are on hand

– Make use of them during the sessions!!!

Page 4: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Riassunto dell’Ultima Puntata

Page 5: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Tools di Backup e Approcci

• mongodump & mongorestore

• Copia del File system

• Snapshot del File system

• Non Usate mongoimport & mongoexport!

//Esempio di mongodumpserver> mongodump -h myhost -d cms -c articoli

Page 6: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Mongodump

• Crea un file .bson– (e un json di metadati)– Sulla rete o direttamente sul file system

>mongodump –h myhost -d cms -c articlesconnected to: myhost 2014-04-16T12:54:56.758+0100 DATABASE: cms to dump/cms2014-04-16T12:54:56.759+0100 cms.articles to dump/cms/articles.bson2014-04-16T12:54:56.816+0100 7 documents2014-04-16T12:54:56.817+0100 Metadata for cms.articles to dump/cms/articles.metadata.json

Page 7: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Architetture di Backup

• Usate il secondary per il backup– O un hidden secondary

• Fsync+Lock

• Il bilanciatore e’ off – In sharded cluster

mongodump

Page 8: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Monitoring Tools

Page 9: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Tools

• I Tool chiave di MongoDB– Mongostat– Mongo shell– Mongo Management Service mms

• Mtools– Logs

• OS– iostat

Page 10: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Architettura di MMS

Page 11: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Gli Alert di MMS

Page 12: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Collezione di Metriche e Reportistica

Page 13: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Dati di Profile e Log

Page 14: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Mongostat

• Accesso alle statistiche chiave– Collegare a un mongod o un mongos fot I cluster in shardind– Viualizza operazione al secondo/ memoria usate, page faults, code ecc.

>mongostat -h localhost --port 27017connected to: localhost:27017insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:24 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:25 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:26 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:27 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:28 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:29 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:30 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:31 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.1% 0 0|0 0|0 62b 5k 2 09:08:32 *0 *0 *0 *0 0 1|0 0 1.67g 5.78g 29m 0 .:0.0% 0 0|0 0|0 62b 5k 2 09:08:33

Page 15: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Mongo shell

• Comandi per accedere alle metriche– db.serverStatus()– workingSet analyzer

//to access a subset of serverStatus output specify the sub document>db.serverStatus().mem{

"bits" : 64,"resident" : 266,"virtual" : 5920,"supported" : true,"mapped" : 1712,"mappedWithJournal" : 3424

}

Page 16: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

WorkingSet analyzer

• Utile per stimare il ‘working set’ di un database

– Numero di ‘pagesInMemory’ accessed in RAM su il ‘overSeconds’ numero di secondi.

– Page di Default è 4k– overSecond – delta tra il più vecchio e il nuovo

>db.serverStatus({ workingSet : 1 }){

"note" : "thisIsAnEstimate","pagesInMemory" : 723,"computationTimeMicros" : 4601,"overSeconds" : 2311

}

overSeconds decreasing or small, workingSet could be larger than RAM

Page 17: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Le Metriche di MongoDB

Page 18: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

• Queued readers | writers

• Page faults

• OpCounters

• Background flush process

• Memory usage

• Lock %

• Btree misses

• connections

Metriche Chiave

Available from :

• MMS

• db.serverStatus()

• mongostat

Page 19: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Queued Reader | Writers

• Numero di operazioni in attesa per:

• Read Lock

• Write Lock

Page 20: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Page Faults

• Frequenza con cui state andando su disco a leggere I dati?

• Può essere un problema se l’IO del disco è saturo

• Da usare assieme a iostat

Page 21: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Background Flush Process

• Quantità di tempo per effettuare il flush dei dati du disco

• Anche questo può indicare la saturazione del disco

Page 22: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Memoria

• Virtual

• Mapped

• Resident

Page 23: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Lock %

• Percentuale di tempo del lock globale

Page 24: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Indici Btree

• Accessi

• Hits: valori trovati in memoria

• Misses

• Male!

• Indica indici non in memoria

Page 25: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Connessioni

• Connessioni al database

• Crescono nel tempo?

• Controllate la logica di pool nella vostra applicazione

Page 26: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Logs

Page 27: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

• Aumentate il livello di log– Per vedere maggior informazioni sulle performance delle

operazioni– Efficienza degli indici– Spostamenti di documenti– Tempo di esecuzione delle operazioni

Definite il livello di log

//Increase log level verbosity from the shell> db.adminCommand( { setParameter:1, logLevel:1 } ){ "was" : 0, "ok" : 1 }>

-v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv)

Page 28: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

• Problemi di Pinpoint– In questo esempio possiamo vedere che c’è stato uno spostamento del

documento

Esempio di output del Log

2014-05-02T13:55:02.047+0100 [conn7] update cms.articles query: { _id: ObjectId('532198379fb5ba99a6bd4063') } update: { $inc: { comment_count: 1 }, $push: { comments: { $each: [ { date: new Date(1399035302013), text: "Data locality provides an amazing performance boost over relational" } ], $slice: -10, $sort: { date: 1 } } } } nscanned:1 nscannedObjects:1 nmoved:1 nMatched:1 nModified:1 keyUpdates:0 numYields:0 locks(micros) w:33529 33ms

Page 29: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

• Analisi dei Log (esempio di sintassi)– Mostrami le query che hanno impiegato più di

1000 ms dalle 6 di mattina alle 6 di sera:

• Ora, fai un grafico:

Mtools

prompt> mlogfilter mongodb.log --from 06:00 --to 18:00 --slow 1000 > mongodb-filtered.log

prompt> mplotqueries --logscale mongodb-filtered.log

Page 30: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Mtools output

Page 31: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Saturazione del Disco

Page 32: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

• iostat– Utilizzo dell’IO dei dischi

– Controllate la % di utilizzo del disco– Un’alta percentuale

• Se è sostenuta, dovresti aumentare l’IO del disco

– Sharding– RAID 1+0– Partizionare su dischi differenti– Provisioned IOPS

Tool del Sistema Operativo

prompt> iostat –xmt 1

Page 33: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Riassunto

Page 34: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning

Riassunto

• Controllate regolarmente– Settate degli allarmi a fronte di cambiamenti

• Controllate velocemente con la shell e a linea di comando

• Controllate i trend con I grafici di MMS

• In caso di alto livello di utilizzo– Aumentate la RAM, l’IO del disco– Scalate orizzontalmente– (Controllate gli indici!!)

Page 35: Webinar Back to Basics - Sessione 8 - Monitoring e Performance Tuning