Hoje, o servidor sofreu um ataque CC, fazendo o site no IIS travar, e o site foi desligado novamente após reiniciar, verifique o registro de erros do site da seguinte forma:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Um grande número de exceções de tempo de espera de consulta faz o site travar, e as instruções SQL de tempo de consulta vêm todas de um método de captura aleatória, o código é o seguinte:
O código significa aproximadamente: 10 dados são selecionados aleatoriamente do banco de informações, desde que não dupliquem o ID atual.
O que parece ser um requisito simples fez o servidor desligar! A instrução SQL gerada pelo código acima é a seguinte:
O plano de implementação é o seguinte:
Se o banco de dados tem 1 milhão de dados, ele não precisaria de 999.999 dados primeiro, e depois pegaria 10 dados desses 999.999 dados?
Pergunte ao grande do grupo DBA e obtenha a resposta: "SimMeu Deus, isso deve ser lento, e você precisa chamar isso de instrução SQL várias vezes.
No começo achei que fosse um problema de EF,Na verdade, se você escrever diretamente em SQL, não há uma boa solução。
Se sim, por favor, me ensine!
|