O documento resume os principais pontos sobre performance no MongoDB, incluindo:
1) Fatores que afetam a performance como hardware, armazenamento, indexação e replicação;
2) Ferramentas para análise como Explain(), profiling e benchmarking;
3) Conceitos-chave como modelagem de dados, replica sets, sharding e query planner.
Análise de Performance do MySQL e MariaDBSaveincloud
Se você trabalha com Cloud MySQL ou MariaDB te convidamos para uma bate-papo com o nosso convidado Diego Hellas, que vai trazer novidades e mostrar como analisar e buscar soluções para melhorar o desempenho e performance do seu banco de dados.
✅ Acesse o link a seguir para testar 14 dias grátis a ferramenta:
https://cloud.saveincloud.com.br/lp/cloud-mysql-mariadb-server/
✅ Acesse link do webinar: https://youtu.be/rAlSGyTfe-Q
Link para falar com nosso Suporte:
https://bit.ly/Saveincloud
Para conhecer um pouco mais do trabalho do Diego Hellas, acesse em:
Performancedb - www.performancedb.com.br
PDB monitor - www.pdbmonitor.com
Instagram - @mysqlbr
Palestra apresenta no PGDay Campinas 2014, apresentando o programa PGAnalytics.
Palestra apresentada por Matheus Espanhol, Matheus Oliveira e Vinícius Schmidt
Análise de Performance do MySQL e MariaDBSaveincloud
Se você trabalha com Cloud MySQL ou MariaDB te convidamos para uma bate-papo com o nosso convidado Diego Hellas, que vai trazer novidades e mostrar como analisar e buscar soluções para melhorar o desempenho e performance do seu banco de dados.
✅ Acesse o link a seguir para testar 14 dias grátis a ferramenta:
https://cloud.saveincloud.com.br/lp/cloud-mysql-mariadb-server/
✅ Acesse link do webinar: https://youtu.be/rAlSGyTfe-Q
Link para falar com nosso Suporte:
https://bit.ly/Saveincloud
Para conhecer um pouco mais do trabalho do Diego Hellas, acesse em:
Performancedb - www.performancedb.com.br
PDB monitor - www.pdbmonitor.com
Instagram - @mysqlbr
Palestra apresenta no PGDay Campinas 2014, apresentando o programa PGAnalytics.
Palestra apresentada por Matheus Espanhol, Matheus Oliveira e Vinícius Schmidt
O MySQL 5.6 já está pronto para produção desde fevereiro de 2013 e inclui um número impressionante de melhorias de performance e recursos para diagnóstico o tuning. Nesta apresentação serão mostradas estas melhorias e alguns exemplos de como ajustar o MySQL para um desempenho ainda maior, identificando e resolvendo rapidamente os gargalos mais comuns.
Serão discutidas:
-Melhorias de performance com o upgrade para MySQL 5.6
-Configurações do servidor relacionados à performance
-Como usar índices de maneira eficiente
-Como usar o novo visual EXPLAIN para verificar os planos de execução de consulta
-Quais os problemas de performance mais comuns, como identificá-los e resolvê-los
MySQL Profiling com Enterprise Monitor MySQL Brasil
Uma atividade que toma bastante tempo do administrador ou desenvolvedor é encontrar Queries que consomem muitos recursos do servidor. Há um expressivo ganho de performance otimizando queries lentas, podendo chegar a aumentar várias vezes o tempo de resposta. Vamos ver como a ferramenta Query Analyzer pode nos ajudar nesta tarefa e ainda conhecer um pouco melhor o que está contido na edição MySQL Enterprise, com foco principalmente em desenvolvedores.
Cloud Mysql e MariaDB em alta performanceSaveincloud
Se você trabalha com Cloud MySQL ou MariaDB e está buscando melhor performance e escalabilidade, vamos conversar e detalhar de que forma você pode fazer isso aqui na Saveincloud.
O objetivo deste evento é te mostrar o passo a passo para instalar, configurar e otimizar seu banco de dados na nuvem, e como obter melhor performance usando o conceito escalável tão desejado no mercado.
✅ Acesse o link a seguir para testar 14 dias grátis a ferramenta:
https://cloud.saveincloud.com.br/lp/mysql-mariadb-server/?camp=LP-mysql_slideshare
Link para falar com nosso Suporte:
https://bit.ly/Saveincloud
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
Neste bate papo vamos discutir quais as vantagens de cada banco de dados no mundo real. Quando devemos utilizar o NoSQL ao invés do SQL ou vice-versa comparando os principais bancos de dados open source de cada segmento, o MongoDB e o MySQL
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
Palestra de Performance Tuning do do SQL Server ES - 10/06/2017 (Dirceu Resende)
Veja o post completo em: https://www.dirceuresende.com/blog/como-foi-o-2o-encontro-do-sql-server-es/
Com a consolidação da linguagem PHP no mercado de aplicações de grande porte, o desenvolvimento de sistemas operando sobre servidores distribuídos torna-se vital para a sobrevivência do negócio e garantia de acesso e atendimento a todos os seus usuários. Nesse contexto, a palestra abordará técnicas para o planejamento e desenvolvimento de aplicações clusterizadas, cloudcomputing e balanceamento de carga de bases de dados.
O MySQL 5.6 já está pronto para produção desde fevereiro de 2013 e inclui um número impressionante de melhorias de performance e recursos para diagnóstico o tuning. Nesta apresentação serão mostradas estas melhorias e alguns exemplos de como ajustar o MySQL para um desempenho ainda maior, identificando e resolvendo rapidamente os gargalos mais comuns.
Serão discutidas:
-Melhorias de performance com o upgrade para MySQL 5.6
-Configurações do servidor relacionados à performance
-Como usar índices de maneira eficiente
-Como usar o novo visual EXPLAIN para verificar os planos de execução de consulta
-Quais os problemas de performance mais comuns, como identificá-los e resolvê-los
MySQL Profiling com Enterprise Monitor MySQL Brasil
Uma atividade que toma bastante tempo do administrador ou desenvolvedor é encontrar Queries que consomem muitos recursos do servidor. Há um expressivo ganho de performance otimizando queries lentas, podendo chegar a aumentar várias vezes o tempo de resposta. Vamos ver como a ferramenta Query Analyzer pode nos ajudar nesta tarefa e ainda conhecer um pouco melhor o que está contido na edição MySQL Enterprise, com foco principalmente em desenvolvedores.
Cloud Mysql e MariaDB em alta performanceSaveincloud
Se você trabalha com Cloud MySQL ou MariaDB e está buscando melhor performance e escalabilidade, vamos conversar e detalhar de que forma você pode fazer isso aqui na Saveincloud.
O objetivo deste evento é te mostrar o passo a passo para instalar, configurar e otimizar seu banco de dados na nuvem, e como obter melhor performance usando o conceito escalável tão desejado no mercado.
✅ Acesse o link a seguir para testar 14 dias grátis a ferramenta:
https://cloud.saveincloud.com.br/lp/mysql-mariadb-server/?camp=LP-mysql_slideshare
Link para falar com nosso Suporte:
https://bit.ly/Saveincloud
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
Neste bate papo vamos discutir quais as vantagens de cada banco de dados no mundo real. Quando devemos utilizar o NoSQL ao invés do SQL ou vice-versa comparando os principais bancos de dados open source de cada segmento, o MongoDB e o MySQL
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
Palestra de Performance Tuning do do SQL Server ES - 10/06/2017 (Dirceu Resende)
Veja o post completo em: https://www.dirceuresende.com/blog/como-foi-o-2o-encontro-do-sql-server-es/
Com a consolidação da linguagem PHP no mercado de aplicações de grande porte, o desenvolvimento de sistemas operando sobre servidores distribuídos torna-se vital para a sobrevivência do negócio e garantia de acesso e atendimento a todos os seus usuários. Nesse contexto, a palestra abordará técnicas para o planejamento e desenvolvimento de aplicações clusterizadas, cloudcomputing e balanceamento de carga de bases de dados.
Por Pedro Martins
Nesta sessão iremos abordar como identificar bottlenecks, a analisar planos de execução e a performance do SQL Server 2012. Iremos também comparar os diferentes tipos de índice e como eles podem ajudar a melhorar o desempenho do servidor. Finalmente, iremos ver alguns truques em stored procedures.
Agenda:
Planos de execução
Índices
Otimização de Stored Procedures
2. Sobre a apresentação
QUEM SOU EU?
◦ Desenvolvedor Web Java há quase 6 anos
◦ BRQ, IBM, GFT
◦ Itaú, Bradesco, Porto
◦ ”@jeffersondev” – ”in/jeffersondev”
INTERESSES
◦ Front-End
◦ JavaScript
◦ MEAN Stack
3. Sobre a apresentação
IDEIA
◦ MongoDB University
◦ MongoDB for Java Developers (M101J)
◦ MongoDB for Node.js Developers (M101JS)
◦ MongoDB Performance (M201)
OBJETIVO
◦ Fatores que afetam positivamente/negativamente a performance
◦ Ferramentas e comandos utilitários que podemos utilizar para análise
5. MongoDB - Overview
MONGODB – OVERVIEW
o FATORES DE PERFORMANCE
o UTILITÁRIOS E BENCHMARKING
6. MongoDB - Overview
• NoSQL
• Modelagem de dados
• Replica Set
• Sharded Cluster
• Journal
• Index
• Query Planner
7. NoSQL
NoSQL
◦ Not Only SQL
◦ Bancos de dados não relacionais
◦ Tipos
◦ Documentos
◦ Grafos
◦ Chave-Valor
◦ Colunares
8. NoSQL
POR QUE NoSQL?
◦ Dificuldades de escalar horizontalmente
◦ Representação dos dados
◦ Schema flexível
http://nosql-database.org
◦ Mais de 255 bancos de dados NoSQL
◦ 32 Banco de dados orientado a documentos
12. Replica Set
REPLICA SET é o mecanismo presente no MongoDB para
garantir disponibilidade e tolerância a falhas. Um Replica Set é um
conjunto de membros, executando o processo “mongod”, que estão
em sincronia e possuem os mesmos dados de forma replicada.
13.
14. Replica Set
Mínimo de 3 membros e máximo de 50
Os membros secundários podem ser:
◦ Regular – default (possui os dados replicados e pode se tornar primário)
◦ Priority 0 – não pode se tornar primário
◦ Hidden – não é visível pelos drivers das aplicações
◦ Delayed – tem a replicação atrasada
◦ Arbiter – só participa na votação da eleição do novo primário
15. Sharding
SHARDING é o método utilizado pelo MongoDB para escalar sua
capacidade horizontalmente distribuindo os dados entre vários
servidores.
16.
17. Journal
JOURNAL é o mecanismo utilizado para garantir consistência e integridade ao
banco de dados em caso de uma falha inesperada. O Journal são registros que
mantém todas as operações de escrita que ocorrem no MongoDB.
Em um caso de crash, o MongoDB utiliza o Journal para verificar se todas
as operações registradas nele foram persistidas no database.
21. Query Planner
“QUERY PLAN” são os planos que o MongoDB realiza para
verificar qual será a melhor estratégia para executar a query recebida.
O MongoDB utiliza um conceito chamado “Empirical Query Planner”.
22.
23. Query Planner
O cache é excluído nas situações
◦ Se algum index for criado ou excluído na collection
◦ Se a performance estiver muito mais lenta
◦ Se os indexes forem recriados
◦ Restart do servidor
24. Fatores de Performance
MONGODB – OVERVIEW
FATORES DE PERFORMANCE
o UTILITÁRIOS E BENCHMARKING
25. Fatores de Performance
• Hardware / Network
• Storage Engine
• Armazenamento em disco (WiredTiger)
• Index
• Replica Set para performance
• Sharding
28. Storage Engine
STORAGE ENGINE é o componente responsável
por gerenciar como os dados serão armazenados,
tanto em memória RAM quanto no disco rígido.
MongoDB
◦ WiredTiger
◦ MMAPv1
◦ In-Memory
Terceiros
◦ RocksDB (Facebook)
◦ PerconaFT (Percona)
29.
30. MMAPv1
Default até o MongoDB 3.0
Memória gerenciada pelo Sistema Operacional
Power of 2 Sized Allocations
◦ 32, 64, 128, 256 ... 2MB
◦ Vai gastar mais espaço em memória e disco
Collection Lock Level
◦ Pode ser gerar um problema de performance em sistemas com muitas escritas
Working Set em memória para boa performance
31. WiredTiger
• Empresa adquirida pela MongoDB Inc. em 2014
• Disponível no MongoDB 3.0 e default a partir do
MongoDB 3.2
• Document Lock Level
• Mais escritas em paralelo
• Compressão de dados
• Economia de espaço em memória e disco
• Menor tempo com I/O
• Memory Cache
32. WiredTiger – Compressão dos dados
Compressão dos dados
◦ Sem compressão
◦ Snappy (default)
◦ Equilíbrio CPU vs Taxa Compressão
◦ zlib
◦ Maior compressão
34. In-Memory
• Sem persistência em disco rígido*
• Disponível a partir do MongoDB 3.2.6 Enterprise
• Document Lock Level
• Utilização de memória
◦ 50% menos 1GB
◦ Configurável
35. Armazenamento em disco (WiredTiger)
• Database catalog
• Arquivos de dados
• Arquivos de index
• Arquivos de journal
36.
37. Armazenamento em disco (WiredTiger)
• ”mongod --dbpath /data/db”
• ”--directoryperdb”
• ”--wiredTigerDirectoryForIndexes”
• Symbolic links
38.
39. Index
• db.restaurants.createIndex( { cuisine: 1 } )
• Mínimo de 1 e máximo de 31 campos
• Máximo de 64 indexes por collection
• Limite de 1024 bytes por registro em cada index
40. Index – Partial & Sparse
• db.restaurants.createIndex( { cuisine: 1 }, { partialFilterExpression: { stars: { $gte: 4 } } } )
• Index condicional
• db.restaurants.createIndex( { cuisine: 1 } , { sparse: true } )
• Se o documento não possuir o atributo ou o mesmo for nulo, documento não é indexado
• Economia de espaço
• Economia de processamento para manter o index
41. Index – Covered Queries
Quando todos os atributos dos documentos solicitados fizerem parte de um index
Não busca os documentos, pega as informações direto no index
Performance +++
42. Index – Sorting
In-memory
◦ Custosa, pois traz todos os documentos para a memória RAM e faz a ordenação
◦ Utiliza no máximo 32MB na operação, se passar disso gera erro
Índice
◦ É a opção mais viável e performática
◦ O index pode estar ascendente ou descendente, não faz diferença
44. Index – Insert Performance
Tempo e processamento para manter a árvore binária é cada vez maior
Write Concern (confiabilidade vs performance)
◦ { w: <value>, j: <boolean>, wtimeout: <number> }
◦ { w: 1, j: false, wtimeout: 5000 }
◦ { w: “majority”, j: true }
45.
46. Index – Resumo
• Sempre crie index para apoiar as queries da aplicação!
• Sempre delete indexes que não sejam mais necessários!
47. Replica Set para performance
O principal objetivo do Replica Set é garantir disponibilidade e segurança a falhas.
Mas existem cenários em que pode ser utilizado para ganho de performance.
◦ BI
◦ Analytics
◦ Relatórios
Pode ser uma estratégia dependendo da região geográfica em que os membros da
Replica Set estão localizados.
48.
49.
50. Sharding
•O limite da escala vertical (processamento, memória RAM, I/O) foi atingido?
•Latência da rede entre os diversos nós
•Conhecimento do padrão de crescimento dos dados?
•Conhecimento do padrão de acesso aos dados?
•Importância do “shark key”
55. Explain()
Comando que mostra informações sobre a execução dos comandos
(find, update, delete...)
Nível default
◦ db.restaurants.explain()
◦ db.restaurants.explain(“queryPlanner”)
◦ Informações sobre “Winning Plan”
◦ Não executa o comando em análise
56. Explain()
db.restaurants.explain(“executionStats”)
◦ Mesmo que “queryPlanner” + detalhes como tempo de execução, número de indexes e
documentos analisados, etc.
◦ Executa o comando em análise
db.restaurants.explain(“allPlansExecution”)
◦ Mesmo que “executionStats” + “Rejected Plans”
◦ Executa o comando em análise
57. Explain()
Estágios da “Query Plan” representados no “explain()”
◦ COLLSCAN for a collection scan
◦ IXSCAN for scanning index Keys
◦ FETCH for retrieving documents
◦ SHARD_MERGE for merging results from shards
58. POCDriver
GitHub do John Page (Consulting Engineer na MongoDB, Inc.)
◦ https://github.com/johnlpage/POCDriver
◦ Não é uma ferramenta oficial
Projeto em Java para realizar uma ”Prova de Conceito”
◦ Testando inserts / updates / queries
59. Logging e Profiling
Log default de queries que demorem mais que 100 milissegundos
Profiler registra as queries em ”system.profile”
◦ 0 – desligado, não registra nada (default)
◦ 1 – registra as queries ”lentas” (configurável)
◦ 2 - registra todas as queries
62. Benchmarking
Low Level (I/O, RAM, Thread...)
◦ Sysbench (https://launchpad.net/sysbench)
◦ iibench-mongodb (https://github.com/tmcallaghan/iibench-mongodb)
High Level (Carga de dados, Escritas/Leituras por segundo…)
◦ YCSB (https://github.com/brianfrankcooper/YCSB)
◦ TCP Benckmark (http://www.tpc.org/information/benchmarks.asp)
Distributed Systems (Linearization, Serialization, Tolerancia a falhas)
◦ HiBench (https://github.com/intel-hadoop/HiBench)
◦ Jepsen (https://jepsen.io/)
63. Obrigado!
MONGODB – OVERVIEW
FATORES DE PERFORMANCE
UTILITÁRIOS E BENCHMARKING
Notas do Editor
Sou desenvolvedor Web Java há quase seis anos. Durante esse período venho trabalhando em consultorias como BRQ, IBM e GFT em grandes projetos de bancos como Itaú e Bradesco. Recentemente meu interesse por JavaScript começou a aumentar e após aprender um pouco sobre MEAN Stack resolvi começar meus estudos sobre MongoDB, NodeJS e AngularJS.
A ideia dessa apresentação surgiu após os cursos M101J (MongoDB for Java Developers), M101JS (MongoDB for Node.js Developers) e M201 (MongoDB Performance) feitos na MongoDB University. Aqui eu reuni todas as lições aprendidas nesses cursos que se referem a performance no MongoDB, além de buscar bastante informações na documentação oficial do MongoDB.
O foco é mostrar os fatores que afetam a performance do banco de dados positiva ou negativamente e algumas ferramentas que estão disponíveis no MongoDB para analisar esses fatores. Também irei mostrar alguns exemplos da utilização dessas ferramentas para analisar os impactos na performance.