Saya mencoba memahami masalah yang kami alami dengan SQL Server 2000. Kami adalah situs web yang cukup transaksional dan kami memiliki proc tersimpan sp_GetCurrentTransactions
yang menerima customerID, dan dua tanggal.
Sekarang tergantung pada tanggal, dan pelanggan, permintaan ini dapat mengembalikan apa pun dari nol hingga 1000-an baris.
Masalahnya: apa yang kami alami adalah bahwa tiba-tiba kami akan mendapatkan sejumlah kesalahan (biasanya Execution Timeout Expired
atau serupa) untuk klien tertentu ketika mereka mencoba menjalankan proc yang disimpan. Jadi kami memeriksa kueri, menjalankannya dalam SSMS dan dan menemukan bahwa dibutuhkan 30-an. Jadi kami mengkompilasi ulang proc yang tersimpan dan -bang- sekarang berjalan dalam 300ms.
Saya sudah bicara dengan DBA kami tentang ini. Dia telah memberi tahu saya bahwa database membuat rencana kueri ketika kami membuat proc yang disimpan. Dia mengatakan bahwa itu adalah rencana yang bagus untuk set parameter itu, tetapi jika Anda melempar set parameter tertentu padanya, maka rencana itu tidak akan menjadi rencana terbaik untuk data itu, sehingga Anda akan melihatnya berjalan lambat.
Opsi yang disajikan kepada saya adalah langkah yang kueri masalah dari proc yang disimpan dan kembali ke SQL dinamis yang memiliki rencana eksekusi yang dibuat pada setiap proses.
Ini terasa seperti langkah mundur bagi saya dan saya merasa harus ada jalan keluar untuk hal ini. Apakah ada cara lain untuk mengatasi masalah ini?
Setiap dan semua tanggapan dihargai.