Saya telah menyimpan prosedur yang secara gila-gilaan setiap kali dipanggil dari aplikasi web.
Saya menyalakan Sql Profiler dan menelusuri panggilan waktu itu dan akhirnya menemukan hal-hal ini:
- Ketika menjalankan pernyataan dari dalam MS SQL Management Studio, dengan argumen yang sama (pada kenyataannya, saya menyalin panggilan prosedur dari jejak profil sql dan menjalankannya): Ini selesai dalam rata-rata 5 ~ 6 detik.
- Tetapi ketika dipanggil dari aplikasi web, dibutuhkan lebih dari 30 detik (dalam jejak) sehingga halaman web saya benar-benar habis waktu itu.
Terlepas dari kenyataan bahwa aplikasi web saya memiliki pengguna sendiri, semuanya sama (database, koneksi, server yang sama, dll.) Saya juga mencoba menjalankan kueri langsung di studio dengan pengguna aplikasi web dan tidak memakan waktu lebih dari 6 detik.
Bagaimana cara mengetahui apa yang terjadi?
Saya berasumsi itu tidak ada hubungannya dengan fakta bahwa kami menggunakan BLL> DAL layers atau adaptor Tabel karena jejaknya dengan jelas menunjukkan penundaan dalam prosedur sebenarnya. Hanya itu yang bisa saya pikirkan.
EDIT Saya menemukan di tautan ini bahwa ADO.NET disetel ARITHABORT
ke true - yang baik untuk sebagian besar waktu tetapi kadang-kadang ini terjadi, dan solusi yang disarankan adalah menambahkan with recompile
opsi ke proc yang disimpan. Dalam kasus saya, itu tidak berfungsi tetapi saya curiga itu adalah sesuatu yang sangat mirip dengan ini. Ada yang tahu apa lagi yang dilakukan ADO.NET atau di mana saya dapat menemukan spesifikasinya?