Novos recursos do Oracle Database 12c
Introdução
No artigo de hoje irei 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 neste artigo é comentar apenas sobre alguns dos novos recursos do Oracle Database 12c, relacionados a ganhos de performance, que eu mais gostei ou que eu achei mais interessantes, e que realmente vão me trazer alguns benefícios como DBA/Desenvolvedor. Segue abaixo a lista destes recursos:
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 desse 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.
Referências
- Pro Oracle Database 12c Administration, Editora: Apress, Autor: Darl Kuhn;
- Oracle Database New Features guide 12c Release 1: http://docs.oracle.com/cd/E16655_01/server.121/e17906.pdf