O Oracle Statspack é uma ferramenta gratuita de diagnóstico de performance que existe no Oracle Database desde a versão 8, muito útil e poderosa, composta de um conjunto de scripts SQL, PL/SQL e SQL*Plus que coletam, armazenam e exibem estatísticas de desempenho de um Banco de Dados Oracle.
Mostrando postagens com marcador Performance Tuning. Mostrar todas as postagens
Mostrando postagens com marcador Performance Tuning. Mostrar todas as postagens
30 de nov. de 2024
3 de jan. de 2023
Features e ferramentas de performance no Oracle Enterprise Manager 13c
Olá pessoal,
No post de hoje quero compartilhar com vocês 2 aulas que ministrei ano passado mostrando como usar algumas features e ferramentas de performance no Oracle Enterprise Manager 13c.
26 de mai. de 2017
Como desfragmentar tabelas no Oracle? (parte 2)
Olá pessoal,
Este artigo é continuação de outro com o título "Como desfragmentar tabelas no Oracle (parte 1)" e nele irei abordar os seguintes tópicos:
- Como evitar ou minimizar a quantidade de LEMs em uma tabela?- Como identificar e eliminar as LEMs?
17 de mai. de 2017
Desfragmentação de tabelas no Oracle (parte 1)
Olá pessoal,
Como extensão à palestra "Top 5 Tuning for Oracle and SQL Server" apresentada em 6/5/17 no DBA BRASIL 2.0, resolvi escrever este artigo para explicar em mais detalhes o assunto "Fragmentação de dados em tabelas" no Oracle Database, e como eliminá-la, abordando os métodos mais eficientes para realizar esta atividade.
19 de set. de 2016
Webinário gratuito "Como analisar um AWR Report"
Olá pessoal,
No post de hoje quero apenas comunicar que no dia 27/9/16, às 21h, irei participar do Terça de Dados do Grupo DBA Brasil, mostrando para você como analisar um AWR Report.
5 de out. de 2015
Otimizando I/O com discos SSD
Olá pessoal,
No artigo de hoje vou comentar sobre como otimizar I/O em Bancos de Dados Oracle, utilizando discos SSD (Solid-State Drives).
1 de dez. de 2014
Coletando Estatísticas de sistema para otimizar o seu Banco de Dados
Olá pessoal,
No post de hoje estou compartilhando com vocês um vídeo que eu gravei comentando sobre Estatísticas de Sistema, Estatísticas de objetos do Dicionário de Dados (DD), e qual a diferença destes tipos de estatísticas em relação às Estatísticas de objetos, que grande parte dos Desenvolvedores e DBAs já sabem bem o que é!
4 de ago. de 2014
Performance Tuning: o que é, por onde começar e o que fazer?
Olá pessoal,
No post de hoje vou compartilhar com vocês o arquivo PDF de uma apresentação que fiz no dia 02/08/2014 no grande evento GUOB TECH DAY 2014, com o tema Performance Tuning: o que é, por onde começar e o que fazer?.
26 de jul. de 2014
Tuning em Bancos de Dados OLAP
Olá pessoal,
No post de hoje estou compartilhando o vídeo de uma palestra que apresentei no "CONABI - 1o. Congresso Nacional Online de Business Inteligence" (que ocorreu entre os dias 18 e 24/08/2014), congresso que teve diversas palestras online totalmente gratuitas sobre BI e temas relacionados. O tema da minha apresentação foi "Otimizando Bancos de Dados OLAP" e ela abordou os seguintes tópicos:
- O que é Tuning?;
- Objetivos do Tuning;
- Características de BDs OLTP X OLAP;
- 10 dicas essenciais para otimizar BDs OLAP.
30 de abr. de 2014
Entendendo as visões de performance dinâmicas
Olá pessoal,
No artigo de hoje vou comentar sobre as visões de performance dinâmicas do Oracle Database e como elas podem nos ajudar no trabalho de Performance Diagnostics and Tuning (ou somente Performance Tuning, como eu prefiro chamar). Conforme comentado no artigo O que é Tuning?, as consultas às visões de performance dinâmicas são um dos bons métodos atuais possíveis para encontrar problemas de performance no BD (Banco de Dados) Oracle.
11 de abr. de 2014
O que é Tuning?
Olá pessoal,
No artigo de hoje vou comentar sobre o que é Tuning e como "tunar" em um Banco de Dados Oracle, passando alguns conceitos básicos e uma visão geral sobre o assunto. Tuning é um termo que desperta um interesse cada vez maior nos profissionais de TI, devido aos fatos que estão descritos abaixo:
27 de mar. de 2014
Otimizando Bancos de Dados Oracle com Database Smart Flash Cache
•
Olá pessoal,
Olá pessoal,
Hoje vou comentar sobre um recurso muito bom que surgiu no Oracle Database 11GR2 e que chama-se Database Smart Flash Cache (DSFC). Ele serve para otimizar a performance de um Banco de Dados (BD) quando a memória RAM disponível no Servidor é insuficiente para atender a demanda da Buffer Cache, criando uma nova área de memória chamada Flash Cache, que ao invés de armazenar seus dados em memória RAM, armazena-os em disco(s) SSD (Solid State Disk).
12 de mar. de 2014
Otimizando Oracle Database com HugePages
Olá pessoal,
No artigo de hoje vou comentar sobre um recurso chamado HugePages, que permite, de um modo geral, alocar maior quantidade de dados em páginas de dados do Sistema Operacional (SO), economizar CPU (ao ler mais dados por páginas), e desse modo, otimizar o desempenho de um Banco de Dados Oracle, em SO Linux. É importante ressaltar que HugePages não funciona em SO Windows, mas é possível habilitar por lá um recurso similar de Large Pages.
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).
27 de jun. de 2013
Entendendo o SQL Performance Analyzer
Olá pessoal,
- Upgrades ou alterações na configuração de hardware, SO ou BD;
- Alterações nos parâmetros de inicialização do BD;
- Alterações de schema, tais como: criação de índices, tabelas particionadas e visões materializadas;
- Atualizações de estatísticas do otimizador;
- A criação ou alterações de SQL profiles.
Conforme prometido no artigo Obtendo a Certificação Oracle Database 11g: Performance Tuning, vou apresentar hoje o SQL Performance Analyzer (SQLPA), uma ótima ferramenta para analisar de forma rápida e eficiente, o impacto de mudanças que ocorreram no Banco de Dados (BD). Entre as principais mudanças que podemos analisar com o SQLPA, podemos citar:
- Alterações nos parâmetros de inicialização do BD;
- Alterações de schema, tais como: criação de índices, tabelas particionadas e visões materializadas;
- Atualizações de estatísticas do otimizador;
- A criação ou alterações de SQL profiles.
6 de jun. de 2013
Os 10 erros mais comuns encontrados em Bancos de Dados Oracle
Olá pessoal,
No artigo de hoje vou comentar sobre os 10 erros mais comuns encontrados em Bancos de Dados (BDs) Oracle, que impactam negativamente na performance dos BDs e que poderiam ser evitados implementando-se algumas dicas que darei a seguir. Várias dessas dicas (ver Solução(ões) possível(is)) podem ser implementadas sem muito esforço, porém, outras podem requerer uma reengenharia completa da aplicação ou uma análise mais aprofundada sobre o problema para definir um diagnóstico e soluções melhores.
26 de mar. de 2013
Gerando AWR Report mensal automaticamente
Olá pessoal,
-- Execute o script abaixo para criar a procedure SP_GERAR_AWRREPORT_MENSAL
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'JOB_GERA_AWR_REPORT_MENSAL',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_ACTION =>'BEGIN SP_GERAR_AWRREPORT_MENSAL; END;',
START_DATE => SYSTIMESTAMP,
repeat_interval => 'FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;BYHOUR=7',
ENABLED => TRUE,
COMMENTS => 'Job para gerar relatórios AWR mensais.');
END;
Bom pessoal, agora é só testar! Qualquer dúvida ou problema, deixe um comentário.
No artigo de hoje vou compartilhar um procedimento que criei há pouco mais de 1 mês atrás para gerar automaticamente AWR Reports (ver Imagem 01). A idéia de criar este procedimento surgiu em uma aula do treinamento Performance Tuning Oracle Database 10G/11G, depois que uma aluna citou que na empresa em que ela trabalhava, ela tinha que gerar e guardar AWR Reports mensais de cada instância que ela administrava. Até o presente momento eu costumava gerar apenas relatórios semanais e depois dessa aula achei interessante a idéia de também gerar relatórios mensais e poder acompanhar o desempenho mensal dos BDs que eu administro.
Para agilizar meu trabalho e garantir que eu gere sempre de forma sistemática e organizada estes relatórios, ao invés de gerá-los manualmente, percebi que dava para automatizar esta tarefa criando apenas 3 objetos no BD:
![]() |
| Imagem 01 - Exemplo de parte de um AWR Report |
Para agilizar meu trabalho e garantir que eu gere sempre de forma sistemática e organizada estes relatórios, ao invés de gerá-los manualmente, percebi que dava para automatizar esta tarefa criando apenas 3 objetos no BD:
1- Uma Stored Procedure com o código para o gerar o relatório e enviá-lo por e-mail;
2- Uma Function com o código para transformar em CLOB o resultado de uma SP chamada AWR_REPORT_TEXT que eu utilizo para gerar o relatório. A transformação do relatório em CLOB é necessária para possibilitar o envio de e-mail do relatório, pois a SP que gera o e-mail, que eu havia desenvolvido anteriormente, só aceita uma variável CLOB;
3- Um Scheduler Job para executar a SP às 7h do 1º dia de cada mês.
Gerar os relatórios mensais manualmente pode ser uma tarefa chata quando no período de um determinado mês a instância teve 1 ou mais shutdowns, pois o AWR só permite gerar relatórios que abrangem períodos do mesmo startup. Para contornar esta situação, o procedimento que irei apresentar gera/envia por e-mail, 1 relatório para cada startup que ocorreu dentro do mesmo mês, portanto se, por exemplo, ocorreu 1 shutdown no mês anterior, você irá receber 2 e-mails com 1 AWR Report cada.
Para aqueles que desejam implementar o procedimento de geração automática, é necessário instalar previamente a package PKG_ENVIA_EMAIL do artigo Enviando e-mails com PL/SQL em Bancos de Dados Oracle - Parte 2 e depois executar os scripts abaixo para criar a função FC_GERAR_CLOB e a stored procedure SP_GERAR_AWRREPORT_MENSAL, substituindo os valores destacados em vermelho, pelos valores desejados.
-- Atribua os grants necessários ao usuário que será o dono dos objetos:
grant execute on DBMS_WORKLOAD_REPOSITORY to usuario;
grant execute on utl_Mail to usuario;
grant select on v$database to usuario;
grant select on DBA_HIST_SNAPSHOT to usuario;
-- Execute o script abaixo para criar a função FC_GERAR_CLOB
CREATE OR REPLACE FUNCTION FC_GERAR_CLOB (P_SQL_DADOS IN VARCHAR2) RETURN CLOB
IS
CR SYS_REFCURSOR;
V_CR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
V_COLUMNVALUE VARCHAR2(32767);
V_STATUS INTEGER;
V_SAIDA CLOB;
V_TEMP_ROW VARCHAR2(32767);
V_TEMP_VALOR VARCHAR2(32767);
V_TEMP_AGREGADOR VARCHAR(32767):=' ';
V_TOTAL_COLUNAS NUMBER;
BEGIN
-- monta conteudo (dados) das colunas
OPEN CR FOR P_SQL_DADOS;
-- analisa a instrução SQL e cria o cursor
DBMS_SQL.PARSE(V_CR, P_SQL_DADOS, DBMS_SQL.NATIVE );
-- executa loop para verificar qtas colunas tem o cursor
FOR I IN 1 .. 255 LOOP
BEGIN
dbms_sql.define_column(V_CR, i, V_COLUMNVALUE, 32767 );
V_TOTAL_COLUNAS := i;
EXCEPTION
WHEN OTHERS THEN
IF ( SQLCODE = -1007 ) THEN
EXIT;
else
RAISE;
end if;
END;
END LOOP;
-- posiciona o cursor na primeira coluna
DBMS_SQL.DEFINE_COLUMN( V_CR, 1, V_COLUMNVALUE, 4000 );
-- executa cursor e verifica status de execucao
V_STATUS := DBMS_SQL.EXECUTE(V_CR);
-- percorre linhas
LOOP
-- sai do cursor qdo percorrer todas as linhas
EXIT WHEN ( DBMS_SQL.FETCH_ROWS(V_CR) <= 0 );
-- inicializa var para armazenar valor da linha atual do loop
V_TEMP_ROW := '';
-- percorre colunas
FOR I IN 1 .. V_TOTAL_COLUNAS LOOP
-- recupera valor da coluna atual
DBMS_SQL.COLUMN_VALUE(V_CR, I, V_COLUMNVALUE);
V_TEMP_ROW := V_TEMP_ROW || V_COLUMNVALUE;
end loop;
--- acrescenta linha na var que irá conter o relatorio completo
V_SAIDA := V_SAIDA || TO_CLOB(V_TEMP_ROW || UTL_TCP.CRLF);
END LOOP;
RETURN V_SAIDA;
END FC_GERAR_CLOB;
Gerar os relatórios mensais manualmente pode ser uma tarefa chata quando no período de um determinado mês a instância teve 1 ou mais shutdowns, pois o AWR só permite gerar relatórios que abrangem períodos do mesmo startup. Para contornar esta situação, o procedimento que irei apresentar gera/envia por e-mail, 1 relatório para cada startup que ocorreu dentro do mesmo mês, portanto se, por exemplo, ocorreu 1 shutdown no mês anterior, você irá receber 2 e-mails com 1 AWR Report cada.
Para aqueles que desejam implementar o procedimento de geração automática, é necessário instalar previamente a package PKG_ENVIA_EMAIL do artigo Enviando e-mails com PL/SQL em Bancos de Dados Oracle - Parte 2 e depois executar os scripts abaixo para criar a função FC_GERAR_CLOB e a stored procedure SP_GERAR_AWRREPORT_MENSAL, substituindo os valores destacados em vermelho, pelos valores desejados.
-- Atribua os grants necessários ao usuário que será o dono dos objetos:
grant execute on DBMS_WORKLOAD_REPOSITORY to usuario;
grant execute on utl_Mail to usuario;
grant select on v$database to usuario;
grant select on DBA_HIST_SNAPSHOT to usuario;
-- Execute o script abaixo para criar a função FC_GERAR_CLOB
CREATE OR REPLACE FUNCTION FC_GERAR_CLOB (P_SQL_DADOS IN VARCHAR2) RETURN CLOB
IS
CR SYS_REFCURSOR;
V_CR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
V_COLUMNVALUE VARCHAR2(32767);
V_STATUS INTEGER;
V_SAIDA CLOB;
V_TEMP_ROW VARCHAR2(32767);
V_TEMP_VALOR VARCHAR2(32767);
V_TEMP_AGREGADOR VARCHAR(32767):=' ';
V_TOTAL_COLUNAS NUMBER;
BEGIN
-- monta conteudo (dados) das colunas
OPEN CR FOR P_SQL_DADOS;
-- analisa a instrução SQL e cria o cursor
DBMS_SQL.PARSE(V_CR, P_SQL_DADOS, DBMS_SQL.NATIVE );
-- executa loop para verificar qtas colunas tem o cursor
FOR I IN 1 .. 255 LOOP
BEGIN
dbms_sql.define_column(V_CR, i, V_COLUMNVALUE, 32767 );
V_TOTAL_COLUNAS := i;
EXCEPTION
WHEN OTHERS THEN
IF ( SQLCODE = -1007 ) THEN
EXIT;
else
RAISE;
end if;
END;
END LOOP;
-- posiciona o cursor na primeira coluna
DBMS_SQL.DEFINE_COLUMN( V_CR, 1, V_COLUMNVALUE, 4000 );
-- executa cursor e verifica status de execucao
V_STATUS := DBMS_SQL.EXECUTE(V_CR);
-- percorre linhas
LOOP
-- sai do cursor qdo percorrer todas as linhas
EXIT WHEN ( DBMS_SQL.FETCH_ROWS(V_CR) <= 0 );
-- inicializa var para armazenar valor da linha atual do loop
V_TEMP_ROW := '';
-- percorre colunas
FOR I IN 1 .. V_TOTAL_COLUNAS LOOP
-- recupera valor da coluna atual
DBMS_SQL.COLUMN_VALUE(V_CR, I, V_COLUMNVALUE);
V_TEMP_ROW := V_TEMP_ROW || V_COLUMNVALUE;
end loop;
--- acrescenta linha na var que irá conter o relatorio completo
V_SAIDA := V_SAIDA || TO_CLOB(V_TEMP_ROW || UTL_TCP.CRLF);
END LOOP;
RETURN V_SAIDA;
END FC_GERAR_CLOB;
-- Execute o script abaixo para criar a procedure SP_GERAR_AWRREPORT_MENSAL
CREATE OR REPLACE PROCEDURE SP_GERAR_AWRREPORT_MENSAL
IS
V_DBID NUMBER;
V_DADOS CLOB;
V_DBNAME VARCHAR2(8);
V_COUNT NUMBER := 0;
V_PERIODO_FORMATADO VARCHAR2(10) := TO_CHAR(ADD_MONTHS(SYSDATE, -1),
'MM/YYYY');
'MM/YYYY');
V_PERIODO_NUMEROS NUMBER := TO_NUMBER(TO_CHAR(ADD_MONTHS(SYSDATE, -1),
'YYYYMM'));
'YYYYMM'));
BEGIN
/* ******************************************************************************
SP_GERAR_AWRREPORT_MENSAL
/* ******************************************************************************
SP_GERAR_AWRREPORT_MENSAL
******************************************************************************
Autor.: Fábio Prado
Data..: 05/02/2013
Objetivo: Procedure para ser executada mensalmente, gerar relatórios do AWR e mandar para os DBAs. Como no AWR não é possível gerar relatórios que foram tirados em startups diferentes, o procedimento gera 1 relatório para cada startup que ocorrer no mês.
****************************************************************************** */
-- recupera dbid e database name
SELECT DBID, NAME INTO V_DBID, V_DBNAME
FROM V$DATABASE;
-- Percorre registros de snapshots gerados por startup do Bd no mês anterior
FOR LINHA IN ( SELECT min(SNAP_ID) as bid,
max(snap_id) as eid, startup_time
max(snap_id) as eid, startup_time
FROM DBA_HIST_SNAPSHOT
WHERE TO_CHAR(BEGIN_INTERVAL_TIME,'YYYYMM') =
TO_CHAR(V_PERIODO_NUMEROS)
TO_CHAR(V_PERIODO_NUMEROS)
GROUP BY startup_time
ORDER BY 1)
LOOP
-- incrementa contador de relatórios
V_COUNT := V_COUNT + 1;
-- gera awr report em formato texto e grava em var CLOB
V_DADOS := FC_GERAR_CLOB('select * from
table(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(' || V_DBID
|| ', 1, ' || LINHA.bid || ',' || LINHA.eid || '))');
V_DADOS := FC_GERAR_CLOB('select * from
table(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(' || V_DBID
|| ', 1, ' || LINHA.bid || ',' || LINHA.eid || '))');
-- envia e-mail com relatório awr report
PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL_COM_ANEXO (
P_ASSUNTO => 'AWR Report (' || 'BD ' || V_DBNAME || ') mensal de '
|| V_PERIODO_FORMATADO || ' - Report ' || v_count,
P_ASSUNTO => 'AWR Report (' || 'BD ' || V_DBNAME || ') mensal de '
|| V_PERIODO_FORMATADO || ' - Report ' || v_count,
P_MSG => 'Relatório AWR mensal de ' || V_PERIODO_FORMATADO ||
utl_tcp.CRLF || 'Report ' || V_COUNT,
P_EMAIL_ORIGEM => 'email@origem.com',
utl_tcp.CRLF || 'Report ' || V_COUNT,
P_EMAIL_ORIGEM => 'email@origem.com',
P_EMAIL_DESTINO => 'email@destino.com',
P_EMAIL_CC_DESTINO => null,
P_EMAIL_CCO_DESTINO => null,
P_FILENAME => 'awrreport_' || V_PERIODO_NUMEROS || '_' || v_count
|| '.txt',
P_EMAIL_CC_DESTINO => null,
P_EMAIL_CCO_DESTINO => null,
P_FILENAME => 'awrreport_' || V_PERIODO_NUMEROS || '_' || v_count
|| '.txt',
P_ANEXO => V_DADOS);
END LOOP;
END SP_GERAR_AWRREPORT_MENSAL;
Depois de criar a SP SP_GERAR_AWRREPORT_MENSAL, execute conectado como usuário dono dessa SP, o script abaixo para criar um Scheduler Job e possibilitar a geração mensal do AWR Report:
Depois de criar a SP SP_GERAR_AWRREPORT_MENSAL, execute conectado como usuário dono dessa SP, o script abaixo para criar um Scheduler Job e possibilitar a geração mensal do AWR Report:
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'JOB_GERA_AWR_REPORT_MENSAL',
JOB_TYPE => 'PLSQL_BLOCK',
JOB_ACTION =>'BEGIN SP_GERAR_AWRREPORT_MENSAL; END;',
START_DATE => SYSTIMESTAMP,
repeat_interval => 'FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=1;BYHOUR=7',
ENABLED => TRUE,
COMMENTS => 'Job para gerar relatórios AWR mensais.');
END;
Bom pessoal, agora é só testar! Qualquer dúvida ou problema, deixe um comentário.
Se você quiser aprender mais sobre AWR Reports,
consulte o treinamento Database Performance Tuning
[]s
8 de mar. de 2013
Paralelismo automático no Oracle Database 11G - Parte 2
Olá pessoal,
Dando continuidade ao artigo Paralelismo automático no Oracle Database 11G - Parte 1, irei demonstrar abaixo como configurar Automatic DOP (ver Imagem 01) no modo AUTO e também aproveitarei para comentar sobre outros parâmetros de configuração deste poderoso recurso.
20 de fev. de 2013
Paralelismo automático no Oracle Database 11G - Parte 1
Olá pessoal,
No artigo de hoje vou comentar sobre um recurso que evolui bastante e que na minha opinião ficou muito bom no Oracle Database 11G: o uso de paralelismo automático no nível de instância ou sessão.
24 de jan. de 2013
Auditoria X Performance no Oracle Database
Olá pessoal,
No artigo de hoje vou apresentar um assunto que faz parte do treinamento Database Performance Tuning (voltado principalmente para DBAs que precisam diagnosticar e resolver problemas de performance), onde vou falar sobre Auditoria e seus benefícios e desvantagens, com relação à performance do BD.
Para aqueles que são leigos no assunto, os recursos de auditoria em BD permitem registrar o que um ou mais usuários estão fazendo dentro do BD. É possível auditar qualquer operação ou instrução SQL de um ou mais usuários. É possível registrar, por exemplo, se um usuário fez LOGON ou LOGOFF, se ele apagou uma tabela ou se ele executou um SELECT em determinada tabela. Auditoria é um recurso poderoso que permite verificarmos o que está acontecendo dentro do BD. Se um registro importante some de uma tabela e ninguém sabe quem apagou ou ninguém quer se responsabilizar por essa perda, podemos saber exatamente quem apagou o registro, que instrução SQL foi executada e quando ele foi apagado. Em muitas empresas e sistemas, manter estes registros de auditoria é essencial para o negócio. Empresas que possuem ações na Bolsa de Nova York, por exemplo, precisam se adequar à lei Sarbanes Oxley (SOX), e um dos requisitos necessários para isso, é auditar grande parte dos sistemas. O Grupo Pão de Açúcar, uma empresa em que eu trabalhei, tem que cumprir as exigências da SOX e por isso precisava auditar a maior parte dos sistemas, principalmente aqueles que envolvem operações financeiras.
No Oracle Database, atualmente existem 3 formas de auditar o BD:
- Auditoria Padrão:
Esse tipo de auditoria é o mais simples de usar e vem já habilitado por padrão no Oracle 11G, quando ele é instalado a partir do DBCA (Database Creator Assistant). Os registros de auditoria podem ser gravados em uma tabela do BD (AUD$), em um arquivo do SO ou em arquivo XML. Como não é o objetivo deste artigo explicar como usá-la, sugiro a leitura do artigo COMO AUDITAR E GERAR RELATÓRIOS DE AUDITORIA EM ORACLE DATABASES para aqueles que quiserem obter mais detalhes sobre o assunto;
- FGA (Fine Grained Auditing):
Esse tipo de auditoria possibilita refinar a auditoria do BD, permitindo filtrar o que a gente precisa auditar, baseando-se por exemplo, em colunas ou filtros de uma instrução SQL;
Esse tipo de auditoria é totalmente criado e gerenciado por um desenvolvedor ou DBA. É o tipo de auditoria mais flexível e que também precisa de maior esforço para criar e gerenciar. A sua criação é feita através de triggers que são disparadas em eventos diversos, tais como, depois da execução de uma instrução INSERT em uma determinada tabela, e que inserem registros em tabelas de auditoria, também criadas pelo próprio desenvolvedor ou DBA.
Agora vamos à parte principal deste artigo: Evite auditar objetos do BD ou operações desnecessárias. Audite somente o que for necessário pelo tempo necessário, pois ela gera consumo adicional de CPU e I/O, e consequentemente degrada a performance do BD. Testes de auditoria padrão publicados no White Paper "Oracle Database Auditing: Performance Guidelines" em 08/2010, realizados em um BD Oracle 11GR2, gerando aproximadamente 250 registros de auditoria por segundo, usando 50% da CPU antes de habilitar a auditoria, demonstraram os seguintes resultados (ver tabela abaixo):
![]() |
| Fonte: Oracle Corporation |
Obs.: A Oracle recomenda que você mova as tabelas de auditoria para tablespaces exclusivos, ao invés de mantê-los na localização padrão, que está dentro do tablespace SYSTEM. Mostro em detalhes como fazer isso no treinamento Database Performance Tuning.
CONCLUSÃO
De acordo com os testes realizados pela Oracle, ao habilitar a auditoria padrão do Oracle com gravação em uma tabela do BD (Audit Trail Setting = DB), tivemos uma degradação de 4,57% de I/O e 8,77% no consumo de CPU. Se for habilitado o modo de gravação extendido (Audit Trail Setting = DB_EXTENDED no 11G), o desempenho fica ainda pior. O consumo de I/O aumentou quase 3X e o consumo de CPU quase dobrou. Se você prioriza performance e precisa realmente habilitar auditoria, considere o uso da auditoria padrão com gravação em arquivos do SO (Audit Trail Setting = OS), pois esta configuração é a mais leve, adicionando um sobrecarga média de apenas 1,39% de I/O e 1,75% de CPU.
Bom pessoal, por hoje é só! Espero que tenham gostado e que o artigo seja útil.
[]s
Assinar:
Postagens (Atom)

