I dag blev serveren udsat for et CC-angreb, hvilket fik hjemmesiden på IIS til at hænge, og hjemmesiden blev låst igen efter genstart, tjek hjemmesidens fejllog som følger:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Et stort antal forespørgsels-timeout-undtagelser får hjemmesiden til at hænge, og forespørgselstimeout-SQL-sætningerne kommer alle fra en metode, hvor tilfældige data er samlet; koden er som følger:
Koden betyder cirka: 10 datastykker udvælges tilfældigt fra databasen, så længe de ikke duplikerer det aktuelle ID.
Det, der virker som et simpelt krav, har fået serveren til at hænge på! SQL-sætningen, der genereres af ovenstående kode, er som følger:
Implementeringsplanen er som følger:
Hvis databasen har 1 million data, ville den så ikke først tage 999.999 data, og derefter tage 10 datastykker fra disse 999.999 data?
Spørg den store fyr i DBA-gruppen og få svaret: "JaÅh Gud, det må være langsomt, og du skal kalde denne SQL-sætning mange gange.
Først troede jeg, det var et EF-problem,Faktisk, hvis du skriver direkte i SQL, findes der ingen god løsning。
Hvis ja, så lær mig det venligst!
|