Eu tenho quatro servidores idênticos 2 são usados na produção e os outros dois são máquinas de demonstração/caixas de failover de emergência. A máquina mais poderosa, com 16 núcleos e 127 GB de Ram, hospeda nosso datawarehouse e nosso banco de dados OLTP. A caixa menos poderosa é uma caixa de 8 núcleos e 98 GB de RAM que usamos para ETL e nosso armazenamento de dados. O problema que estou tendo é que os serviços de integração de servidores de produção levam muito tempo para executar a validação do pacote. Para uma consulta que retorna em 6 segundos, leva 40 segundos para concluir a validação do pacote. Como você pode ver, é um pacote bastante simples.
Lembre-se de que este é apenas o pacote que estou usando como exemplo. Todos os meus pacotes têm o mesmo problema, embora alguns em menor grau. Quando executo isso, a parte de validação leva 40 segundos em média.
Para testar melhor isso, executei exatamente o mesmo pacote na caixa irmã que executa todos os mesmos trabalhos SQL desta caixa. Apenas para que a validação pré-execução leve 0 segundos e a consulta leve entre 4 e 6 segundos.
Para testar ainda mais, executei a consulta em ambas as instâncias do servidor SQL.
SELECT '{' + CAST(Store_Id AS CHAR(36)) + '}' AS Store_Id
,'{' + CAST(ItemGroupDetail_Id AS CHAR(36)) + '}' AS ItemGroupDetail_Id
,ItemGroupType_Id
,'{' + CAST(Concept_Id AS CHAR(36)) + '}' AS Concept_Id
,'{' + CAST(Company_Id AS CHAR(36)) + '}' AS Company_Id
,'{' + CAST(ItemGroup_Id AS CHAR(36)) + '}' AS ItemGroup_Id
,GroupName
,Sort
,NameOverride
,'{' + CAST(ParentGroup_Id AS CHAR(36)) + '}' AS ParentGroup_Id
,Active
,'{' + CAST(UserCreated AS CHAR(36)) + '}' AS UserCreated
,'{' + CAST(UserModified AS CHAR(36)) + '}' AS UserModified
FROM bos_vAllItemGroups
A execução no servidor principal com data atualizada retorna 63326 linhas em 5 segundos em média e as 50527 linhas em 3 segundos. O que é de se esperar, este servidor tem muito menos atividade com as mesmas especificações que eu esperaria que fosse um pouco mais rápido. O que eu não esperaria é que o tempo de validação do pacote aumentasse muito mais do que o tempo real de execução da consulta.
Depois de muito cavar ontem, acho que descobri o problema, mas não tenho certeza de como prová-lo. O banco de dados OLTP de produção gerencia conteúdo para menus digitais em todo o país que estão ligando para casa constantemente para verificar se há novos conteúdos. Na maioria das vezes não há nada para mudar e as consultas para descobrir terminam em milissegundos. Por mais que eles enviem sobre esse processo acaba rodando em média 4500 consultas por segundo. Isso pode ser a causa do meu problema? O grande volume de transações provenientes do nosso servidor web. Se sim, como posso provar isso? Já tentei fazer com que esses bancos de dados fossem executados em máquinas separadas, pois esse banco de dados OLTP está crescendo muito rapidamente, assim como nosso datawarehouse e, de todas as minhas leituras, manter seus bancos de dados OLAP e OLTP no mesmo servidor é considerado uma prática ruim.
Com algumas conversas off-line, Zane conseguiu determinar que , se pudessem manter uma conexão aberta, isso aceleraria a validação.
Para esse fim, sugeri que eles alterassem a propriedade no Connection Manager para inverter a propriedade RetainSameConnection
True
de seu padrão.Junções de mesclagem e classificação são notoriamente lentas. É possível escrever uma consulta para a fonte OLE Db que tenha junções?