Social Icons

15 de out. de 2013

Novidades do Oracle Database 12c (Parte 1)



Olá pessoal,

     O artigo de hoje é o primeiro de uma série em que vou comentar neste mês (10/2013), sobre novos recursos do Oracle Database 12c, que conheci estudando fontes diversas (ver as referências no final do artigo) ao me preparar para o exame beta 1Z1-060 (Upgrade to Oracle Database 12c), que fiz no dia 04/10/2013, e que, por ser um exame beta, ainda não sei se fui aprovado (em exames beta a Oracle tem até 11 semanas para divulgar o resultado).

     Meu objetivo nestes artigos não é comentar sobre todos os novos recursos do Oracle Database 12c, mas sim, apresentar uma breve descrição daqueles que eu mais gostei ou que eu achei mais interessantes, e que realmente vão me trazer alguns benefícios como DBA/Desenvolvedor. Conhecer estes novos recursos é muito importante para quem vai atualizar futuramente o seu SGBD para a versão 12c ou para quem vai desenvolver software futuramente utilizando esta nova versão.

     Apresentarei ao longo desta série de artigos, apenas 50 itens de uma lista muito maior de recursos, que pode ser consultada no Oracle Database New Features guide 12c Release 1 (ver referências). Abaixo irei apresentar os recursos, enumerando-os sequencialmente por todos os artigos, ou seja, em um artigo a numeração sempre seguirá o valor do último item do artigo anterior. Neste artigo, especificamente, começarei abordando aqueles que estão relacionados a ganhos de performance no BD (coisa que eu adoro):

1- Armazenamento de funções com privilégios do invocador em Result Cache
     Result Cache, criado na versão 11G do Oracle Database, não podia armazenar o resultado de funções criadas com privilégios do invocador. Agora, no 12c, você também já pode otimizar otimizar esses tipos de funções com PL/SQL Function Result Cache.

2- Criação de funções PL/SQL dentro da cláusula WITH
     A cláusula WITH que eu apresentei no artigo Cláusula WITH (para tunar queries), permite agora, criar funções temporárias que existem somente no escopo da instrução SQL. Essas funções oferecem um desempenho melhor do que as funções armazenadas no BD.

3- Execução concorrente de UNION e UNION ALL
    No 12c o otimizador consegue otimizar instruções SQL ligadas por UNION ou UNION ALL, executando-as paralelamente. Até o 11G elas eram executadas sequencialmente.

4- Parallel DML em colunas LOB do tipo SecureFiles
    No 12c, agora é possível executar Parallel DML (PDML) quando a instrução SQL envolver colunas do tipo SecureFiles LOB em tabelas não particionadas. No 11G isso era possível somente em tabelas particionadas.

5- DDL ONLINE melhorado
    Muitas operações de manutenção realizadas através de instruções DDL não causam mais locks na tabela, podendo ser executadas de modo transparente para os usuários, ou seja, ONLINE, sem nenhum impacto em suas aplicações. Essa instruções são: DROP INDEX ONLINE, DROP CONSTRAINT ONLINE, SET UNUSED COLUMN ONLINE, ALTER INDEX UNUSABLE ONLINE, ALTER INDEX [VISIBLE | INVISIBLE].

6- Coleta de estatísticas online após Bulk Loads
    Após a execução de operações de Bulk Load, tais como CTAS ou INSERT INTO... SELECT em uma tabela vazia, o Oracle coleta automaticamente estatísticas da tabela após a carga dos dados. Essa característica elimina a necessidade da gente executar uma coleta de estatísticas manualmente, e consequentemente, a operação de FTS que essa operação iria executar.

7- Movimentação ONLINE de partições
    Agora podemos executar a instrução ALTER TABLE ... MOVE PARTITION sem bloquear instruções DML na partição referenciada enquanto ela é executada. Índices globais também são mantidos durante a operação e um index rebuild não é mais necessário.

8- Índices parciais em tabelas particionadas
     Podemos agora criar índices locais e globais em subconjuntos de partições de uma tabela particionada. Essa característica, chamada índice parcial, flexibiliza a criação de índices nas tabelas particionadas, criando mais uma alternativa para otimizarmos instruções SQL através da criação de índices.
  
 9- Otimização de query adaptável
     Todos que estudarem um pouco sobre tuning e o Otimizador de queries, sabem que hoje ele depende fortemente de estatísticas de objeto para gerar um bom plano de execução, e que muitas vezes essas estatísticas estão desatualizadas e acabam influenciando negativamente na geração de um plano de execução. Para minimizar este problema, no 12c foi introduzido o recurso Adaptive Query Optimization, que permite ao Otimizador, em tempo de execução, coletar estatísticas adicionais dos objetos, para reajustar o plano de execução, e deste modo, possibilitar a otimização do SQL. Este é um dos recursos que eu mais gostei no 12c

