Você está na página 1de 10

TUNING

TOLI

Cliente: Toli
Data da Emissão: 14/05/2021

Data da alteração:
Responsável: Christian Dênis Dalzochio | christian@dbcore.com.br
Marco Aurélio Boff| marco@dbcore.com.br
(54) 3222-0074
Responsável Cliente: Gilberto Santin| gilberto.santin@tolidistribuidora.com.br
(54) 3444-3500
Sumário
Escopo..........................................................................................................................................3
Programas....................................................................................................................................3
SQL...............................................................................................................................................3
Texto........................................................................................................................................3
Horários de execução...............................................................................................................3
Histórico de Execuções e Tempo..............................................................................................4
Tempo total no mês.................................................................................................................4
Número de execuções no mês.................................................................................................5
Tempo médio no mês...............................................................................................................5
Plano de Execução....................................................................................................................5
Planos base..............................................................................................................................6
SQL Profiles..............................................................................................................................6
SQL Tuning Advisor...................................................................................................................7
Otimização...................................................................................................................................8
Ganhos.......................................................................................................................................10
Conclusão...................................................................................................................................10

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
Escopo
Analisar o SQL ID 9npbbbv94su73 executado por diversas rotinas do Extrator Palms em virtude
de ser um grande consumidor de recursos do banco de dados.

Programas
select distinct module,action,machine from dba_hist_active_sess_history where sql_id in
('9npbbbv94su73');

SQL
Texto
select * from dba_hist_sqltext where sql_id='9npbbbv94su73';

SELECT /*+ CURSOR_SHARING_EXACT */


lpad(e.cnpj, 14, '0') cnpj,
x.chave_acesso_nfel chave_acesso,
x.id id
FROM
tnfx_xmls x,
tempresas e
WHERE
x.empr_id = e.id
AND x.download_sefaz = 'S'
AND x.situacao = 1
AND x.chave_acesso_nfel IS NOT NULL
AND nvl(x.tipo, 'NFE') = 'NFE'
ORDER BY
x.cons_sefaz_inst DESC,
x.prioridade,
x.id

Horários de execução
select to_char(sample_time,'RRRRMMDD HH24') DATA_HORA from
dba_hist_active_sess_history where sql_id in ('9npbbbv94su73') group by
to_char(sample_time,'RRRRMMDD HH24') order by 1 desc;

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
Histórico de Execuções e Tempo
SELECT b.begin_interval_time,
b.end_interval_time,
TRUNC(a.elapsed_time_delta/1000000) tempo_segundos,
a.rows_processed_delta,
a.EXECUTIONS_DELTA,
TRUNC((a.elapsed_time_delta/1000000)/(case when a.EXECUTIONS_DELTA = 0 then 1 else
a.EXECUTIONS_DELTA end),2) tempo_medio_por_exec
FROM dba_hist_sqlstat a,
dba_hist_snapshot b
WHERE a.snap_id =b.snap_id
AND b.begin_interval_time > to_date('01/04/2021 00:00','DD/MM/RRRR HH24:MI')
AND sql_id IN ('9npbbbv94su73')
ORDER BY b.begin_interval_time desc;

Tempo total no mês


SELECT sum(a.elapsed_time_delta/1000000) tempo_segundos
FROM dba_hist_sqlstat a,
dba_hist_snapshot b
WHERE a.snap_id =b.snap_id
AND b.begin_interval_time between to_date('01/04/2021 00:00','DD/MM/RRRR HH24:MI')
and to_date('30/04/2021 23:59','DD/MM/RRRR HH24:MI')

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
AND sql_id IN ('9npbbbv94su73')
ORDER BY b.begin_interval_time;

Número de execuções no mês


select sum(x.EXECUTIONS_DELTA)
from DBA_HIST_SQLSTAT X, DBA_HIST_SNAPSHOT Y
where x.snap_id=y.snap_id and x.sql_id in ('9npbbbv94su73')
AND y.begin_interval_time between to_date('01/04/2021 00:00','DD/MM/RRRR HH24:MI')
and to_date('30/04/2021 23:59','DD/MM/RRRR HH24:MI')
order by x.snap_id;

Tempo médio no mês


SELECT sum(a.elapsed_time_delta/1000000) / sum(a.EXECUTIONS_DELTA)
FROM dba_hist_sqlstat a,
dba_hist_snapshot b
WHERE a.snap_id =b.snap_id
AND b.begin_interval_time between to_date('01/04/2021 00:00','DD/MM/RRRR HH24:MI')
and to_date('30/04/2021 23:59','DD/MM/RRRR HH24:MI')
AND sql_id IN ('9npbbbv94su73');

