SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
MySQL
Airton Lastori
Clayton M. Pereira
Strauss Cunha
31-mar-2016
CE-263
Prof. José M Parente de Oliveira
Prof. Ricardo da Silva Santos
Profa. Emilia Colonese
● Mercado
● Características gerais
● Estruturas de armazenamento
● Índices
● Técnicas para grandes volumes de dados
● Conclusão (pontos fracos e fortes)
Agenda
Mercado
popularidade e adoção
4
http://db-engines.com/en/ranking/relational+dbms
Popularidade dos SGBDRs
5
http://db-engines.com/en/ranking_trend (mar-2016)
6
https://en.wikipedia.org/wiki/Relational_database_management_system
SGBDRs em 2008 segundo Gartner
Facebook
Uber
Airbnb
Youtube
Linkedin
Twitter
Alibaba
Github
Pinterest
Casos de uso famosos
7
www.mysql.com/customers
Características Gerais
histórico, arquitetura e casos de uso típicos
Histórico
9
Arquitetura MySQL Database
10
Arquitetura MySQL Cluster (NDB)
11
● Web, Mobile e embarcado
● Muitas conexões simultâneas
● Transações curtas em tempo e em operações
◦ Máximo poucos segundos
◦ COMMITs intermediários
● Dados mais quentes cabem em memória RAM
● Se pensar em uma arquitetura Big Data
(lambda), MySQL vai aparecer no Speed Layer
com mais frequência
Uso típico do MySQL
12
Estruturas de Armazenamento
storage engines, InnoDB, limites
As estruturas de armazenamento vão mudar de acordo
com o Storage Engine, definido por tabela.
CREATE TABLE … ENGINE=MyISAM
Criará uma tabela do “tipo” MyISAM, considerado um
padrão simples, rápido para leituras, mas
problemático para escritas.
Se não for explicitado, será usado o default (InnoDB).
Storage Engines
14
Se aproxima dos demais SGBDRs de mercado:
ACID
Transações
Lock em nível de linha
FKs para integridade referencial
Dados fisicamente organizados em índices
clusterizados B+Tree.
Os dados das linhas da tabela são armazenados nas
folhas da árvore, organizada pela sua chave primária.
InnoDB
15
16
Clustered Index, High Performance MySQL 3rd ed, p. 111
Linha
Página
innodb_flush_at_trx_commit
double_buffer
innodb_logfile_size
Tamanho de Página: 4, 8, 16, 32, 64KB
● páginas menores podem ajudar na performance em dispositivos com
tamanhos de blocos menores (SSD)
● dev.mysql.com > Doc > Refman > 5.7 > En > Innodb-restrictions
Tamanho da Linha: depende do Row format
● innodb_default_row_format: DYNAMIC, COMPACT, REDUNDANT,
COMPRESSED
● Definido por tabela: CREATE TABLE. ALTER TABLE
● dev.mysql.com > Doc > Refman > 5.7 > En > Innodb-physical-record
Configurações flexíveis para Escrita
17
Índices
estruturas suportadas
Índices também dependem do storage engine
Há vários tipos
Nem todos Storage Engines suportam todos índices
Implementações não são padronizadas
InnoDB (padrão) já possui os dados armazenados em
B+Tree referenciada pela PK (índice clusterizado).
Também suporta índices secundários: B+Tree, Hash,
Fulltext e R-Tree (spatial).
Índices B+Tree tornam rápidas Buscas e Ordenações.
Vários tipos
19
Técnicas especiais
para grandes volumes de dados
Recurso que permite dividir os dados de uma tabela em
arquivos separados no filesystem, de acordo com alguma
regra.
O MySQL suporta partições por regras baseadas em chave,
lista, range e hash. Também suporta subpartições.
Particionamento
21
dev.mysql.com/doc/refman/5.7/en/partitioning.html
Criar índices envolvendo mais colunas que as utilizadas
pelo otimizador, a fim de evitar que o arquivo de dados
seja lido.
Desta forma apenas o índice será lido para recuperar os
dados desejados, evitando acesso ao arquivo de dados,
e a performance será maior.
Covering Indexes
22
Covering Index, High Performance MySQL 3rd ed, p. 120
Colunas adicionais que contém o resultado de algum
cálculo ou função sobre os dados das demais colunas.
Podem ser persistidas no arquivo de dados (stored) ou
calculadas on-the-fly (virtual).
mysql> ALTER TABLE t ADD new_col INT GENERATED ALWAYS AS (a - b)
VIRTUAL;
mysql> SELECT * FROM t;
+----+------+------+---------+
| a | b | c | new_col |
+----+------+------+---------+
| 11 | 3 | 14 | 8 |
+----+------+------+---------+
Podem ser indexadas!
Generated Columns
23
Vertical (scale up)
hardware mais potente
Horizontal (scale out)
mais máquinas (Cluster, Cloud)
Tipos de Escalabilidade
24
Novas versões do MySQL escalam melhor em arquiteturas multi-core.
Escalabilidade Vertical (scale up)
25
http://www.mysql.com/why-mysql/benchmarks
● O MySQL possui um recurso nativo de Replicação.
● O modelo mais utilizado é Master-Slave assíncrono, que
possibilita escalabilidade de leituras com menor complexidade.
● Usar o storage engine BLACKHOLE no Master para criar
servidores de Relay ajuda escalar escritas.
● Escalar escritas em ambientes distribuídos é mais difícil,
envolve sincronização, gerenciamento de locks, resolução de
conflitos, etc.
● O MySQL Cluster escala escritas através de replicação síncrona
e auto-sharding, porém depende da adequação das tabelas
para Storage Engine NDB.
● É possível ter algum ganho de escala de escritas com InnoDB
usando plugins como Galera Cluster ou Group Replication.
Escalabilidade Horizontal (scale out)
26
Não possui todas funcionalidades que outros SGBDRs
Evitar transações complexas diretamente no SGBD
Views materializadas (apenas simulação)
Faltam índices especializados
Expression, Partial, Reverse, Bitmap, GiST, GIN, FOT...
Faltam algumas funcionalidades SQL ANSI
Intersect, Except, Merge joins, Common Table Expressions,
Windowing Functions, Parallel Query, Data Domain CHECK
(apenas simulação ou datatype ENUM)
Conclusão - Pontos Fracos 1/2
27
Poucas funcionalidades OLAP nativas
depende de plugins externos (ex. InfoBright, InfiniDB) e não
homologado por algumas aplicações empacotadas de BI
Escalabilidade vertical limitada a hardwares commodity
Difícil de escalar escritas horizontalmente
depende de usar relay servers ou storage engine NDB Cluster
depende de uso de técnicas de sharding na aplicação
Não há muitos DBAs "de carreira"
comum no mundo SQL Server, Oracle e DB2
Conclusão - Pontos Fracos 2/2
28
Open Source (GPL v2)
Fácil de usar e instalar
Fácil de automatizar gerenciamento de múltiplas instâncias
Excelente performance OLTP (leituras e escritas)
Muitas conexões simultâneas
Transações curtas e em grande volume
Integra muito bem com outras tecnologias Open Source
Alta maturidade e popularidade
Replicação simples e flexível
Muito usada para escalar leituras
Multi-plataforma
Desenvolvido e suportado pela Oracle
Conclusão - Pontos Fortes
29
Manual de Referência do MySQL
http://dev.mysql.com/doc/refman/5.7/en/
Schwartz, Baron, Peter Zaitsev, and Vadim Tkachenko. High
performance MySQL: Optimization, backups, and replication. "
O'Reilly Media, Inc.", 2012.
DB-Engines
http://db-engines.com/en/ranking_trend
Wikipedia
https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
https://en.wikipedia.org/wiki/Relational_database_management_system
Referências
30

