Pergunta

Eu tenho um Kimball estilo DW (fatos e dimensões em estrela modelos - não tem o final-de chegar fatos linhas ou colunas, não há colunas de mudança nas dimensões de validade, exceto como parte de Tipo 2, mudando lentamente dimensões) com carga de processamento diário para atualização e inserção de linhas (novas datas) e mensal e emissão de relatórios diários dos processos.O fato de as tabelas são particionadas por datas para fácil rolloff de dados antigos.

Eu entendo o WITH(NOLOCK) pode causar dados não consolidados para ser lido, no entanto, eu também não pretende criar qualquer bloqueios que poderia causar a processos ETL para falhar ou bloquear.

Em todos os casos, quando estamos a ler a partir do DW, estamos lendo a partir de tabelas de fatos para uma data que não vai mudar (o fato de as tabelas são particionadas por data) e tabelas de dimensão que não têm atributos de alterar os fatos, eles estão ligados.

Assim se há alguma desvantagem?- talvez na execução de planos ou na operação de tais SELECTconsultas somente a execução em paralelo de desligar-se as mesmas tabelas.

Foi útil?

Solução

Enquanto não houver dados de atualização, não há mal, mas ficaria surpreso se houver muito benefício. Eu diria que vale a pena tentar. O pior que acontecerá é que você ficará incompleto e/ou de dados inconsistentes se estiver no meio de uma inserção de lote, mas pode decidir se isso invalida algo útil.

Outras dicas

Isso é o que você provavelmente precisará de:

`ALTER do BANCO de dados AdventureWorks CONJUNTO READ_COMMITTED_SNAPSHOT ON;

ALTER do BANCO de dados AdventureWorks CONJUNTO ALLOW_SNAPSHOT_ISOLATION EM;`

Em seguida, vá em frente e use

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

em suas consultas.De acordo com o BOL:

O comportamento de confirmação de LEITURA depende da configuração do banco de dados READ_COMMITTED_SNAPSHOT opção:

Se READ_COMMITTED_SNAPSHOT está definido para OFF (o padrão), o Mecanismo de Banco de dados usa bloqueios compartilhados para evitar que outras operações de modificação de linhas, enquanto a transação atual é a execução de uma operação de leitura.Os bloqueios compartilhados também bloquear a instrução de leitura de linhas modificadas por outras transações até que a transação seja concluída.O bloqueio partilhado tipo determina quando será lançado.Linha de bloqueios são liberados antes que a próxima linha é processada.Página bloqueios são liberados quando a próxima página é lida, e a tabela de bloqueios são liberados quando termina a instrução.

Se READ_COMMITTED_SNAPSHOT está definido para ligado, o Motor de base de Dados utiliza a versão de linha para apresentar cada demonstração com um transacional consistente instantâneo dos dados tal como existia no início da instrução.Os bloqueios não são usados para proteger os dados de atualizações por outras transações.

Espero que isso ajude.Raj

Você já pensou em criar um Snapshot do banco de dados do seu DW e execute seus relatórios?

Sim. Seu SQL será muito menos legível. Você inevitavelmente perderá algumas dicas de Nolock porque os comandos SQL Select usando a estratégia Nolock precisam colocá -la em todo o lugar.

Você pode obter a mesma coisa definindo o nível de isolamento

Definir nível de isolamento de transação lido não comprometido

No final, você recebe um aumento de 10% (desculpe, eu também é preguiçoso, procure o artigo, mas está lá fora)

Eu diria que um ganho de 10% não vale a pena reduzir a legibilidade.

Se fazer com que todo o banco de dados somente leitura seja possível, essa é uma opção melhor. Você receberá o desempenho de leitura-atraso sem precisar modificar todo o seu código.

ALTER DATABASE adventureworks SET read_only

Nolock executa uma 'leitura suja' (lida indecentemente não comprometida faz a mesma coisa que Nolock). Se o banco de dados estiver sendo atualizado ao ler, existe o perigo de que você receberá dados inconsistentes. A única opção é aceitar o bloqueio e, portanto, bloquear, ou escolher um dos dois novos níveis de isolamento oferecidos no SQL 2005 em diante discutido aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top