10- Estatísticas dinâmicas
     Durante a execução de uma instrução SQL, o otimizador decide se utiliza as estatísticas de objetos armazenadas no DD ou se ele usa Estatísticas Dinâmicas, coletadas através de amostragem. Isso já existia em versões anteriores e era conhecido como Amostragem Dinâmica, porém o recurso se aplicava automaticamente somente em tabelas vazias.

11- Detecção automática de grupos de colunas
     No 11G foi criado o recurso de Estatísticas Estendidas para otimizar instruções SQL que possuem distribuição de valores não-uniforme em determinados grupos de colunas utilizados em filtros de instruções SQL. No 12c, para facilitar o uso deste recurso, o Oracle consegue determinar automaticamente quais grupos de colunas precisam de estatísticas estendidas. 

12- Novos tipos de estatísticas do otimizador
     Até o 11G, só existiam 2 tipos de histogramas: Heigth-based e Frequency. No 12c agora existem 4 . Foram acrescentados os tipos: Top Frequency e o Hybrid Histogram; visando fornecer melhores estatísticas para o otimizador, principalmente, quando 1 ou poucos valores de uma frequência representam 99% do total de valores ou quando não há buckets disponíveis para armazenar todos os valores.

13- Estatísticas privadas de sessão em GTTs
     Global Temporary Tables (GTTs), até o 11G, possuíam estatísticas globais, ou seja, todas as sessões do BD usavam as mesmas estatísticas ao acessar uma GTT. No 12c isso mudou, as estatísticas de uma GTT agora são próprias de uma sessão. Isso representa um grande progresso nas estatísticas desse tipo de tabela, visto que, os dados dela são privados de cada sessão, portanto, as antigas estatísticas globais não representavam algo próximo da realidade de cada usuário.

14- Diretivas de Planos SQL
     Este recurso faz parte do item 9 (Adaptive Query Optimization). Ele permite que as estatísticas coletadas dinamicamente sejam armazenadas em disco, no tablespace SYSAUX, permitindo deste modo, que as instruções SQL reutilizem estatísticas dinâmicas geradas anteriormente em outra instrução SQL, por qualquer usuário do BD.

15- Múltiplos índices nas mesmas colunas
     No 12c podemos criar índices (diferentes) na mesma coluna ou grupo de colunas, desde que apenas 1 desses índices seja visível (os demais tem que ser definidos como invisíveis) ao otimizador. Essa característica permite ao DBA ou Desenvolvedor, aumentar sua produtividade ao realizar testes de otimização, criando múltiplos índices e testando qual deles é o melhor em situações diversas, sem ter que ficar apagando e recriando o índice múltiplas vezes.

  
Bom pessoal, por hoje é só!

Clique aqui para acessar a 2ª parte deste artigo.
Clique aqui para acessar a 3ª parte deste artigo.


[]s


Referências
- Pro Oracle Database 12c Administration, Editora: Apress, Autor: Darl Kuhn;

10 comments:

  1. mudou alguma coisa sobre a criação/recriação do arquivo listner.log

    ResponderExcluir
    Respostas
    1. No 12c não.

      Ocorreram muitas mudanças no 11G: http://www.fabioprado.net/2012/06/pesquisando-alertlog-no-adr-do-oracle.html.

      Excluir
  2. Cara, muito bom!
    Valeu por compartilhar e pesquisar tudo isso.

    ResponderExcluir
  3. Duda, Thyago e Anônimo, obrigado pelos comentários. É sempre bom receber um feedback dos leitores do blog!

    []s

    ResponderExcluir
  4. Fabio, Parabéns pelo artigo. Você teria mais algum assunto relacionado ao intem : 3- Execução concorrente de UNION e UNION ALL.

    Essa execução se aplica as outras funções DDL, ou apenas para union ?

    Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Thiago, obrigado pelos comentários. Não tenho nada mais escrito sobre o item 3. Pelo que sei, até o momento, a execução concorrente só se aplica aos UNIONs, ok?

      Excluir

 

LINKS ÚTEIS

Total de visualizações de página

Seguidores

Meu One Drive (antigo Sky Drive)