Mais conteúdo relacionado

Mais procurados

2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de DadosRodrigo Kiyoshi Saito
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracleEduardo Lopes
 
SQL Server – Performance e Tunning
SQL Server – Performance e TunningSQL Server – Performance e Tunning
SQL Server – Performance e Tunningpt_programar
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura OraclePablo Garcia
 
Banco de dados
Banco de dadosBanco de dados
Banco de dadosJohn Leno
 
Bancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemBancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemJoão Gabriel Lima
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosRodrigo Almeida
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2Rodrigo Almeida
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDBHugo Souza
 
noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHPTheoziran Lima
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
Entendendo a Arquitetura de Armazenamento, parte 1
Entendendo a Arquitetura de Armazenamento, parte 1Entendendo a Arquitetura de Armazenamento, parte 1
Entendendo a Arquitetura de Armazenamento, parte 1Rodolfo Mendes
 

Mais procurados (20)

Comparação entre bancos de dados de modelo não relacional
Comparação entre bancos de dados de modelo não relacionalComparação entre bancos de dados de modelo não relacional
Comparação entre bancos de dados de modelo não relacional
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
 
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
2019-2 - BD I - Aula 01 C - Introdução a Banco de Dados
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
Artigo couchdb
Artigo couchdbArtigo couchdb
Artigo couchdb
 
