Upload
massimo-brignoli
View
233
Download
1
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
Serie Sviluppo di Un’ApplicazioneBack to BasicsMonitoring & Performance Tuning
Senior Solutions Architect, MongoDB Inc.
Massimo Brignoli
#mongodb
Agenda
• Riassunto
• Tools di Monitoring– MongoDB command line e la shell
• Metriche chiave in MongoDB
• Logs– Livelli di Log– mtools
• Saturazione del Disco
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!!!
Riassunto dell’Ultima Puntata
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
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
Architetture di Backup
• Usate il secondary per il backup– O un hidden secondary
• Fsync+Lock
• Il bilanciatore e’ off – In sharded cluster
mongodump
Monitoring Tools
Tools
• I Tool chiave di MongoDB– Mongostat– Mongo shell– Mongo Management Service mms
• Mtools– Logs
• OS– iostat
Architettura di MMS
Gli Alert di MMS
Collezione di Metriche e Reportistica
Dati di Profile e Log
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
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
}
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
Le Metriche di MongoDB
• Queued readers | writers
• Page faults
• OpCounters
• Background flush process
• Memory usage
• Lock %
• Btree misses
• connections
Metriche Chiave
Available from :
• MMS
• db.serverStatus()
• mongostat
Queued Reader | Writers
• Numero di operazioni in attesa per:
• Read Lock
• Write Lock
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
Background Flush Process
• Quantità di tempo per effettuare il flush dei dati du disco
• Anche questo può indicare la saturazione del disco
Memoria
• Virtual
• Mapped
• Resident
Lock %
• Percentuale di tempo del lock globale
Indici Btree
• Accessi
• Hits: valori trovati in memoria
• Misses
• Male!
• Indica indici non in memoria
Connessioni
• Connessioni al database
• Crescono nel tempo?
• Controllate la logica di pool nella vostra applicazione
Logs
• 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)
• 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
• 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
Mtools output
Saturazione del Disco
• 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
Riassunto
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!!)