consistent gets é o número de vezes que uma leitura consistente foi requisitada para um bloco do buffer cache.

Documentos relacionados
Planejamento Parte Visão Geral do Ajuste de Desempenho do Banco de Dados 02 - Arquivos de Alert e Trace do Oracle

ORACLE ARQUITETURA FÍSICA

A instância Oracle é composta de :

Administração de Banco de Dados

01 - Visão Geral do Ajuste de Desempenho do Banco de Dados 02 - Arquivos de Alert e Trace do Oracle

Administração de Banco de Dados

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

ORACLE IN-MEMORY 12c. Vantagens e Cenários de Utilização do Oracle In-Memory 12c. Willian Frasson

Bancos de Dados IV. Tuning de Bancos de Dados. Rogério Costa

Configurações de performance no SQL Server José Antônio da Cunha CEFET-RN

Infraestrutura de Hardware. Explorando a Hierarquia de Memória

ORACLE 11 G INTRODUÇÃO AO ORACLE, SQL,PL/SQL

Performance: Alterar localização do swap file do Windows de forma a incrementar a performance

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Em nosso exemplo, o banco de dados XE está trabalhando no modo NOARCHIVELOG, e para verificar isso, basta executar as seguintes tarefas:

Memória virtual. Sistemas de Computação

PCS-2529 Introdução aos Processadores. Prof. Dr. Paulo Sérgio Cugnasca

Uniao Educacional e Tecnologica Impacta- Uni Impacta

Infraestrutura de Hardware. Explorando Desempenho com a Hierarquia de Memória

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

saída durante o runtime Usando Functions de uma Única Linha para Personalizar Relatórios Mostrar as diferenças entre as functions SQL de uma única

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

Usando Subconsultas para Solucionar Consultas

Árvores B Parte IV. Revisão de Inserção. Organização. Variantes. Leandro C. Cintra Maria Cristina F. de Oliveira

Sistemas Operacionais Aula 16 Memória Virtual

Este tutorial apresenta uma análise para uso adequado e otimizado de seus parâmetros nos processos de ETL, e sua aplicação em situações distintas.

Banco de Dados Oracle. Faculdade Pernambucana - FAPE

Administração de Banco de Dados. Arquitetura Física do Banco de Dados. Arquitetura. Arquitetura. Instância. Base de Dados. Processos User e Server

Princípio da Localidade Apenas uma parte relativamente pequena do espaço de endereçamento dos programas é acessada em um instante qualquer Localidade

Cap 15 Managing Database Performance. Pedro F. Carvalho DBA Oracle

Diferenças na Programação com Dataserver Oracle

Planejamento Parte Visão Geral do Ajuste de Desempenho do Banco de Dados 02 - Arquivos de Alert e Trace do Oracle

Administração de Banco de Dados

Backup e Restauração Banco de Dados. Evandro Deliberal

Sistemas Operacionais Gerenciamento de Memória. Carlos Ferraz Jorge Cavalcanti Fonsêca

Memória e Hierarquia de Memória. Memória Vs. Armazenamento

Configurações para otimização de performance

Oracle Performance Diagnostics & Tuning Ricardo Portilho Proni

Linguagem SQL Restrições, Triggers e Views

Oracle Database 10g: Workshop de Administração II Release 2: Nova Versão

Blob fields in MySQL Databases

UFU/FACOM/BCC Gerenciamento de Bancos de Dados 2019/1-1 a Lista de Exercícios Prof. Ilmério Reis da Silva

Arquitectura de Computadores II

Microprocessadores. Memórias

Estrutura de Dados. Aula 07 Alocação Dinâmica

COMO MELHORAR A PERFORMANCE DE SUA APLICAÇÃO APEX Anderson Rodrigues Ferreira

Capítulo 7 Sistemas de Memória. Ch7a 1

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Hierarquia de Memória. Sistemas de Computação André Luiz da Costa Carvalho

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios Parte 2

Hierarquia de memória

Administração de Sistemas Operacionais. Prof. Marlon Marcon

Arquitetura e Organização de Processadores. Aulas 9 e 10. Memória cache

Memória Cache: Funcionamento

Requisitos de Hardware - Humanus

LogMiner Além do FlashBack Query

ÁRVORE B+ Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

BCD29008 Banco de dados

Aula 06. Slots para Memórias

Pesquisa básica em tabelas

Algoritmos de Substituição de Páginas. Igor Gustavo Hoelscher Renan Arend Rogério Corrêa Medeiros

SGBD. Definição. Funções básicas

DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS. Fábio Roberto Octaviano

Correção de Erros. Erros de memória de semicondutores podem ser:

Transcrição:

