Šodien serveris cieta CC uzbrukumu, izraisot IIS vietnes uzkaršanu, un pēc restartēšanas vietne atkal tika uzkarināta, pārbaudiet vietnes kļūdu žurnālu šādi:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Liels skaits vaicājuma taimauta izņēmumu izraisa vietnes uzkaršanu, un vaicājuma taimauta SQL paziņojumi visi nāk no nejaušu datu ņemšanas metodes, kods ir šāds:
Kods aptuveni nozīmē: 10 datu vienības tiek nejauši atlasītas no datu bāzes, ja vien tās nedublē pašreizējo ID.
Šķiet, ka vienkārša prasība ir izraisījusi servera uzkaršanu! Iepriekš minētā koda ģenerētais SQL paziņojums ir šāds:
Īstenošanas plāns ir šāds:
Ja datubāzē ir 1 miljons datu vienību, vai vispirms nebūtu nepieciešami 999 999 datu gabali un pēc tam 10 datu vienības no šiem 999 999 datu gabaliem?
Pajautājiet dba grupas lielajam puisim un saņemiet atbildi: "jāAk, mans Dievs, tam jābūt lēnam, un jums ir jāsauc šis sql paziņojums daudzas reizes.
Sākumā es domāju, ka tā ir EF problēma,Patiesībā, ja jūs rakstāt tieši sql, nav laba risinājuma。
Ja tā, lūdzu, māciet mani!
|