ฉันมีขั้นตอนการจัดเก็บที่หมดเวลาอย่างบ้าคลั่งทุกครั้งที่เรียกจากเว็บแอปพลิเคชัน
ฉันเริ่มใช้ Sql Profiler และติดตามการโทรที่หมดเวลาและในที่สุดก็พบสิ่งเหล่านี้:
- เมื่อดำเนินการคำสั่งจากภายใน MS SQL Management Studio โดยมีอาร์กิวเมนต์เดียวกัน (อันที่จริงฉันคัดลอกการเรียกโพรซีเดอร์จากการติดตามโปรไฟล์ sql และรัน): มันจะเสร็จสิ้นใน 5 ~ 6 วินาทีโดยเฉลี่ย
- แต่เมื่อเรียกจากเว็บแอปพลิเคชันจะใช้เวลานานกว่า 30 วินาที (ตามรอย) ดังนั้นหน้าเว็บของฉันจึงหมดเวลาจริง
นอกเหนือจากข้อเท็จจริงที่ว่าเว็บแอปพลิเคชันของฉันมีผู้ใช้เป็นของตัวเองทุกสิ่งก็เหมือนกัน (ฐานข้อมูลเดียวกันการเชื่อมต่อเซิร์ฟเวอร์ ฯลฯ ) ฉันยังลองเรียกใช้แบบสอบถามโดยตรงในสตูดิโอกับผู้ใช้เว็บแอปพลิเคชันและใช้เวลาไม่เกิน 6 วินาที
ฉันจะทราบได้อย่างไรว่าเกิดอะไรขึ้น
ฉันคิดว่ามันไม่มีส่วนเกี่ยวข้องกับการที่เราใช้เลเยอร์ BLL> DAL หรืออะแดปเตอร์ตารางเนื่องจากการติดตามแสดงให้เห็นอย่างชัดเจนถึงความล่าช้าในขั้นตอนจริง นั่นคือทั้งหมดที่ฉันคิดได้
แก้ไขฉันพบในลิงค์นี้ว่า ADO.NET ตั้งค่าARITHABORT
เป็นจริงซึ่งเป็นสิ่งที่ดีสำหรับเกือบตลอดเวลา แต่บางครั้งสิ่งนี้ก็เกิดขึ้นและวิธีแก้ปัญหาที่แนะนำคือการเพิ่มwith recompile
ตัวเลือกให้กับ proc ที่เก็บไว้ ในกรณีของฉันมันใช้ไม่ได้ แต่ฉันสงสัยว่ามันคล้ายกับสิ่งนี้มาก มีใครรู้บ้างว่า ADO.NET ทำอะไรอีกหรือหา spec ได้ที่ไหน