Dnes server utrpěl útok CC, který způsobil zaseknutí webu na IIS, a po restartu se stránka opět zasekla, zkontrolujte chybový log webu následovně:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Velké množství výjimek pro časový limit dotazu způsobuje zaseknutí webu a SQL příkazy pro časový limit dotazu pocházejí z metody náhodného sběru dat, kód je následující:
Kód přibližně znamená: 10 dat je náhodně vybráno z databáze, pokud neduplikují aktuální ID.
To, co se zdá jako jednoduchý požadavek, způsobilo, že server zavěsil! SQL příkaz generovaný výše uvedeným kódem je následující:
Plán implementace je následující:
Pokud má databáze 1 milion dat, nebylo by potřeba nejprve 999 999 dat, a pak by se z těchto 999 999 dat vzalo 10 kusů?
Zeptejte se velkého chlapa z DBA skupiny a získejte odpověď: "AnoBože můj, to musí být pomalé a musíte tento SQL příkaz volat mnohokrát.
Nejdřív jsem si myslel, že je to problém s EF,Ve skutečnosti, pokud píšete přímo v SQL, neexistuje dobré řešení。
Pokud ano, prosím, naučte mě to!
|