I dag ble serveren utsatt for et CC-angrep, noe som førte til at nettsiden på IIS hang seg, og nettsiden ble hengt opp igjen etter omstart, sjekk feilloggen på nettsiden som følger:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Et stort antall spørringstidsavbrudd gjør at nettsiden henger, og SQL-setningene for spørringstidsavbrudd kommer alle fra en metode som henter tilfeldig data, koden er som følger:
Koden betyr omtrent: 10 databiter velges tilfeldig fra databasen, så lenge de ikke dupliserer den nåværende ID-en.
Det som virker som et enkelt krav har fått serveren til å henge opp! SQL-setningen generert av koden ovenfor er som følger:
Implementeringsplanen er som følger:
Hvis databasen har 1 million data, ville den ikke først ta 999 999 data, og deretter ta 10 databiter fra disse 999 999 dataene?
Spør den store aktøren i DBA-gruppen og få svaret: "JaHerregud, det må være tregt, og du må kalle denne SQL-setningen mange ganger.
Først trodde jeg det var et EF-problem,Faktisk, hvis du skriver direkte i SQL, finnes det ingen god løsning。
Hvis ja, vær så snill og lær meg!
|