Plano de Execução
select * from table(dbms_xplan.display_cursor('9npbbbv94su73',1));

select * from table(dbms_xplan.display_awr('9npbbbv94su73'));

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
Planos base
SELECT sql_handle,
plan_name,ENABLED,ACCEPTED,FIXED,REPRODUCED,OPTIMIZER_COST,to_char(Created,'DD-
MON-YYYY HH24:MI:SS') Created,last_verified
FROM dba_sql_plan_baselines
WHERE signature IN ( SELECT exact_matching_signature FROM v$sql WHERE
sql_id='9npbbbv94su73')
order by accepted desc;

SQL Profiles
select p.name profile_name, p.created, p.task_exec_name,p.last_modified,p.status from
dba_sql_profiles p, dba_hist_sqlstat s where p.name=s.sql_profile and
s.sql_id='9npbbbv94su73';

Nenhum

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
SQL Tuning Advisor
select * from DBA_HIST_SNAPSHOT order by snap_id desc;

DECLARE
l_sql_tune_task_id VARCHAR2(100);
BEGIN
l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
begin_snap => 130788,
end_snap => 134571,
sql_id => '9npbbbv94su73',
scope => DBMS_SQLTUNE.scope_comprehensive,
time_limit => 600,
task_name => '9npbbbv94su73_tuning_task_awr',
description => 'Tuning task for statement 9npbbbv94su73.');
DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;
/

DECLARE
l_sql_tune_task_id VARCHAR2(100);
BEGIN
l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
sql_id => '9npbbbv94su73',
scope => DBMS_SQLTUNE.scope_comprehensive,
time_limit => 600,
task_name => '9npbbbv94su73_tuning_task',
description => 'Tuning task for statement 9npbbbv94su73.');
DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;
/

EXEC DBMS_SQLTUNE.execute_tuning_task(task_name => '9npbbbv94su73_tuning_task');

SELECT DBMS_SQLTUNE.report_tuning_task('9npbbbv94su73_tuning_task') AS
recommendations FROM dual;

Ver arquivo 9npbbbv94su73_tuning_task.txt.

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
Otimização
Com base na análise do plano de execução do SQL e do uso do STA, identificamos uma solução
de otimização para ele.

Atualmente ele vem fazendo um acesso full na tabela TNFX_XMLS, ponto onde o custo de
execução do SQL aumenta consideravelmente:

Através da análise dos filtros utilizados no SQL e da sugestão do STA, identificamos que o filtro
no campo DOWNLOAD_SEFAZ é um ponto ótimo para criação de um índice, pois o valor fixo ‘S’
representa uma minoria dos registros na tabela.

Número de registros na tabela:

Número de Registros ‘S’:

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
Os registros que se encaixam no filtro somam apenas 0,001% dos registros, ou seja, se torna
um filtro ótimo. Assim um índice no campo ("DOWNLOAD_SEFAZ") da tabela TNFX_XMLS
poderá resultar em um ótimo ganho.

Segue os testes com comparativo antes e depois da criação do índice na base de


desenvolvimento:

ATUAL:

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br
APÓS CRIAÇÃO DO ÍNDICE “create index FOCCO3I.DBA_AJUSTE_20210514_01 on
FOCCO3I.TNFX_XMLS("DOWNLOAD_SEFAZ")TABLESPACE F3I_INDEX;”

Ficou perceptível o ganho após a criação do índice no campo ("DOWNLOAD_SEFAZ"), pois


como explicado anteriormente ele é um ótimo filtro.

Ganhos
Ganho de 26 vezes, ou seja, uma redução de 21.673 segundos para 833 segundos no mês.

Conclusão
Recomendamos fortemente a criação de um índice do campo ("DOWNLOAD_SEFAZ") da
tabela FOCCO3I.TNFX_XMLS, pois nossos testes mostraram um ganho considerável no SQL
utilizando-o.

Exemplo:

create index FOCCO3I.DBA_AJUSTE_20210514_01 on


FOCCO3I.TNFX_XMLS("DOWNLOAD_SEFAZ") tablespace F3I_INDEX;

Rua Alfredo Chaves, 1208 – Sala 1701 – Exposição – Caxias do Sul/RS – CEP: 95020-460
(54) 3222 0074 (54) 3533 6155 | www.dbcore.com.br | comercial@dbcore.com.br

Você também pode gostar