Usuário com melhor resposta
Dead Lock em processamento de cubos/dimensões

Pergunta
-
Bom dia,
Tenho dois projetos publicados no SSISDB que são iguais. Eles processam cubos, dimensões e measures tendo como origem bases DW diferentes e como destino bases OLAP diferentes.
Agendei um job para executar esses pacotes no mesmo horário e percebi que um deles sempre dava erro (de maneira aleatória).
O erro é: Transaction errors: The lock operation ended unsuccessfully because of deadlock.
Executando em horários alternados, o erro não ocorre mais.
Alguém sabe me dizer o motivo disso? Sendo que tenho origens e destinos diferentes apesar os pacotes e cubos serem iguais?
Obrigada.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Respostas
-
Bom dia Durval,
Eu capturei e analisei o que estava ocorrendo no Analysis Services e nada justificou o dead lock.
O processamento em momentos separados ocorre normalmente. Então ajustei o job para executar um e depois de uma hora, executar o segundo e não tive mais problemas.
Sendo assim, o que devo fazer com o post? Deixo ele em aberto mesmo?
Obrigada.Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Marcado como Resposta Durval RamosModerator terça-feira, 6 de janeiro de 2015 12:42
Todas as Respostas
-
-
-
Mariana,
Você esta utilizando algum Hint Table em suas consultas?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
-
Junior,
Desculpe falta de conhecimento, mas não tem queries. O pacote usa apenas "Analysis Services Processing Task" das dimensões e cubos.
Eu coloquei a propriedade IsolationLevel de cada uma dessas tasks como ReadUncommitted.Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
Mariana,
Vc está utilizando o Integration Services Catalog certo? Se sim, veja no relatório de execução do pacote quais bases origens/destino o pacote está utilizando (Clique na opção Overview). Vc está utilizando parâmetros para setar o servidor/banco? Está utilizando também environments?
Veja também se existe outra aplicação ou rotina que está utilizando suas bases DW origem.
Abs.
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
-
Mariana,
Este problema pode estar relacionado à um bloqueio realizado na execução concorrente de dados de um cubo, em contextos de sessões diferentes (em mais de uma conexão).
Isto foi documentado no KB abaixo:
https://support.microsoft.com/kb/960562
As adequações para esta correção (no SQL Server 2005 ou 2008) estão indicadas neste KB.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Wyllian de Lima sexta-feira, 5 de dezembro de 2014 12:59
-
Junior,
Desculpe falta de conhecimento, mas não tem queries. O pacote usa apenas "Analysis Services Processing Task" das dimensões e cubos.
Eu coloquei a propriedade IsolationLevel de cada uma dessas tasks como ReadUncommitted.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Mariana,
Sem problemas, talvez eu tenho entendido errado do seu problema
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
-
Durval,
Se você observou a respostas da Mariana, ela disse que esta utilizando o IsolationLevel ReadUncommited em cada Task que esta em uso no pacote, acredito que isso é justamente o causador do problema.
Mesmo que ela esteja praticamente removendo a possibilidade de deadlock fazendo uso do ReadUncommited, entendo que alguma transação em "sleeping" ou "wait" possa estar presente devido a execuções passadas.
O que você acha?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
-
Mariana,
Vc está utilizando o Integration Services Catalog certo? Se sim, veja no relatório de execução do pacote quais bases origens/destino o pacote está utilizando (Clique na opção Overview). Vc está utilizando parâmetros para setar o servidor/banco? Está utilizando também environments?
Veja também se existe outra aplicação ou rotina que está utilizando suas bases DW origem.
Abs.
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
Eduardo, boa tarde
Sim, estou usando o Integration Services Catalog, porém sem enviroments.
Eu estou usando parâmetros para servidor, nome da base, usuário e senha.
Já chequei as bases de origem e estão corretas. Cada projeto aponta para um DW diferente.
E como é algo novo, garanto que não existe aplicação ou qualquer serviço que faça acesso as bases DW além do pacote que faz a carga diferencial (em momento diferente do processamento do cubo) e o próprio processamento.Obrigada.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
Durval,
Se você observou a respostas da Mariana, ela disse que esta utilizando o IsolationLevel ReadUncommited em cada Task que esta em uso no pacote, acredito que isso é justamente o causador do problema.
Mesmo que ela esteja praticamente removendo a possibilidade de deadlock fazendo uso do ReadUncommited, entendo que alguma transação em "sleeping" ou "wait" possa estar presente devido a execuções passadas.
O que você acha?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
Junior,
Você tem razão, o nível de isolamento de uma ou mais tarefas (ou mesmo um nível diferente relacionado ao pacote) podem afetar o processamento e gerar o confilto para ocorrer este "lock".
De qualquer forma, acompanhando as colaborações da Mariana na Comunidade eu acredito que ela já tenha feito este teste (não é Mariana?).
Mesmo não existindo outro cubo ou dimensão que utilizem estes dados simultâneamente, eu faria um teste reiniciando o serviço desta instância SQL (apenas como teste e em um horário alternativo), para ter certeza que não há outro contexto ativo utilizando estes dados (deste cubo ou de outro). Como é um DW eu acredito que pode existir um outro recurso (PowerView, OWC,... ou até mesmo uma execução não "finalizada completamente" pelo SSIS) que está consumindo uma parte destes conteúdo, gerando o "deadlock".
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
Durval, boa tarde,
Sim, já fiz esse teste.
O cenário é relativamente simples porque é algo que estou implantando e que não tem clientes utilizando (ainda). Então consigo garantir que nada nem ninguém esteja acessando o DW ou o OLAP exceto meus próprios pacotes.
Colocar os jobs em horários diferentes resolveu, mas me incomoda o fato dele estar meio que "se perdendo" pelo fato da solução de origem ser a mesma, mesmo que os bancos DW e os OLAP sejam diferentes.
Monitorei pelo Profiler todas as consultas feitas no DW e não tive nenhum lock. Agora quero ver se acho algo monitorando o Analysis Services.
Esse tópico é mais pra eu conseguir entender mesmo onde o Analysis Services está se perdendo quando executo os dois processamentos juntos.
Se achar algo no profiler, coloco aqui.
Obrigada.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
-
Durval, boa tarde,
Sim, já fiz esse teste.
O cenário é relativamente simples porque é algo que estou implantando e que não tem clientes utilizando (ainda). Então consigo garantir que nada nem ninguém esteja acessando o DW ou o OLAP exceto meus próprios pacotes.
Colocar os jobs em horários diferentes resolveu, mas me incomoda o fato dele estar meio que "se perdendo" pelo fato da solução de origem ser a mesma, mesmo que os bancos DW e os OLAP sejam diferentes.
Monitorei pelo Profiler todas as consultas feitas no DW e não tive nenhum lock. Agora quero ver se acho algo monitorando o Analysis Services.
Esse tópico é mais pra eu conseguir entender mesmo onde o Analysis Services está se perdendo quando executo os dois processamentos juntos.
Se achar algo no profiler, coloco aqui.
Obrigada.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Mariana,
Conseguiu obter algum resultado? Se encontrou a solução, indique o que foi feito para que outros com um problema semelhante possam utilizar sua experiência. Caso contrário, indique onde você parou para que todos na Comunidade possam ajudar a encontrar uma solução.
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
Bom dia Durval,
Eu capturei e analisei o que estava ocorrendo no Analysis Services e nada justificou o dead lock.
O processamento em momentos separados ocorre normalmente. Então ajustei o job para executar um e depois de uma hora, executar o segundo e não tive mais problemas.
Sendo assim, o que devo fazer com o post? Deixo ele em aberto mesmo?
Obrigada.Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
- Marcado como Resposta Durval RamosModerator terça-feira, 6 de janeiro de 2015 12:42
-
Bom dia Durval,
Eu capturei e analisei o que estava ocorrendo no Analysis Services e nada justificou o dead lock.
O processamento em momentos separados ocorre normalmente. Então ajustei o job para executar um e depois de uma hora, executar o segundo e não tive mais problemas.
Sendo assim, o que devo fazer com o post? Deixo ele em aberto mesmo?
Obrigada.
Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */
Mariana,
Fico feliz que o problema foi resolvido (de algum modo). Vou marcar seu post como resposta.
Se houve algum post deste tópico que ajudou você a obter esta conclusão (execução separada dos jobs), gostaria que você votasse como "útil" para servir como referência para outros membros e também como um "obrigado" para quem ajudou você obter idéias para à solução (sinta-se livre para votar ou não). Somos uma Comunidade, queremos crescer e aprender juntos!
Caso este problema volte ocorrer, crie outro Tópico de Pergunta e, se achar necessário, faça uma citação (com a URL) deste Tópico.
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"