Upload
mysql-brasil
View
1.248
Download
2
Embed Size (px)
DESCRIPTION
Wagner Bianchi é Senior Principal Consulting com atuação direta emtrabalhos de consultoria e projetos em MySQL principalmente emclientes da América Latina. Com 8 anos de experiência em servidores debancos de dados MySQL e ambientes Open Source, possui ascertificações CMA, CMDEV, CMDBA e CMCDBA.
Citation preview
MySQL 5.6, o que há de novidade?
By Wagner Bianchi – Senior Principal Consultant, LAD
Wagner Bianchi é Senior Principal Consulting com atuação direta em
trabalhos de consultoria e projetos em MySQL principalmente em
clientes da América Latina. Com 8 anos de experiência em servidores de
bancos de dados MySQL e ambientes Open Source, possui as
certificações CMA, CMDEV, CMDBA e CMCDBA.
Introdução
Há pouco mais de um ano atrás, vimos a Oracle se pronunciar em uma palestra que foi chamada
de State of Dolphin, na qual Edward Screven fez o lançamento oficial do MySQL 5.5 e comentou
sobre o futuro do servidor de bancos de dados popular open source mais popular do mundo. Hoje,
temos prevista uma nova versão, a 5.6, que traz consigo grandes melhorias em relação à estratégias
de otimização de performance, não só para ambientes que utilizam o InnoDB Plugin como principal
Storage Engine, mas abrangentes também a outros motores como MyISAM, Archive e outros.
No quesito escalabilidade, o MySQL 5.6 oferecerá recursos que trarão ainda mais estabilidade na
utilização da replicação assíncrona ou semi-síncrona com Storage Engines transacionais. Temos
que frisar que, é notório que com o MySQL sob o desenvolvimento da Oracle, os times de
desenvolvimento, consultoria, suporte, treinamento e comercialização da versão enterprise do
produto se tornaram mais organizados, prontos para atender ao cliente e hoje já estão presentes na
maior parte dos países do mundo, com o intuito de fazer com que haja a entrega de um MySQL cada
vez melhor para os usuários e empresas que desejam ter um menor TCO e condições plenas de
desmistificar a utilização deste poderoso servidor de bancos de dados em ambiente corporativo.
Para quem vêm acompanhando o desenvolvimento do MySQL sob a Oracle, viu que várias foram as
novidades que o MySQL 5.5 apresentou e que agora são ainda mais evidenciadas para que melhores
resultados sejam obtidos por seus clientes. A possibilidade de utilização do InnoDB Plugin, a criação
de múltiplas instâncias de buffer-pool, a replicação semi-síncrona, adoção de um banco de dados de
metadados relacionados à performance, podendo ser utilizado para monitorar o servidor de bancos
de dados com base em instrumentos e agora, agregando a isso, todas novidades que são
desenvolvidas e entregues ao mercado através da nova versão, o MySQL 5.6.
Focando então a nova versão do produto, o MySQL 5.6, contamos com as seguintes melhorias
previstas:
• Melhorias no otimizador de consultas com Index Condition Pushdown;
• Melhorias no Kernel do InnoDB aumento de throughput;
• Novo estilo NoSQL com a API MEMCACHED;
• Melhorias no suporte ao particionamento de tabelas;
• Melhorias no modelo de replicação de dados entre servidores;
• Melhorias para o monitoramento de performance através do PERFORMANCE_SCHEMA;
Mais performance Index Condition Pushdown
Assim como foi desenvolvido primeiro com o MySQL Cluster nas versões atuais (este que é um
outro produto que tem sua nova versão, a 7.2, prevista para ser entregue bem em breve), o recurso
denominado Engine Condition Pushdown também foi desenvolvido para o MySQL Server.
Com um nome um pouquinho diferente, no MySQL Server o recurso é conhecido como Index
Condition Pushdown ou ICP e é responsável por fazer com os dados sejam recuperados de tabelas
com a utilização de pelo menos um índice. Normalmente, os dados são lidos com base na existência
de um índice, os dados são retornados para a primeira camada do servidor de bancos de dados
MySQL e na seqüência, a condição WHERE da consulta é aplicada aos dados. Com a utilização do
ICP, ou Index Consition Pushdown, a cláusula WHERE é aplicada aos efetuar a leitura do índice,
possibilitando uma menor litura dos dados com base no índice utilizado e menor tráfego interno de
dados.
Como sabemos, a arquitetura do servidor de bancos de dados MySQL prevalece esse tipo de
operação, pois, na primeira camada estão localizados os módulos de parse, transformação
otimização e outros. Após uma query passar por todos estes módulos e entrar em processo de
execução, o WHERE é enviado para a segunda camada com a intenção de ler somente os dados que
satisfação tal condição. Assim, bem menos dados serão retornados para a primeira camada do
MySQL e estes, entregues aos programa cliente (e também sendo armazenado no MySQL Query
Cache, se este estiver habilitado).
Uma diferença básica entre o método tradicional pode ser analisado com o seguinte análise:
Método Tradicional Método utilizando Index Condition Pushdown
1. Busca-se a primeira linha do índice e
através da primeira linha recupera-se
toda a tabela;
2. Aplica-se a condição WHERE para
filtrar os dados recuperados;
3. Os dados que são verdade em relação à
condição WHERE são retornados para o
usuário e o restante é descartado;
1. Busca-se a primeira linha do índice, mas
não recupera a tabela toda;
2. Para cada linha já faz a comparação com
a expressão do WHERE e adiciona o que
for verdade ou conjunto verdade;
3. Retorna o conjunto verdade para o
requisitante;
NoSQL com a API MEMCACHED
Uma grande novidade e que é muito aguardada para começar a ser tão logo utilizada é a
possibilidade de utilização de uma interface direta com o InnoDB, ou seja, a partir do MySQL 5.6
será possível que web services acessem diretamente os dados do InnoDB sem passar por
transformações da linguagem utilizada em SQL – reforçando o estilo NoSQL que vêm tendo muito
destaque quando o assunto é aumentar o throughput, response time e a alta-disponibilidade,
diminuindo a latência, deixando os principais componentes de hardware à disposição dos módulos
que armazenam os dados de maneira não estruturada.
Os dados passam a ser armazenados também em uma estrutura denominada MEMCACHED que é
um módulo que persiste dados já utilizados em uma área de memória privilegiada, denominada
cache. Utilizando tal estrutura, o MEMCACHED, que agora é disponibilizada em forma de API,
desenvolvedores e administradores de bancos de dados poderão se beneficiar das seguintes
formas:
• Ausência da necessidade de desenvolvimento de nova aplicação para persistência,
reutilizando todo o esforço de desenvolvimento já aplicado ao MEMCACHED;
• Aproveitamento de toda a flexibilidade da plataforma que provê máxima performance e
suporte à vários ambientes;
• Extensão das funcionalidades do MEMCACHED com a intenção de este se enquadre nos
esquema ACID, suportado pelo InnoDB, assim como suporte aos módulos de crash-safe e
persistência de dados;
O mais interessante é saber que as peças vão sendo conectadas no mundo Open Source em
detrimento aos que a própria Oracle atualmente tem enfatizado, todos os softwares são produzidos
juntos, integrados e testados juntos com a intenção de prover boa tecnologia, com baixo custo de
propriedade – TCO. Para aqueles que querem saber mais, o MySQL Cluster 7.2, nova versão prevista
para ser entregue em breve para ambiente de produção, já possui a MEMCACHED API, sendo
utilizada para persistência de dados em memória nos Data/Storage Nodes.
Um snapshot interessante do lado interno da integração entre o MySQL 5.6 o o chamado “NoSQL
Style”, publicada no site da InnoDB (antiga InnoBase Oy), empresa de propriedade da Oracle desde
2005, que desenvolve o InnoDB built-in e o InnoDB Plugin:
Melhorias no suporte ao particionamento de tabelas
Uma dos recursos que eu mais gostei quando foi lançado no MySQL 5.1 foi realmente o
particionamento de tabelas, particionamento este que é realizado de forma horizontal. Escrevi
bastante sobre este recurso para a revista SQL Magazine e para alguns blogs pela internet,
relatando sobre a versatilidade do recurso e pela possibilidade de selecionar pequenas porções de
dados em meio à tabelas com grandes quantidade de dados. Um dos recursos valiosos dentro do
particionamento de tabelas é denominado Partition Pruning, que possibilita que, por exemplo, você
trabalhe com a cláusula WHERE para que somente os dados localizados em uma das partições
sejam retornadas, sendo que as linhas são procuradas em uma só partição. Isso combinado com o
recursos Index Condition Pushdown revelará a você usuário uma grande possibilidade de otimização
do tempo de resposta em relação à consultas SELECT, UPDATE, REPLACE e DELETE.
Com o MySQL 5.6, os recursos foram estendidos e agora é possível indicar explicitamente dentro da
consulta SELECT, qual a partição será utilizada para recuperar dados. Se o usuário sabe que a
partição “p3” abriga dados que satisfação uma condição, esta poderá ser indicada de maneira
explícita e os dados que estão nesta partição somente serão retornados, como no exemplo abaixo:
mysql> create table t1 (a int)
-> partition by key(a)
-> partitions 3; # criou-se partições p0,p1,p2
Query OK, 0 rows affected (0.10 sec)
mysql> insert into t1 values (1),(2);
Query OK, 3 rows affected (0.13 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select a from t1 partition(p1);
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.03 sec)
Além de poder explicitar na consulta qual é a partição como exibido anteriormente, trazer um
conjunto de dados para uma nova tabela ou mesmo exportar de uma para outra através do
comando ALTER TABLE ... EXCHANGE PARTITION.
Conclusão
Ao passo que novidades forem sendo liberadas pela turma de desenvolvimento, pois, o MySQL 5.6
ainda está no seu milestone 5 e ainda não está completamente desenvolvido e não é interessante
colocá-lo em produção. Alguns outros recursos como melhorias no esquema de replicação são
muito preciosos e também muito aguardados e fazem parte também dos recursos que quero
comentar separadamente pois se fosse comentado aqui, teríamos um artigo muito grande.
Detalhes técnicos do artigo
Este artigo fora desenvolvido por Wagner Bianchi, que é Senior Principal Consulting, em laboratório
próprio com o intuito de informar aos usuários que compõem não só a comunidade de usuários do
MySQL, mas toda a comunidade de usuários de software Open Source, dos recursos os quais a
empresa Oracle Corporation têm desenvolvido para a nova versão do servidor de bancos de dados
Open Source mais popular do mundo.
Software utilizados:
• Virtual Machine nomeada MySQL-5-6, utilizando VirtualBox;
• MySQL 5.6 baixado do site dev.mysql.com/downloads;
• CentOS 5.5 como Sistema Operacional;