Danes je strežnik doživel CC napad, zaradi česar se je spletna stran na IIS zataknila, in po ponovnem zagonu je bila spletna stran ponovno zamrznjena. Preverite dnevnik napak spletne strani, kot sledi:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Veliko število izjem časovne omejitve poizvedb povzroči, da se spletna stran zatakne, vsi SQL stavki časovne omejitve poizvedbe pa izhajajo iz metode naključnega pridobivanja podatkov, koda je naslednja:
Koda približno pomeni: 10 podatkov je naključno izbranih iz baze, dokler ne podvajajo trenutnega ID-ja.
Kar se zdi kot preprosta zahteva, je povzročilo, da se strežnik prekine! SQL stavek, ki ga generira zgornja koda, je naslednji:
Načrt izvajanja je naslednji:
Če ima baza podatkov milijon podatkov, ali ne bi najprej potrebovali 999.999 podatkov, nato pa 10 kosov podatkov iz teh 999.999 podatkov?
Vprašaj velikega člana DBA skupine in dobi odgovor: "DaO moj bog, to mora biti počasi, in to SQL izjavo moraš večkrat uporabiti.
Sprva sem mislil, da gre za EF težavo,Pravzaprav, če pišeš neposredno v SQL, ni dobre rešitve。
Če je tako, me prosim naučite!
|