Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Identificando a Contenção de Sequência de ASH no RAC


No Capítulo 3 do Oracle RAC Performance Tuning, mostrei como valores CACHE impróprios para sequências podem causar desempenho insatisfatório no Oracle RAC. Também mostrei como identificar a contenção de sequência ao analisar os eventos de espera de uma sessão.

Hoje, eu estava trabalhando com um desenvolvedor que estava criando uma nova sequência. O desenvolvedor tinha um valor CACHE de 100, o que me fez inicialmente coisa ser um valor muito baixo. Eu vi essa configuração baixa durante a revisão do código. O desenvolvedor acha que o valor CACHE está bom, mas não estou convencido. Vamos testar isso sob carga para ver se o valor CACHE precisa ser ajustado.

Enquanto isso, eu estava pensando “e se eu perdesse isso durante a revisão do código?” E uma pergunta complementar, “e se não notássemos nada durante o teste de carga?” Eu quero ser capaz de voltar e determinar quais sequências, se houver, seriam candidatas a ter uma configuração de CACHE imprópria. Eu certamente poderia rastrear sessões e analisar os arquivos de rastreamento, mas isso seria muito doloroso. Então, criei um script que posso executar no Active Session History para ajudar a determinar as sequências candidatas.


select sh.sql_id,to_char(st.sql_text),count(*)
from dba_hist_active_sess_history sh
join dba_hist_sqltext st
 on sh.sql_id=st.sql_id
where st.sql_text like '%NEXTVAL%'
 and (event='row cache lock' or event like 'gc current block %-way')
group by sh.sql_id,to_char(st.sql_text)
order by count(*) desc;



Esta não é uma ciência perfeita devido à natureza da coleta de ASH. A sessão com a contenção precisaria ser capturada no momento certo para estar na tabela DBA_HIST_ACTIVE_SESSION_HISTORY. Mas a instrução SQL acima me dá alguns candidatos para consideração. Nem toda sequência acessada nas instruções SQL retornadas precisa ter seus valores CACHE ajustados. Seria necessária uma análise mais aprofundada. No entanto, isso me dá uma lista dos que devem ser considerados. E pode ajudar a responder minhas perguntas iniciais. Se eu perdi a criação da sequência durante a revisão do código, espero encontrá-la mais tarde se a sequência for um problema para o desempenho do aplicativo.