Dziś serwer został zaatakowany przez CC, co spowodowało zawieszenie strony na IIS, a po ponownym uruchomieniu strona została ponownie zawieszona, sprawdź logi błędów strony następująco:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Duża liczba wyjątków timeoutu zapytań powoduje zawieszanie strony internetowej, a instrukcje timeout SQL pochodzą z metody losowego pobierania danych, a kod wygląda następująco:
Kod oznacza mniej więcej: 10 fragmentów danych jest losowo wybieranych z bazy, o ile nie duplikują aktualnego ID.
To, co wydaje się prostym wymaganiem, spowodowało, że serwer się rozłączył! Instrukcja SQL wygenerowana przez powyższy kod wygląda następująco:
Plan wdrożenia przedstawia się następująco:
Jeśli baza danych zawiera milion danych, czy nie potrzeba najpierw 999 999 danych, a potem pobrania 10 fragmentów danych z tych 999 999 danych?
Zapytaj dużego z grupy DBA i poznaj odpowiedź: "TakO mój Boże, to musi być wolne i musisz wywoływać to polecenie SQL wiele razy.
Na początku myślałem, że to problem EF,W rzeczywistości, jeśli piszesz bezpośrednio w SQL, nie ma dobrego rozwiązania。
Jeśli tak, to proszę, naucz mnie!
|