SQL Server – Performance e Tunning
SQL Server – Performance e TunningSQL Server – Performance e Tunning
SQL Server – Performance e Tunning
 
SGBD Oracle
SGBD OracleSGBD Oracle
SGBD Oracle
 
2012 - Veris - DBA Career and Oracle Database
2012 - Veris - DBA Career and Oracle Database2012 - Veris - DBA Career and Oracle Database
2012 - Veris - DBA Career and Oracle Database
 
My sql apresentação
My sql apresentaçãoMy sql apresentação
My sql apresentação
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Bancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemBancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagem
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dados
 
DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2DBA became DMA for Oracle Exadata X2-2
DBA became DMA for Oracle Exadata X2-2
 
Apache CouchDB
Apache CouchDBApache CouchDB
Apache CouchDB
 
noSQL com CouchDb e PHP
noSQL com CouchDb e PHPnoSQL com CouchDb e PHP
noSQL com CouchDb e PHP
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
Entendendo a Arquitetura de Armazenamento, parte 1
Entendendo a Arquitetura de Armazenamento, parte 1Entendendo a Arquitetura de Armazenamento, parte 1
Entendendo a Arquitetura de Armazenamento, parte 1
 
IDC Summit 2015 - DBaaS
IDC Summit 2015 - DBaaSIDC Summit 2015 - DBaaS
IDC Summit 2015 - DBaaS
 

Semelhante a MySQL - visão geral

