Oggi, il server ha subito un attacco CC, causando il blocco del sito su IIS, e il sito si è ribloccato dopo il riavvio, controlla il registro degli errori del sito come segue:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Un gran numero di eccezioni per il tempo di scadenza delle query fa bloccare il sito web, e le istruzioni SQL per il tempo di scadenza delle query provengono tutte da un metodo di raccolta di dati casuali, il codice è il seguente:
Il codice significa approssimativamente: 10 dati sono selezionati casualmente dal database, purché non duplicino l'ID corrente.
Quello che sembra un requisito semplice ha fatto sì che il server riattacca! L'istruzione SQL generata dal codice sopra è la seguente:
Il piano di attuazione è il seguente:
Se il database ha 1 milione di dati, non dovrebbe prima prendere 999.999 pezzi di dati, e poi 10 pezzi di dati da questi 999.999 dati?
Chiedi al capo del gruppo DBA e ottieni la risposta: "SìOh mio Dio, deve essere lento, e devi chiamare questa dichiarazione sql molte volte.
All'inizio pensavo fosse un problema di EF,Infatti, se scrivi direttamente in SQL, non c'è una buona soluzione。
Se sì, per favore insegnatemi!
|