Você está aqui: Página Inicial Artigos Kankei DBM Executando pesquisas com NOLOCK

Executando pesquisas com NOLOCK

Bancos de dados como o Microsoft SQL Server possuem um recurso conhecido como NOLOCK, que permite executar consultas ao banco de dados sem bloquear as tabelas. Saiba como utilizar este recurso nas pesquisas do Kankei.

No desenvolvimento de aplicações que requerem boa performance, existem diversos recursos que podem auxiliar o desenvolvedor a atingir sua meta de desempenho. Uma destas ferramentas é a cláusula NOLOCK.

Esta cláusula possui duas características que devem ser muito bem analisadas:

1) permite executar uma instrução SQL sem causar o bloqueio da tabela que está sendo lida;

2) permite ler dados não comitados.

A primeira característica é uma ótima vantagem, muito útil em grande parte dos cenários. Já a segunda característica pode se tornar um grande problema, a menos que o desenvolvedor saiba muito bem o que está fazendo.

Para maiores detalhes sobre prós e contras do NOLOCK, leia este artigo.

-- Instrução SQL normal:
SELECT Codigo,Nome FROM Cliente ORDER BY Nome;

-- Instrução com NoLock (no Microsoft SQL Server):
SELECT Codigo,Nome FROM Cliente WITH(NOLOCK) ORDER BY Nome;

NOLOCK é definido por tabela, assim, se a instrução SQL faz referência a duas ou mais tabelas (como em uma operação JOIN, ou em instruções aninhadas) a cláusula precisa ser definida para cada uma das tabelas. Isso permite utilizar o NOLOCK apenas nas tabelas necessárias.

Para auxiliar o desenvolvimento de sistemas robustos usando a API de acesso a dados do Kankei, a partir do build 114 estamos disponibilizando no objeto ckoPesquisa uma propriedade que possibilita incluir a cláusula NOLOCK na instrução SQL executada pela pesquisa.

Por medidas de segurança, as opções de NOLOCK da pesquisa só podem ser utilizadas ao se executar a pesquisa programaticamente (não há opção na interface de criação de pesquisas do Kankei para se definir NOLOCK).

Segue exemplo:

// Cria a pesquisa da forma tradicional
var p = K.BD.NovaPesquisa('dimCliente');
p.Listar('cli-Nome', _
         'cli-Endereco', _
         'cli-Cidade\cid-Nome', _
         'cli-Cidate\cid-Estado\est-Sigla')

// Inclui NOLOCK apenas para a tabela de cidades
p.ExecuçãoOpções.NoLockDimensions.Add('dimCidade');

// Executa a pesquisa da forma tradicional
var rs = p.Executar();

Você pode incluir WITH(NOLOCK) para múltiplas dimensões, bastando repetir a instrução Add():

// Usa NOLOCK nas tabelas de Cidades e de Estados
p.ExecuçãoOpções.NoLockDimensions.Add('dimCidade');
p.ExecuçãoOpções.NoLockDimensions.Add('dimEstado');

Se você quiser usar WITH(NOLOCK) em TODAS as dimensões referenciadas na pesquisa, utilize o caracter '*'. Apesar disso simplificar a codificação, o uso desta feature não é recomendado, pois o código pode passar por alguma manutenção onde a pesquisa passe a referenciar outras tabelas

// Usar NOLOCK em TODAS as tabelas da pesquisa
p.ExecuçãoOpções.NoLockDimensions.Add('*');

 

Ações do documento
« Fevereiro 2012 »
Fevereiro
SeTeQuQuSeSaDo
12345
6789101112
13141516171819
20212223242526
272829
Acessar


Esqueceu sua senha?