Privacidade & Cookies
Este site utiliza cookies. Ao Continuar, você concorda com o uso deles. Saiba mais, incluindo como controlar cookies.
este artigo faz parte da série Oracle Performance Tuning e foi criado para descrever o mecanismo de bloqueio da Oracle.
um bloqueio é um recurso que você precisa segurar para obter acesso ao recurso. A Oracle tem dois tipos de bloqueios: enqueues e travas, agora nos concentraríamos nesses mecanismos de bloqueio individualmente.
Enqueues
Enqueues são bloqueios sofisticados para gerenciar o acesso a recursos compartilhados (como tabelas, linhas, trabalhos, refazer threads). Um enqueue pode ser solicitado em diferentes níveis / Modo:
- Null
- Linha compartilhe
- Linha exclusiva
- Compartilhe
- Partilhar linha exclusiva
- Exclusivo
Se uma sessão possui um enqueue em modo de compartilhamento, outras sessões, em seguida, pode também levar a enfileirar no modo de compartilhamento (para o mesmo recurso). Se uma sessão contém um enqueue no modo exclusivo, outras sessões que querem obtê – lo-independentemente em qual nível-eles têm que esperar.
quando o acesso é exigido por uma sessão, uma estrutura de bloqueio é obtida e uma solicitação é feita para adquirir acesso ao recurso em um nível específico (modo). O bloqueio estrutura é colocada em uma das três listas ligadas que desligar o recurso, chamado de PROPRIETÁRIO (se o enqueue poderia ser adquirido), GARÇOM (se a sessão está esperando para adquirir o enqueue) e CONVERSOR (a sessão está segurando a enfileirar-se em um nível, mas que deseja converter para outro) listas.
a seguir estão alguns tipos comuns de enqueues:-
- TM – toda vez que uma sessão deseja bloquear uma tabela, um TM enqueue é solicitado. Se uma sessão excluir uma linha na tabela pai e uma restrição referencial (chave estrangeira) for criada sem um índice na tabela filho ou se a sessão estiver atualizando as colunas às quais a chave estrangeira faz referência, um bloqueio de compartilhamento será feito na tabela filho. Se outra sessão tentar fazer alterações na tabela filho, eles terão que esperar (porque desejam o modo exclusivo enqueue in row, e isso não é compatível com o modo de compartilhamento).
- TX-assim que uma transação é iniciada, um enqueue TX é necessário. Uma transação é definida exclusivamente pelo número do segmento de reversão, O número do slot na tabela de transações do segmento de reversão e o número da sequência do número do slot. Uma sessão pode estar esperando um TX enqueue por várias razões:
- Outra sessão está bloqueando a linha solicitada
- Quando duas sessões tenta inserir a mesma chave em uma tabela (nenhum deles tem feito um COMMIT), em seguida, a última sessão está aguardando o primeiro a COMMIT ou ROLLBACK.
- não há ITL gratuito (Lista de Transações interessadas) no cabeçalho do bloco.
- UL-uma sessão travou com o DBMS_LOCK.Função de solicitação.
travas
travas fornecem um mecanismo de serialização de baixo nível protegendo estruturas de dados compartilhadas no SGA. Uma trava é um tipo de trava que pode ser adquirida e liberada muito rapidamente. As travas são normalmente usadas para impedir que mais de um processo execute o mesmo código em um determinado momento. Quando uma trava é adquirida, ela é adquirida em um nível específico para evitar deadlocks. Uma vez que um processo adquire uma trava em um determinado nível, ele não pode posteriormente adquirir uma trava em um nível igual ou inferior a esse nível (a menos que a adquira nowait). Associado a cada trava é um procedimento de limpeza que será chamado se um processo morrer enquanto segura a trava. Esta limpeza é feita usando os serviços da PMON. A implementação subjacente de travas depende do sistema operacional, particularmente no que diz respeito a se um processo aguardará uma trava e por quanto tempo.
o objetivo das travas é gerenciar o acesso simultâneo a estruturas de dados compartilhadas, de modo que apenas um processo possa acessar a estrutura por vez. Processos bloqueados (processos aguardando para executar uma parte do código para o qual uma trava já foi obtida por algum outro processo) aguardarão até que a trava seja liberada. A Oracle usa instruções atômicas como” test and set ” para operar em travas. Como as instruções para definir e as travas livres são atômicas, o sistema operacional garante que apenas um processo o obtenha e, como é apenas uma única instrução, é bastante rápido.
as solicitações de trava podem ser feitas em dois modos:
- disposto a esperar: uma solicitação de modo “disposto a esperar” fará um loop, esperará e solicitará novamente até que a trava seja obtida.
- sem espera: no modo “sem espera”, o processo solicitará a trava e, se não estiver disponível, em vez de esperar, outro será solicitado. Somente quando tudo falhar, o processo do servidor terá que esperar.
diferença entre travas& Enqueues
uma diferença entre uma trava e uma enqueue é que a enqueue é obtida usando um mecanismo de travamento específico do sistema operacional, enquanto uma trava é obtida independentemente do sistema operacional. Um enqueue permite ao usuário armazenar um valor no bloqueio (ou seja, o modo em que estamos solicitando). O Gerenciador de bloqueio do sistema operacional mantém o controle dos recursos bloqueados. Se um processo não puder ser concedido ao bloqueio porque é incompatível com o modo solicitado e o bloqueio for solicitado com espera, o sistema operacional coloca o processo de solicitação em uma fila de espera que é atendida no FIFO.
outra diferença entre travas e enqueues é que enqueues manter e ordenou fila de garçons enquanto travas não. Todos os processos que aguardam uma trava simultaneamente tentam novamente (dependendo do agendador). Isso significa que qualquer um dos garçons pode pegar a trava e, possivelmente, o primeiro a tentar obter a trava pode ser o último a realmente obtê-la. Os garçons Latch podem usar temporizadores para despertar e tentar novamente ou podem girar (apenas em multiprocessadores) girando em uma trava significa segurar a CPU e esperar em antecipação a que a trava seja liberada em um curto espaço de tempo).