[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de Dados[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de DadosDeep Tech Brasil
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoRodrigo Almeida
 
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
[DTC21] Lucas Gomes - Do 0 ao 100 no Big DataDeep Tech Brasil
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
MySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL Brasil
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataRodrigo Almeida
 
Apresentação new sql
Apresentação new sqlApresentação new sql
Apresentação new sqlw_barros
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFabio Telles Rodriguez
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisJefferson Martins de Andrade
 
MySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Brasil
 

Semelhante a MySQL - visão geral (20)

Banco aula 01
Banco aula 01Banco aula 01
Banco aula 01
 
[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de Dados[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de Dados
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Oracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & MigraçãoOracle Exadata - Consolidação & Migração
Oracle Exadata - Consolidação & Migração
 
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
[DTC21] Lucas Gomes - Do 0 ao 100 no Big Data
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016Otimizando a performance com in-memory no SQL 2016
Otimizando a performance com in-memory no SQL 2016
 
MySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicações
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
No sql o_que_e_isso.key
No sql o_que_e_isso.keyNo sql o_que_e_isso.key
No sql o_que_e_isso.key
 
Otimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para ExadataOtimizando um banco de dados Oracle para Exadata
Otimizando um banco de dados Oracle para Exadata
 
Apresentação new sql
Apresentação new sqlApresentação new sql
Apresentação new sql
 
LT - Redis
LT - RedisLT - Redis
LT - Redis
 
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGIFazendo Um Elefante Passar Debaixo da Porta - CONSEGI
Fazendo Um Elefante Passar Debaixo da Porta - CONSEGI
 
Performance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | FlorianópolisPerformance no MongoDB - TDC 2017 | Florianópolis
Performance no MongoDB - TDC 2017 | Florianópolis
 
MySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta Disponibilidade
 

Mais de Airton Lastori

MySQL as a Service OOW 2018 PRO4601
MySQL as a Service OOW 2018 PRO4601MySQL as a Service OOW 2018 PRO4601
MySQL as a Service OOW 2018 PRO4601Airton Lastori
 
7 anos de MySQL em 7 minutos
7 anos de MySQL em 7 minutos7 anos de MySQL em 7 minutos
7 anos de MySQL em 7 minutosAirton Lastori
 
Estudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationEstudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationAirton Lastori
 
MySQL e Oracle para DBAs
MySQL e Oracle para DBAsMySQL e Oracle para DBAs
MySQL e Oracle para DBAsAirton Lastori
 
MySQL e Oracle para Desenvolvedores
MySQL e Oracle para DesenvolvedoresMySQL e Oracle para Desenvolvedores
MySQL e Oracle para DesenvolvedoresAirton Lastori
 
MySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLMySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLAirton Lastori
 
MySQL replicação e cluster - GUOB Tech Day 2011
MySQL replicação e cluster - GUOB Tech Day 2011MySQL replicação e cluster - GUOB Tech Day 2011
MySQL replicação e cluster - GUOB Tech Day 2011Airton Lastori
 

Mais de Airton Lastori (7)

MySQL as a Service OOW 2018 PRO4601
MySQL as a Service OOW 2018 PRO4601MySQL as a Service OOW 2018 PRO4601
MySQL as a Service OOW 2018 PRO4601
 
7 anos de MySQL em 7 minutos
7 anos de MySQL em 7 minutos7 anos de MySQL em 7 minutos
7 anos de MySQL em 7 minutos
 
Estudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool QualificationEstudo RTCA DO-330 Software Tool Qualification
Estudo RTCA DO-330 Software Tool Qualification
 
MySQL e Oracle para DBAs
MySQL e Oracle para DBAsMySQL e Oracle para DBAs
MySQL e Oracle para DBAs
 
MySQL e Oracle para Desenvolvedores
MySQL e Oracle para DesenvolvedoresMySQL e Oracle para Desenvolvedores
MySQL e Oracle para Desenvolvedores
 
MySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLMySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQL
 
MySQL replicação e cluster - GUOB Tech Day 2011
MySQL replicação e cluster - GUOB Tech Day 2011MySQL replicação e cluster - GUOB Tech Day 2011
MySQL replicação e cluster - GUOB Tech Day 2011
 

MySQL - visão geral

  • 1. MySQL Airton Lastori Clayton M. Pereira Strauss Cunha 31-mar-2016 CE-263 Prof. José M Parente de Oliveira Prof. Ricardo da Silva Santos Profa. Emilia Colonese
  • 2. ● Mercado ● Características gerais ● Estruturas de armazenamento ● Índices ● Técnicas para grandes volumes de dados ● Conclusão (pontos fracos e fortes) Agenda
  • 12. ● Web, Mobile e embarcado ● Muitas conexões simultâneas ● Transações curtas em tempo e em operações ◦ Máximo poucos segundos ◦ COMMITs intermediários ● Dados mais quentes cabem em memória RAM ● Se pensar em uma arquitetura Big Data (lambda), MySQL vai aparecer no Speed Layer com mais frequência Uso típico do MySQL 12
  • 13. Estruturas de Armazenamento storage engines, InnoDB, limites
  • 14. As estruturas de armazenamento vão mudar de acordo com o Storage Engine, definido por tabela. CREATE TABLE … ENGINE=MyISAM Criará uma tabela do “tipo” MyISAM, considerado um padrão simples, rápido para leituras, mas problemático para escritas. Se não for explicitado, será usado o default (InnoDB). Storage Engines 14
  • 15. Se aproxima dos demais SGBDRs de mercado: ACID Transações Lock em nível de linha FKs para integridade referencial Dados fisicamente organizados em índices clusterizados B+Tree. Os dados das linhas da tabela são armazenados nas folhas da árvore, organizada pela sua chave primária. InnoDB 15
  • 16. 16 Clustered Index, High Performance MySQL 3rd ed, p. 111 Linha Página
  • 17. innodb_flush_at_trx_commit double_buffer innodb_logfile_size Tamanho de Página: 4, 8, 16, 32, 64KB ● páginas menores podem ajudar na performance em dispositivos com tamanhos de blocos menores (SSD) ● dev.mysql.com > Doc > Refman > 5.7 > En > Innodb-restrictions Tamanho da Linha: depende do Row format ● innodb_default_row_format: DYNAMIC, COMPACT, REDUNDANT, COMPRESSED ● Definido por tabela: CREATE TABLE. ALTER TABLE ● dev.mysql.com > Doc > Refman > 5.7 > En > Innodb-physical-record Configurações flexíveis para Escrita 17
  • 19. Índices também dependem do storage engine Há vários tipos Nem todos Storage Engines suportam todos índices Implementações não são padronizadas InnoDB (padrão) já possui os dados armazenados em B+Tree referenciada pela PK (índice clusterizado). Também suporta índices secundários: B+Tree, Hash, Fulltext e R-Tree (spatial). Índices B+Tree tornam rápidas Buscas e Ordenações. Vários tipos 19
  • 21. Recurso que permite dividir os dados de uma tabela em arquivos separados no filesystem, de acordo com alguma regra. O MySQL suporta partições por regras baseadas em chave, lista, range e hash. Também suporta subpartições. Particionamento 21 dev.mysql.com/doc/refman/5.7/en/partitioning.html
  • 22. Criar índices envolvendo mais colunas que as utilizadas pelo otimizador, a fim de evitar que o arquivo de dados seja lido. Desta forma apenas o índice será lido para recuperar os dados desejados, evitando acesso ao arquivo de dados, e a performance será maior. Covering Indexes 22 Covering Index, High Performance MySQL 3rd ed, p. 120
  • 23. Colunas adicionais que contém o resultado de algum cálculo ou função sobre os dados das demais colunas. Podem ser persistidas no arquivo de dados (stored) ou calculadas on-the-fly (virtual). mysql> ALTER TABLE t ADD new_col INT GENERATED ALWAYS AS (a - b) VIRTUAL; mysql> SELECT * FROM t; +----+------+------+---------+ | a | b | c | new_col | +----+------+------+---------+ | 11 | 3 | 14 | 8 | +----+------+------+---------+ Podem ser indexadas! Generated Columns 23
  • 24. Vertical (scale up) hardware mais potente Horizontal (scale out) mais máquinas (Cluster, Cloud) Tipos de Escalabilidade 24
  • 25. Novas versões do MySQL escalam melhor em arquiteturas multi-core. Escalabilidade Vertical (scale up) 25 http://www.mysql.com/why-mysql/benchmarks
  • 26. ● O MySQL possui um recurso nativo de Replicação. ● O modelo mais utilizado é Master-Slave assíncrono, que possibilita escalabilidade de leituras com menor complexidade. ● Usar o storage engine BLACKHOLE no Master para criar servidores de Relay ajuda escalar escritas. ● Escalar escritas em ambientes distribuídos é mais difícil, envolve sincronização, gerenciamento de locks, resolução de conflitos, etc. ● O MySQL Cluster escala escritas através de replicação síncrona e auto-sharding, porém depende da adequação das tabelas para Storage Engine NDB. ● É possível ter algum ganho de escala de escritas com InnoDB usando plugins como Galera Cluster ou Group Replication. Escalabilidade Horizontal (scale out) 26
  • 27. Não possui todas funcionalidades que outros SGBDRs Evitar transações complexas diretamente no SGBD Views materializadas (apenas simulação) Faltam índices especializados Expression, Partial, Reverse, Bitmap, GiST, GIN, FOT... Faltam algumas funcionalidades SQL ANSI Intersect, Except, Merge joins, Common Table Expressions, Windowing Functions, Parallel Query, Data Domain CHECK (apenas simulação ou datatype ENUM) Conclusão - Pontos Fracos 1/2 27
  • 28. Poucas funcionalidades OLAP nativas depende de plugins externos (ex. InfoBright, InfiniDB) e não homologado por algumas aplicações empacotadas de BI Escalabilidade vertical limitada a hardwares commodity Difícil de escalar escritas horizontalmente depende de usar relay servers ou storage engine NDB Cluster depende de uso de técnicas de sharding na aplicação Não há muitos DBAs "de carreira" comum no mundo SQL Server, Oracle e DB2 Conclusão - Pontos Fracos 2/2 28
  • 29. Open Source (GPL v2) Fácil de usar e instalar Fácil de automatizar gerenciamento de múltiplas instâncias Excelente performance OLTP (leituras e escritas) Muitas conexões simultâneas Transações curtas e em grande volume Integra muito bem com outras tecnologias Open Source Alta maturidade e popularidade Replicação simples e flexível Muito usada para escalar leituras Multi-plataforma Desenvolvido e suportado pela Oracle Conclusão - Pontos Fortes 29
  • 30. Manual de Referência do MySQL http://dev.mysql.com/doc/refman/5.7/en/ Schwartz, Baron, Peter Zaitsev, and Vadim Tkachenko. High performance MySQL: Optimization, backups, and replication. " O'Reilly Media, Inc.", 2012. DB-Engines http://db-engines.com/en/ranking_trend Wikipedia https://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems https://en.wikipedia.org/wiki/Relational_database_management_system Referências 30