Hari ini, server mengalami serangan CC, menyebabkan situs web di IIS hang, dan situs web ditutup lagi setelah dimulai ulang, periksa log kesalahan situs web sebagai berikut:
System.Data.Entity.Core.EntityCommandExecutionException: 执行命令定义时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。完成操作之前已超时或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待的操作过时。
Sejumlah besar pengecualian batas waktu kueri menyebabkan situs web hang, dan pernyataan SQL batas waktu kueri semuanya berasal dari metode pengambilan data acak, kodenya adalah sebagai berikut:
Kode tersebut secara kasar berarti: 10 buah data dipilih secara acak dari database, selama mereka tidak menduplikasi ID saat ini.
Apa yang tampak seperti persyaratan sederhana telah menyebabkan server menutup telepon! Pernyataan SQL yang dihasilkan oleh kode di atas adalah sebagai berikut:
Rencana pelaksanaannya adalah sebagai berikut:
Jika database memiliki 1 juta data, bukankah dibutuhkan 999.999 data terlebih dahulu, dan kemudian mengambil 10 buah data dari 999.999 data ini?
Tanyakan kepada pria besar dari grup dba dan dapatkan jawabannya: "YaYa Tuhan, itu pasti lambat, dan Anda perlu memanggil pernyataan sql ini berkali-kali.
Awalnya saya pikir itu adalah masalah EF,Faktanya, jika Anda menulis langsung di sql, tidak ada solusi yang baik。
Jika demikian, tolong ajari saya!
|