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

Preview:

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@mongodb.com

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!!)