MySQL 5.6, o que há de novidade?

No quesito escalabilidade, o MySQL 5.6 oferecerá recursos que trarão ainda mais estabilidade na utilização da replicação assíncrona e 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 daversã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, a 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 (PERFORMANCE_SCHEMA) 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, 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 ao conjunto recuperado. Com a utilização do ICP, ou Index Consition Pushdown, a cláusula WHERE é aplicada ao 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çam 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    
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;    

Método utilizando Index Condition Pushdown
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 de maneira não estrutura 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 no mundo Open Source, as peças vão sendo conectadas em detrimento ao que a própria Oracle atualmente tem enfatizado: todos os softwares são produzidos juntamente com o cliente, integrados e testados 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 (componentes responsáveis por processar e armazenar dados em um MySQL Cluster).

Um snapshot interessante do lado interno da integração entre o MySQL 5.6 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

Um 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 em várias revistas no Brasil 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 esquema de 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 existentes em uma tabela sejam retornados, sendo que as linhas são procuradas de uma só partição. Isso combinado com o recurso Index Condition Pushdown, ICP, revelará a você usuário uma grande possibilidade de otimização do tempo de resposta em relação às consultas do tipo 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.

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. 

Com esta nova proposta e nova versão, o MySQL se torna um produto viável e aplicável aos pontos mais cogitados no mercado, se tornando uma opção tanto para clientes que tem necessidade de um banco de dados relacional e para aqueles mais vanguardistas que pretendem utilizar uma tecnologia NoSQL, tudo isso com um baixo TCO e altíssima performance. Visto que o MySQL 5.6, além de melhorias que impactam diretamente a velocidade dos negócios, uma vez que, se você tem maior fluidez nas manipulações de dados, você conseguirá atender clientes em maior escala e entregar seu produto com maior agilidade. 

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;

Fonte: iMasters