Hoy, el servidor sufrió un ataque de CC, lo que provocó que la web en IIS se colgara, y la web se colgó de nuevo tras reiniciarse, revisa el registro de errores de la web como sigue:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Un gran número de excepciones por tiempo de espera de consulta hacen que el sitio web se quede colgado, y las sentencias SQL de tiempo de espera de consulta provienen de un método de toma de datos aleatorios, el código es el siguiente:
El código significa aproximadamente: 10 piezas de datos se seleccionan aleatoriamente de la base de datos, siempre que no dupliquen el ID actual.
¡Lo que parece un requisito sencillo ha hecho que el servidor cuelgue! La sentencia SQL generada por el código anterior es la siguiente:
El plan de implementación es el siguiente:
Si la base de datos tiene un millón de datos, ¿no necesitaría primero 999.999 piezas de datos y luego 10 de esos 999.999 datos?
Pregunta al jefe del grupo DBA y obtén la respuesta: "SíDios mío, eso debe ser lento, y tienes que llamar a esto una declaración sql muchas veces.
Al principio pensé que era un problema de EF,De hecho, si escribes directamente en SQL, no hay una buena solución。
Si es así, ¡por favor enséñame!
|