Para o próximo cara.
A solução para esse problema se resume a percepções, quando alguém - como eu - não está realmente familiarizado com o gerenciamento de servidores.
Como afirmei na pergunta original, acabamos de mudar de um servidor antigo - Windows Server 2003 / SQL Server 2000 - para um novo, que usa o Windows Server 2008 R2 de 64 bits e o SQL Server 2008 R2. Não configurei o servidor original e paguei a alguém para migrar as coisas para o novo servidor, dando-lhe as instruções: "Basta configurá-lo da maneira que o servidor antigo foi configurado". Heh.
O servidor antigo tinha 9 anos, uma máquina com processador dual Xeon com 1 GB de RAM . O servidor original foi configurado com dois sites - nosso sistema de reservas e o site da empresa - ambos usando o mesmo pool de aplicativos. Como os sites foram adicionados ao longo dos anos, eles foram adicionados ao pool de aplicativos padrão. Com nossos problemas de recursos, isso foi o melhor que pudemos fazer. E em algum momento, alguém deve ter definido o tempo limite para ser um valor muito curto, provavelmente porque o servidor ficou um pouco entupido às vezes.
O novo servidor tem 32GB de RAM e um processador de 4 núcleos. Mas o consultor que contratei fez exatamente o que eu pedi - quase - e configurou tudo como estava no servidor antigo, incluindo colocar todos os sites no mesmo pool de aplicativos. A única coisa que ele não fez, aparentemente, foi definir o tempo limite para o valor mais curto que era o servidor antigo deve ter sido definido para.
No novo servidor, quando carreguei uma página ASP que chamava um procedimento armazenado, o SQL Server usou todo o processador alocado a ele e ficou pendurado lá e todos os sites ficaram paralisados, até que eu o interrompi no SQL Server. Depois de um pouco de pesquisa, descobri que a mesma coisa aconteceu - todos os sites pararam - ao executar qualquer tipo de loop infinito, mesmo que o SQL Server não estivesse envolvido, e que a reciclagem do pool de aplicativos "consertaria" isso.
Tudo se resume a suposições / percepções: o tempo limite no servidor antigo era curto o suficiente, que ao depurar algo, eu nunca percebi que todos os sites estavam bloqueados , porque era apenas para 15 ou 20 segundos, a página terminaria, eu consertaria e continuaria. Quando o tempo limite é definido para 120 segundos, no entanto, esse é um jogo totalmente diferente. Como o SQL Server estava parado, achei que era um problema do SQL Server, mas estava pendente porque o registro e a conexão não estavam fechados porque a página estava presa em um loop ... então, apenas apareceu que o SQL Server fazia parte do problema.
A solução final era separar a maioria dos sites em seus próprios pools de aplicativos (duh) e ajustar os valores de tempo limite para ASP de acordo com o que era apropriado para cada site.