Ajustando o BUFFER CACHE, SHARED POOL e o LOG BUFFER BUFFER CACHE O buffer cache é utilizado para armazenar os blocos lidos a partir dos discos. Significa que um buffer cache pequeno irá fazer com que o Oracle precise remover do cache os blocos de dados seguindo a lista LRU (LAST RECENTLY USED), e dependendo da frequência com que isso acontece, poderá gerar uma queda na performance. Não existe uma mágica para dimensionar o buffer cache, o que normalmente se faz é estimar um tamanho inicial e monitorar o acerto, caso não esteja dentro do ideal, você precisará aumentar e repetir o ciclo de monitoramento. Um detalhe importante é que quando a instância é inicializada, o buffer cache está vazio, portanto, qualquer consulta irá gerar misses no buffer. Significa dizer que validar as taxas de acerto no buffer logo após o startup é errado, você provavelmente terá uma taxa de acerto muito baixa. O buffer é calculado usando a seguinte fórmula: 1 - (physical_reads/(db_block_gets consistent_gets)) consistent gets é o número de vezes que uma leitura consistente foi requisitada para um bloco do buffer cache. db block gets from é o número de vezes que um bloco foi requisitado para o buffer cache. physical reads é o número total de blocos de dados lidos do disco para o buffer cache. SELECT NAME, PHYSICAL_READS, DB_BLOCK_GETS, CONSISTENT_GETS, 1 - (PHYSICAL_READS / (DB_BLOCK_GETS CONSISTENT_GETS)) "Hit Ratio" FROM VBUFFER_POOL_STATISTICS; NAME PHYSICAL_READS DB_BLOCK_GETS CONSISTENT_GETS Hit Ratio --------------- -------------- ------------- --------------- ---------- DEFAULT 2382927 85639921 46004325.981898738 No exemplo acima, a taxa de acerto foi de 98 no buffer cache. Uma consulta semelhante pode ser feita na VSYSSTAT: SELECT NAME, VALUE FROM VSYSSTAT WHERE NAME IN ('db block gets from cache',

'consistent gets from cache', 'physical reads cache'); NAME VALUE ---------------------------------------------- ---------- db block gets from cache 88204118 consistent gets from cache 9726193722 physical reads cache 2560965 3 rows selected. 1 - (2560965/(882041189726193722)) = 0,99973906 O buffer cache também pode ser ajustado com base na view VDB_CACHE_ADVICE. Para que essa view seja populada é necessário que o parâmetro DB_CACHE_ADVICE esteja ON. show parameter db_cache_advice db_cache_advice string ON A declaração abaixo consulta a respectiva view, retornando estimativas de buffer e de acerto. COLUMN size_for_estimate FORMAT 999,999,999,999 heading 'Cache Size (MB)' COLUMN buffers_for_estimate FORMAT 999,999,999 heading 'Buffers' COLUMN estd_physical_read_factor FORMAT 999.90 heading 'Estd PhysRead Factor' COLUMN estd_physical_reads FORMAT 999,999,999 heading 'Estd Phys Reads' SELECT size_for_estimate, buffers_for_estimate, estd_physical_read_factor, estd_physical_reads FROM VDB_CACHE_ADVICE WHERE name = 'DEFAULT' AND block_size = (SELECT value FROM VPARAMETER WHERE name = 'db_block_size') AND advice_status = 'ON'; Estd Phys Estd Phys Cache Size (MB) Buffers Read Factor Reads ---------------- ------------ ----------- ------------ 80 9,915 61.70 150,251,109 160 19,830 40.30 98,140,104 240 29,745 21.08 51,329,557 320 39,660 7.23 17,594,710 400 49,575 1.36 3,309,722 480 59,490 1.21 2,948,364 560 69,405 1.13 2,763,717 640 79,320 1.09 2,655,866 720 89,235 1.06 2,581,271

800 99,150 1.03 2,510,199 880 109,065 1.00 2,435,219 960 118,980.98 2,380,060 1,040 128,895.97 2,350,269 1,120 138,810.95 2,309,334 1,200 148,725.93 2,275,624 1,280 158,640.92 2,249,930 1,360 168,555.92 2,231,580 1,440 178,470.91 2,211,413 1,520 188,385.90 2,193,922 1,600 198,300.89 2,167,724 20 rows selected. A análise dela é feita de forma diferente a de taxas. A consulta mostra uma redução de 2(0.98) no número de leitura físicas caso o buffer cache seja configurado para 960MB. Lembrando que, quando falamos de memória, estamos falando de memória física, um servidor Oracle, não deve fazer swap. Para utilizar o buffer cache de forma eficiente, as declarações SQL da aplicação devem estar ajustadas para evitar consumo desnecessário de recursos. Isso é feito verificando as declarações SQL executadas com mais freqência e as que fazem uso de uma maior quantidade de buffers. A consulta abaixo retorna as 50 maiores consultas consumidoras de BUFFERS. SELECT * FROM (SELECT SQL_FULLTEXT, BUFFER_GETS FROM VSQL ORDER BY BUFFER_GETS DESC) WHERE ROWNUM <= 50 Existem duas formas de melhorar o acerto no buffer: Otimizando as consultas de forma a retornarem menos blocos, e dessa forma utilizar menos buffer. Aumentando o buffer cache. SHARED POOL O Oracle utilize a SHARED POOL para armazenar declarações PL/SQL e SQL, dados do dicionário entre outros. Da mesma forma que o BUFFER CACHE, é impossível determinar um tamanho inicial para uma base nova. Você deve seguir o mesmo principio do BUFFER CACHE, colocar um valor e avaliar o ambiente. Lembrando que a SHARED POOL inicia vazia, e à medida que os usuários vão submetendo as declarações SQL ela vai sendo preenchida.

