O IIRC, a única edição do SQL Server 2005 que limita as conexões por qualquer motivo, é o Express e apenas acelera quando parece "muitas" conexões simultâneas. É improvável que alguém instale o Express em um servidor robusto ou que um aplicativo de console de thread único tenha muitas conexões simultâneas.
Se as suas consultas não forem paralelizadas, cada consulta será executada apenas em um desses oito núcleos (2x4) de máquinas, efetivamente desperdiçando os outros sete núcleos.
Sem nenhum outro gargalo (IOW, todos os dados que suas consultas precisam são armazenados em cache na RAM e não há consultas de bloqueio de outra coisa), suas consultas usarão 100% de um núcleo. Um "valor do núcleo" de carga no seu sistema é de 12,5%. Isso é próximo do que você vê, se você adicionar um pouco de atividade de disco.
Com o servidor antigo atingindo 60%, pode ser que o servidor antigo tenha paralelizado (pelo menos algumas) consultas e o novo não paralelize nenhuma consulta, por algum motivo.
Eu usaria o Perfmon para examinar a carga do processador por núcleo. Meu palpite é que você vai descobrir que um deles está em 100%, ou muito próximo a ele. Você pode achar que o núcleo "ocupado" muda de um para outro. Se todos os núcleos estiverem igualmente ocupados, algo estranho está acontecendo. Nesse caso, eu definitivamente gostaria de procurar por esperas no arquivo de banco de dados I / O. Existe um DMV para isso.
Eu também usaria o SSMS para examinar os planos de consulta por pelo menos uma amostra das consultas que o aplicativo executa. Às vezes, as coisas simplesmente surgem em você ("Ei, onde foi esse índice? Pensei em colocá-lo de volta após o upgrade", ou algo assim).
Para resumir:
- Certifique-se de que suas estatísticas de índice estejam atualizadas. (O simples
coisa a fazer é reindexar tudo, se puder.) Isso é particularmente
importante fazer se você tiver ido de SQL2000 SQL2005 como parte do seu
atualizar.
- Procure por bloqueio. Se você encontrar algumas, as perguntas a fazer são "Por que isso foi diferente no sistema antigo?" e "Como faço para minimizar o bloqueio agora?"
- Se você precisar que suas consultas sejam paralelizadas, certifique-se
que a configuração MAXDOP para o servidor não foi definida como 1 (o padrão é 0) por um
DBA amigável. Isso é configurável no
nível do servidor. Consulte Grau máximo de paralelismo . Independentemente da configuração, você pode forçar consultas para paralelizar
(ou não) usando a palavra-chave MAXDOP em suas consultas.
- Veja os planos de consulta para essas 36 consultas. Ajuste suas consultas e tabelas / índices.
- Redigite seu aplicativo de console com thread único para executar consultas diferentes em diferentes
conexões em (provavelmente) outros threads, para que você possa executar mais de um
de uma vez. (Este é claramente o mais complicado e menos desejável
coisa a fazer, supondo que você tenha o código fonte.)