Heute erlitt der Server einen CC-Angriff, der dazu führte, dass die Website auf IIS hängen blieb, und nach dem Neustart wurde die Website erneut aufgehängt. Überprüfen Sie das Website-Fehlerprotokoll wie folgt:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Eine große Anzahl von Abfrage-Timeout-Ausnahmen führt dazu, dass die Website hängt, und die Abfrage-Timeout-SQL-Anweisungen stammen alle aus einer Methode, bei der zufällige Daten erfasst werden; der Code ist wie folgt:
Der Code bedeutet ungefähr: 10 Datenstücke werden zufällig aus der Datenbank ausgewählt, solange sie nicht die aktuelle ID duplizieren.
Was wie eine einfache Anforderung wirkt, hat dazu geführt, dass der Server aufgehängt hat! Die vom obigen Code erzeugte SQL-Anweisung lautet wie folgt:
Der Umsetzungsplan ist wie folgt:
Wenn die Datenbank 1 Million Daten enthält, würde sie dann nicht zuerst 999.999 Daten nehmen und dann 10 Datenstücke aus diesen 999.999 Daten?
Frag den großen Typen der DBA-Gruppe und erhalte die Antwort: "JaOh mein Gott, das muss langsam sein, und du musst diese SQL-Anweisung oft aufrufen.
Zuerst dachte ich, es sei ein EF-Problem.Tatsächlich gibt es keine gute Lösung, wenn man direkt in SQL schreibt.。
Wenn ja, bitte bring es mir bei!
|