Background: Estou no processo de otimização de uma consulta estilo Data Warehouse com tabelas de grandes dimensões. O otimizador não gosta de escolher o plano típico de junção de esquema em estrela no momento. Quando forço esse plano (usando uma dica de índice), posso ver que esse plano de star join é um pouco mais caro do que o plano que estou usando agora. Suspeito que seja porque as dimensões não cabem na RAM da minha máquina de desenvolvimento. A versão é SQL Server 2014, mas espero que a pergunta possa ser generalizada para todas as versões recentes.
Pergunta: Existe alguma forma de fazer o otimizador acreditar que tem muita memória RAM à sua disposição? Para fins de teste, gostaria de obter o plano que ele geraria se tivesse 1 TB de RAM disponível (em vez de 8 GB no momento).
O
DBCC WHATIF
comando (consulte também http://devondba.blogspot.co.uk/2014/03/dbcc-optimizerwhatif.html ) pode ser usado para simular uma determinada configuração de hardware para a sessão atual:A
MemoryMBs
propriedade deve ser definida para algum valor.Depois disso, parece ser necessário recompilar a consulta em questão (por exemplo, usando
DBCC FREEPROCCACHE
em uma caixa de desenvolvimento ou usandoOPTION (RECOMPILE)
se essa dica for aceitável para uso posterior na produção).É fácil dizer que o
WHATIF
valor "pegou" pelo fato de influenciar os<OptimizerHardwareDependentProperties>
valores no plano de execução do XML.