Dnes server utrpel CC útok, ktorý spôsobil zaseknutie stránky na IIS, a po reštarte sa stránka opäť zasekla, skontrolujte chybový log stránky nasledovne:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Veľké množstvo výnimiek pre časový limit dotazu spôsobuje zaseknutie webovej stránky a všetky SQL príkazy pre časový limit dotazu pochádzajú z metódy náhodného získavania údajov, kód je nasledovný:
Kód približne znamená: 10 dát je náhodne vybraných z databázy, pokiaľ neduplikujú aktuálne ID.
To, čo sa zdá byť jednoduchou požiadavkou, spôsobilo, že server zložil! SQL príkaz generovaný vyššie uvedeným kódom je nasledovný:
Plán implementácie je nasledovný:
Ak by databáza obsahovala 1 milión dát, nebolo by najskôr potrebné 999 999 dát a potom 10 kusov z týchto 999 999 dát?
Opýtaj sa veľkého chlapa z DBA skupiny a dostaneš odpoveď: "ánoBože môj, to musí byť pomalé a musíte tento SQL príkaz volať mnohokrát.
Najprv som si myslel, že je to problém s EF,V skutočnosti, ak píšete priamo v SQL, neexistuje dobré riešenie。
Ak áno, prosím, naučte ma to!
|