Aujourd’hui, le serveur a subi une attaque CC, ce qui a fait bloquer le site sur IIS, et le site a été de nouveau bloqué après un redémarrage, vérifiez le journal des erreurs du site comme suit :
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Un grand nombre d’exceptions liées au délai d’expiration des requêtes bloquent le site web, et les instructions SQL de délai d’attente proviennent toutes d’une méthode de prise de données aléatoires, le code est le suivant :
Le code signifie approximativement : 10 données sont sélectionnées aléatoirement dans la base de données, tant qu’elles ne dupliquent pas l’ID actuel.
Ce qui semble être une exigence simple a fait raccrocher le serveur ! L’instruction SQL générée par le code ci-dessus est la suivante :
Le plan de mise en œuvre est le suivant :
Si la base de données contient 1 million de données, ne prendrait-elle pas d’abord 999 999 données, puis 10 données de ces 999 999 ?
Demandez au grand responsable du groupe DBA et obtenez la réponse : «OuiOh mon Dieu, ça doit être lent, et il faut appeler ça SQL plusieurs fois.
Au début, je pensais que c’était un problème d’EF,En fait, si vous écrivez directement en SQL, il n’y a pas de bonne solution。
Si oui, apprends-moi s’il te plaît !
|