O que é Oracle Exadata?
Essa é uma pergunta que você já deve ter ouvido por ai, bom vou tentar responder (ou ajudar a responder). Respondendo da forma mais direta possível: Oracle Exadata (ou Oracle Exadata Database Machine) é um applicance criado pela equipe de Engineering Systems da Oracle e dedicado exclusivamente para que bancos de dados Oracle (versões 11 e 12) sejam executados com a maior performance e disponibilidade possível, independe do tipo (OLTP, DSS ou DW).
Legal não é? Mas o Oracle Exadata é muito mais do que isso, existem diversos detalhes técnicos de hardware e software que são muito importantes e transformaram o Oracle Exadata em um sucesso e desejo de muitos. Neste artigo, e nos próximos, vou falar somente sobre o Oracle Exadata, mostrar detalhes técnicos e algumas decisões gerenciais que estão ligadas a ele. Vou deixar de lado os detalhes comerciais (que você acha em qualquer documento que passou pela equipe de marketing da Oracle) e falar do técnico.
Oracle Exadata
O Oracle Exadata apareceu em 2008 através da versão HP Oracle Database Machine (conhecida como V1) e focada exclusivamente em DW. Em 2009 com a compra da SUN pela Oracle surgiu a versão V2 que expandiu o universo e permitiu que bases OLTP também tivessem ganho de performance com a adição de placas flash ligadas diretamente no barramento PCI-E. Depois disso surgiram ano a ano as versões X2, X3 e por fim a X4 no final de 2013.
Na história do Oracle Exadata temos alguns capítulos interessantes, mas basicamente ele foi criado para competir com Netezza, Greenplum e Teradata no universo DW. O embrião do Oracle Exadata era um software chamado SAGE (Storage Appliance for Grid Environments) para permitir ao banco de dados Oracle uma ótima performance independente do hardware e storage utilizado. Com a aquisição da SUN o foco mudou um pouco (com a Oracle dona de tudo o que precisava) e surgiu o appliance como conhecemos. Até mesmo a adição de placas Flash foi originalmente pensada para DW e não para OLTP. Se você quiser conhecer um pouco mais recomendo a leitura da entrevista do Kevin Closson disponível aqui, mas leiam com um pouco de cuidado, ele saiu da Oracle e está em um concorrente direto e por isso suas impressões podem ser parciais.
Como já disse, o Oracle Exadata é um appliance e isso quer dizer que existem soluções de hardware e software que trabalham de forma integrada para atingir a melhor performance para bancos de dados Oracle. Ele não é somente hardware, o software Exadata traz funcionalidades que não podem ser encontradas em outra solução do mercado. Eu costumo separar em ambiente tradicional vs Oracle Exadata.
Hardware Exadata
Falarei de forma resumida sobre o hardware (já que a cada ano muda), mas basicamente podemos dividir em três componentes:
-
Database Servers: Servidores x86-64 destinados a rodar o Grid Infrasctructure do Oracle RAC 11GR2 ou 12C. Nestes servidores rodam o ASM e os bancos de dados. Nenhum software Exadata executa aqui, o Grid (e database) instalado aqui é o mesmo disponível para download no site OTN (versões anteriores a 11.2.0.4 precisam ser compiladas com a biblioteca do Infiniband).
-
Storage Servers: Servidores x86-64 destinados a rodar o software Exadata, disponibilizam os seus discos aos Database Servers. Além disso, cada um apresenta 4 placas PCI-E de 800GB de Flash, na versão X4 as placas são modelo F80 que apresentam compressão nativa por hardware.
-
Inifiband: A comunicação entre os Database Servers e Storage Server é feita através de rede Infiniband, incluindo o Interconenct dos Database Servers. Na versão X4 ambas as portas do Infiniband estão ativas por padrão o que garante um throughput de rede muito maior (graças ao PCI-E 3.0, as outras versões já permitiam mas o barramento PCI não tinha a largura de banda para que ambas as portas estivessem ativas). Cada servidor tem um placa com duas portas Infiniband.
Além de tudo isso temos redundância em todos os níveis: PDU’s, fontes, switchs infinibands. Um exemplo que ocorreu aqui na V2: uma falha de um cabo Infiniband. Nada foi afetado, pois existia uma outra porta (na mesma placa) que assumiu a queda da primeira. Claro que se eu estivesse operando (em um X4) e sobrecarregando (passando dos 40GB/s – o que é muito difícil) eu teria uma queda de performance.
Quanto as opções de configuração o Oracle Exadata está disponível em duas edições, totalizando 5 modelos. A edição chamada X4-8 (disponível em um único modelo) tem dois database servers e 14 storage servers, mas pode chegar (cada database server) até 6TB de memória, sim um monstro. A outra edição chamada de X4-2 tem 4 modelos (Full Rack, Half-Rack, Quarter-Rack e Eight Rack) e a diferença entre eles é a quantidade de database servers (de 2 a 4) e de storage servers (de 3 a 14) que podem ser instalados.
O interessante no caso do hardware que poucos notam (e que eu acho fundamental) é a garantia de funcionamento que está implícita. Por ser um appliance tudo foi testado e homologado pela Oracle antes de seu lançamento, isso quer dizer que você não vai ter problemas de compatibilidade entre hardware e software já que o firmware das placas Infiniband, de rede, dos discos e das controladoras foi testado e homologado. Você não verá queda do Interconnect do RAC porque a versão do firmware da placa de rede não é compatível, ou que o MTU não funciona direto. Esqueça problemas de compatibilidade.
Não vou me estender mais na parte de hardware, poderia dizer que o Flash faz mais de 500 mill IOPS, que existe a compactação direto no flash e inúmeros outros detalhes de marketing. Mas não é o foco aqui. Para quem quiser ver mais detalhes fiz uma análise quando Oracle Exadata X4 foi lançado que pode ser lida aqui e aqui.
Software Exadata
É aqui que o Oracle Exadata passa a ficar mais interessante e se difere dos demais. O software Exadata (Oracle Exadata Storage Server Software) foi criado para permitir que os bancos de dados fossem desonerados de funções de pesquisa de dados. A ideia básica é entregar diretamente ao kernel do banco de dados somente a informação que ele precisa.
Vou começar com o seguinte exemplo: Em um ambiente tradicional quando ocorre um join entre duas tabelas (mesmo que tenham where) e caímos em um full table scan o banco de dados requisita ao storage todos os blocos de todas as tabelas, correto? Agora imagine que suas tabelas tem 200 milhões de linhas e 500GB mas sua consulta tem 5 mil linhas de resultado. Independentemente do resultado imagine a quantidade de memória perdida nessa consulta em buffer cache, os IOPS e o CPU gasto. Em um ambiente Exadata este cenário muda muito, o software Exadata (que roda de forma independente em cada célula) ao receber as requisições dos blocos a serem retornados ao banco de dados interpreta a consulta e verifica através do where quais as linhas e colunas que efetivamente devem ser retornadas. Depois só as linhas necessárias voltam para o banco de dados (mesmo que o banco acredite que seja um full table scan). Aqui, das 200 milhões de linhas retornadas o banco receberá só 20 mil voltam ao banco para fazer o join. Viram a diferença?
O exemplo acima é só uma das funcionalidades presentes no software Exadata, abaixo algumas:
-
Descentralização e escalabilidade: Cada Storage Server roda o software Exadata, na realidade nenhum Storage Server não sabe da presença do outro (eles não se comunicam entre si). Na versão 12.1 em diante surgiu uma comunicação entre os Storage Servers em movimentações de dados (como sync de discos do ASM ou move de tabelas). Os dados não precisam mais ir para o Grid e voltar, agora o Grid (ou o banco) pode dizer para a célula destino qual a célula origem e “mandar” ler diretamente, o que diminui consideravelmente o consumo de rede Infiniband.
-
Smart Flash: Usado pela funcionalidade chamada Smart Flash Cache que armazena nas placas flash os dados lidos com mais frequência (de forma automática), garantindo também que o que foi escrito nos discos esteja atualizado no flash. Também pode ser usado pelo Smart Flash Log em casos de muita escrita o redo. O logwriter envia a requisição para o software Exadata e esta é enviada para o disco e flash simultaneamente, aquele que retornar primeiro (provavelmente o flash) devolve o OK ao logwriter. O Smart Flash Log deve ser usado em casos especiais e como auxiliar, pois se existe gargalo de disco ele deve ser investigado.
-
Resource Manager: Chamado de IORM (I/O Resource Manager) Permite em nível de célula definir/modificar/associar diferentes níveis de recursos para um banco de dados ou categorias específicas. Além disso, permite modificar em tempo real os recursos associados sem reinício do banco de dados. Além de ter integração com o resource manager do banco de dados.
-
Cell Offload: Traz para dentro do Exadata Software boa parte do trabalho que seria realizado pelo banco de dados. Quando a consulta ocorre no banco de dados os blocos são requisitados ao storage, o cell offload recebe a consulta original e verifica colunas e predicados envolvidos. Com estas informações identifica as linhas que contemplam os requisitos e as retorna, economizando assim CPU do banco de dados e reduzindo informação trafegada via rede. Aqui, já tenho bancos onde esta funcionalidade reduziu em mais de 85% o I/O entre banco e storage.
-
HCC: Hybric Columnar Compression permite ao storage server compactar os dados através da análise por colunas e não por linhas. Assim, conseguindo uma compactação maior por similaridade dos dados. Permite também definir níveis de compactação, mas recomenda-se utilizar em dados que não sofrem muitas alterações pois existe um consumo de CPU associado (consumo elevado dependendo do nível escolhido).
-
Storage Index: Cada storage server cria um índice sobre a distribuição dos dados no disco (a cada 1MB) e armazena os valores máximos e mínimos das colunas. O storage índice é mantido em memória e composto por pequenos índices das regiões do disco. Assim, em comparações que envolvam igualdades ou nulidade o índice é utilizado para evitar que o I/O em disco aconteça.
Com todas estas funcionalidades listadas (e ainda tem mais algumas) o Exadata Software entrega um nível diferente de integração com o banco de dados. Somente ele consegue “compreender” o que o banco está requisitando e trabalhar com isso.
Appliance
Ser Oracle no lado do Storage também ajuda, não existe nada no mercado que irá fazer o mesmo. Existe hardware mais rápido que o Oracle Exadata? Claro que sim, mas você ainda estará trafegando a sua tabela de 200 milhões de linhas (que agora deve estar em 300 milhões). Com o software Exadata somente 20 mil linhas serão retornadas ao banco. Percebeu onde está o ganho? Por isso que eu costumo dividir entre ambiente tradicional vs Oracle Exadata.
Com todas estas características em um único applicance o Oracle Exadata se tornou o que é hoje, existem inúmeros casos de sucesso mas também casos que não deram certo. O Oracle Exadata não resolve “automagicamente” problemas como aplicações mal escritas, sql mal feitos (ou com hints malucos do Oracle 8i).
Existem casos em que o Oracle Exadata foi utilizado para resolver um problema específico (DW é um), mas também é muito utilizado em consolidação de bases de dados. Você tem uma máquina com um desempenho absurdo, diversas funcionalidades e vai deixar isso com uma única base de dados?
O bom em uma consolidação é que o appliance tem características que vão permitir um controle bem mais fino do ambiente. Resource Manager (de bando de dados do Exadata software), escalabilidade e Oracle RAC permitem a você dizer o que cada base de dados deve ter de recurso. Uma granularidade de controle muito maior do que você teria em um ambiente tradicional.
Próximo Artigo
Este artigo teve muita informação mas nada muito técnico (com exemplos e afins) mas era necessária uma introdução do assunto. No próximo artigo vou falar especificamente do Exadata Software, como ele se comunica com os database servers, disponibiliza seus discos e a flash.
Fernando Simon, administrador de banco de dados para o Tribunal de Justiça de Santa Catarina e também consultor na mesma área no tempo livre. Mantenho um blog com informações para o dia a dia de um DBA e DMA Exadata.