Para isso, observe o seguinte: Utilize sempre que possível bind variables ao invés de caracteres literais nas declarações. Isso faz com que o Oracle armazene apenas uma declaração SQL. As declarações, apesar de semelhantes, ocupam duas áreas distintas na SHARED_POOL: Substitua: SELECT employee_id FROM employees WHERE department_id = 10; SELECT employee_id FROM employees WHERE department_id = 20; Por: SELECT employee_id FROM employees WHERE department_id = :dept_id; As aplicações devem evitar os usuários possam criar suas próprias instruções. Crie padrões para as bind variables e para os espaços nas declarações SQL blocos de PL/SQL. Por exemplo: SELECT employee_id FROM employees WHERE department_id = :dept_id É diferente de: SELECT employee_id FROM employees where department_id = :dept_id O objetivo do tuning na SHARED_POOL é fazer com que uma declaração SQL que está no cache possa ser reutilizada o maior número de vezes possível. Utilize a declaração abaixo para identificar a taxa de hit ratio da shared pool: SELECT sum(pinhits) / sum(pins) FROM VLIBRARYCACHE; SUM(PINHITS)/SUM(PINS) ----------------------.996986356 A consulta mostrou que 99,69 dos códigos de SQL e PLSQL estão sendo reaproveitados. A declaração abaixo mostra a quantidade de bytes livres na SHARED_POOL.

SELECT * FROM VSGASTAT WHERE NAME = 'free memory' AND POOL = 'shared pool'; POOL NAME BYTES ----------- ------------------------- --------- shared pool free memory 385236520 A consulta abaixo também auxilia na descoberta da taxa de acerto da SHARED POOL. SELECT (SUM(GETS - GETMISSES - FIXED)) / SUM(GETS) "ROW CACHE" FROM VROWCACHE; ROW CACHE ----------.994562437 Também é possível utilizar a view VSHARED_POOL_ADVICE. Para isso é preciso que o parâmetro STATISTICS_LEVEL esteja configurado como ALL ou TYPICAL. show parameter statistics_level; statistics_level string TYPICAL SELECT shared_pool_size_for_estimate "Size of Shared Pool in MB", shared_pool_size_factor "Size Factor", estd_lc_time_saved "Time Saved in sec" FROM vshared_pool_advice; Size of Shared Pool in MB Size Factor Time Saved in sec ------------------------- ----------- ----------------- 352.2391 1461671 512.3478 1465054 672.4565 1470451 832.5652 1472452 992.6739 1472513 1152.7826 1472536 1312.8913 1472542 1472 1 1472542 1632 1.1087 1472542 1792 1.2174 1472542 1952 1.3261 1472542 2112 1.4348 1472542 2272 1.5435 1472542 2432 1.6522 1472542 2592 1.7609 1472542 2752 1.8696 1472542

18 rows selected. 2912 1.9783 1472542 3072 2.087 1472542 A saída acima mostra que o tamanho da shared pool é de 1472M. Mostra também que, se o tamanho da shared pool fosse ajustado para 3072M, teria a mesma eficiência. LOG BUFFER Aplicações que inserem, modificam ou excluem um grande volume de registros normalmente não utilizam o tamanho default de log buffer. Apesar do tamanho do log buffer ser bem menor frente ao tamanho total da SGA, ele tem grande impacto na performace de sistemas que realizam atualização no volume dos dados. Um tamanho inicial para o log buffer é: MAX(0.5M, (128K * número de CPUs)) A maioria dos sistemas que possuem log buffer maior que 1M não possuem ganhos de performance. A análise da performance do log buffer é feita por intervalo. Deve ser coletado em intervalos, e verificar se existe um aumento do valor. O ideal é que não existam alterações. SELECT NAME, VALUE FROM VSYSSTAT WHERE NAME = 'redo buffer allocation retries'; NAME VALUE ----------------------------------------------------------- ---------- redo buffer allocation retries 11 Se o valor aumentar de forma consistente, é necessário ajustar o tamanho do log buffer