Storage Exadata: Compressão HCC

Salve, salve, galera do OraCUle! Neste post, abordaremos mais um item da série de posts sobre o Exadata e falaremos sobre a compressão Hybrid Columnar Compression (HCC). Apesar do tema de compressão sugerir ser um tema simples, existem algumas situações que devem ser levadas em consideração sobre o quando e porque da utilização desta feature. Iremos primeiramente abordar o funcionamento da compressão no storage do Exadata.

Diferente do que acontece no storage dos servidores de banco de dados convencionais, nas células do Exadata, os dados são armazenados em uma unidade específica chamada por Compression Unit, para os íntimos, simplesmente, o CU. Brincadeiras a parte, cada unidade de compressão pode variar em tamanho entre 1 e 320 KB, e armazena os dados da tabela de forma colunar, diferente do conceito de armazenamento tradicional que é o armazenamento por registro. Quando ocorre a compressão e quanto maior for esta, maior será o custo de CPU e memória utilizado pelos storage servers.

Outra questão que devemos ter em mente é sobre o comportamento do HCC pois em carga de dados nas tabelas utilizando este tipo de compressão, deve ocorrer Direct Path. Tendo isto em mente, quando ocorrem UPDATES em registros com HCC, o dado comprimido perde esta compressão mas é mantido a compressão FOR OLTP. Sendo assim, é altamente recomendado que os dados que utilizem este tipo de compressão não sejam muito modificados, logo, este tipo de compressão não é recomendado para ambientes OLTP. Sobre os tipos de compressão HCC, existem quatro e abaixo iremos abordar cada um:

  • Compress for Query Low: das taxas de compressão do Exadata, esta é a que permite menor relação de compressão entretanto é a mais direcionada para carga de dados;
  • Compress for Query High: este tipo de compressão é a mais direcionada para leitura e possui uma taxa de compressão melhor que a anterior;
  • Compress for Archive Low: possui uma taxa de compressão melhor que as anteriores e é direcionada a dados históricos com um menor custo de CPU e memória, porém o tempo de carga é elevado;
  • Compress for Archive High: por fim, esta taxa é a que permite melhor taxa de compressão entretanto possui o maior custo de CPU e memória, e por isso é a recomendada para dados históricos;

É importante ter em mente que se o Exadata estiver utilizando este tipo de compressão, melhor será a utilização das demais features que o storage poderá prover (Storage Indexes, Cell Offloading). Efetuei um teste onde foram criadas cinco tabelas idênticas mas uma destas sem compressão e as demais terão as compressões abordadas aqui. Abaixo segue o tamanho final que cada tabela ficou e o seu tempo em segundos de criação, claro que não houve execução com paralelismo já que a intenção era apenas demonstrar o percentual do tempo e tamanho entre as possibilidades de compressão do HCC:

  • Tabela: TEST_NOCOMPRESS .:. Tamanho (GB): 15.53 .:. Tempo de Criação (seg.): 243
  • Tabela: TEST_QUERY_LOW .:. Tamanho (GB): 4.43 .:. Tempo de Criação (seg.): 320
  • Tabela: TEST_QUERY_HIGH .:. Tamanho (GB): 2.50 .:. Tempo de Criação (seg.): 546
  • Tabela: TEST_ARCHIVE_LOW .:. Tamanho (GB): 2.60 .:. Tempo de Criação (seg.): 551
  • Tabela: TEST_ARCHIVE_HIGH .:. Tamanho (GB): 1.70 .:. Tempo de Criação (seg.): 1.843

Com relação a performance das queries em cada tabela, foi executado um simples SELECT COUNT(*) para se obter o tempo de resposta e as estatísticas de cada. Abaixo podemos ver que a nas tabelas que possuem HCC, o Exadata consegue retornar (no pior caso) menos de 4% do tamanho total do segmento para o DB Node – o que representa cerca de 96% de ganho com o Smart Scan – mas na tabela que não possui este tipo de compressão, o ganho com Smart Scan representa cerca de 66%. Com ganho maiores no retorno de dados, isto significa em menor quantidade de I/O para o servidor, gerando melhor utilização de recurso. Para não modificar o nome das estatísticas e melhorar a leitura, os valores de cada uma, eu coloquei os valores em Mega Bytes e expliquei brevemente cada estatística:

  • cell physical IO bytes eligible for predicate offload: Quantidade de bytes processados nos discos físicos onde ocorreu o offloading para as células;
  • cell physical IO interconnect bytes: Quantidade de bytes retornado das células para o servidor de banco;
  • cell physical IO interconnect bytes returned by smart scan: Quantidade de bytes retornado das células para o servidor de banco, apenas com o uso do Smart Scan;

TEST_NOCOMPRESS

  • Tempo de Resposta (seg.): 42,38
  • cell physical IO bytes eligible for predicate offload (MB): 15.443,14
  • cell physical IO interconnect bytes (MB): 5.238,94
  • cell physical IO interconnect bytes returned by smart scan (MB): 5.238,94

TEST_QUERY_LOW

  • Tempo de Resposta (seg.): 40,43
  • cell physical IO bytes eligible for predicate offload (MB): 4.414,84
  • cell physical IO interconnect bytes (MB): 95,57
  • cell physical IO interconnect bytes returned by smart scan (MB): 93,91

TEST_QUERY_HIGH

  • Tempo de Resposta (seg.): 39,41
  • cell physical IO bytes eligible for predicate offload (MB): 2.046,72
  • cell physical IO interconnect bytes (MB): 78,79
  • cell physical IO interconnect bytes returned by smart scan (MB): 75,92

TEST_ARCHIVE_LOW

  • Tempo de Resposta (seg.): 41,36
  • cell physical IO bytes eligible for predicate offload (MB): 2.034,09
  • cell physical IO interconnect bytes (MB): 73,86
  • cell physical IO interconnect bytes returned by smart scan (MB): 71,57

TEST_ARCHIVE_HIGH

  • Tempo de Resposta (seg.): 39,35
  • cell physical IO bytes eligible for predicate offload (MB): 1.688,56
  • cell physical IO interconnect bytes (MB): 62,79
  • cell physical IO interconnect bytes returned by smart scan (MB): 61,62

Bom pessoal, vou ficando por aqui, espero que tenham gostado e logo mais teremos outros posts sobre Exadata. Aquele abraaaaaaaaaaaa.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s