Tänään palvelin joutui CC-hyökkäyksen kohteeksi, mikä aiheutti IIS:n sivuston jumiintumisen, ja sivusto jumitettiin uudelleen uudelleenkäynnistyksen jälkeen, tarkista sivuston virheloki seuraavasti:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Suuri määrä kyselyaikakatkaisupoikkeuksia aiheuttaa verkkosivuston jumiintumisen, ja kyselyaikakatkaisun SQL-lauseet tulevat satunnaisen datan ottamismenetelmästä, koodi on seuraava:
Koodi tarkoittaa suunnilleen: 10 tietoyksikköä valitaan satunnaisesti tietokannasta, kunhan ne eivät kopioi nykyistä tunnistetta.
Mikä vaikuttaa yksinkertaiselta vaatimukselta, on saanut palvelimen lopettamaan puhelun! Yllä olevan koodin tuottama SQL-lause on seuraava:
Toteutussuunnitelma on seuraava:
Jos tietokannassa on miljoona tietopalaa, eikö ensin otettaisiin 999 999 datapalaa ja sitten 10 datapalaa näistä 999 999 datapalasta?
Kysy DBA-ryhmän isolta kaverilta ja saat vastauksen: "KylläVoi luoja, tuo taitaa olla hidasta, ja sinun täytyy soittaa tätä SQL-lausetta monta kertaa.
Aluksi luulin, että kyse oli EF-ongelmasta,Itse asiassa, jos kirjoitat suoraan SQL:llä, ei ole hyvää ratkaisua。
Jos on, niin opeta minua!
|