แบบสอบถามเช่นเดียวกับด้านล่างที่รับประกันว่าจะไม่ส่งคืนแถวใด ๆ ใช้เวลาตั้งแต่ 0 ถึง 160 วินาทีในเซิร์ฟเวอร์ของเรา:
select col1, col2, col3
from tab1
where 0 = 1
สองสัปดาห์ที่ผ่านมาสิ่งนี้เกิดขึ้นหกครั้งในช่วงเวลา 48 ชั่วโมง เมื่อสัปดาห์ที่แล้วข้อความค้นหาเดียวกันใช้เวลาประมาณ 0 วินาที ฉันมีบันทึกของ SQL ของแอปพลิเคชันของเรา แต่ยังไม่พบผู้ต้องสงสัย นอกจากนี้ฉันคิดว่าคำถามอันดับสูงสุด 0 / โดยที่ 0 = 1 แบบสอบถามชนิดไม่เคยตีหน้าข้อมูลดังนั้นจึงควรต้านทานล็อคข้อมูลแถว / หน้า / ระดับตาราง? สกีมาไม่ได้ถูกแตะต้องโดย SQL (รู้) ใด ๆ
เนื่องจากปัญหาไม่สอดคล้องกันและเซิร์ฟเวอร์อยู่ภายใต้ภาระงานหนักมากฉันต้องการทำความเข้าใจทฤษฎีเบื้องหลังสิ่งที่เกิดขึ้นก่อนที่จะแนบ SQL profiler การสืบค้นอื่น ๆ จะทำงานโดยไม่มีปัญหาในระหว่างการล่าช้า ปัญหาที่ทราบในแอปพลิเคชั่นคือแบบสอบถาม SQL ที่สร้างขึ้นแบบไดนามิกจำนวนมากโดยมีข้อความค้นหาที่ไม่ซ้ำกันประมาณ 200k ข้อความค้นหาแบบรวม (บันทึก) 850k ภายในระยะเวลา 48 ชั่วโมงจะทำให้เกิดปัญหาเช่นนี้ได้หรือไม่
เซิร์ฟเวอร์กำลังเรียกใช้ SQL Server 2005 Standard Edition, RAM 96 GB, ดิสก์บน SAN และ 4 CPUs / 16 คอร์ ไฟล์ฐานข้อมูลและกลุ่มไฟล์นั้นได้รับการปรับปรุงให้ดีที่สุดและไม่น่าจะมีปัญหา (แต่เราแยกวิเคราะห์เรื่องนี้)
คำแนะนำใด ๆ ที่จะดูชื่นชมอย่างมาก
แก้ไข: สมบูรณ์แบบ! เล่นซ้ำแบบสอบถามเพื่อเพิ่มแผนการดำเนินการและใช้เวลา 1 นาที 35 วินาที นี่คือแผนการดำเนินการและภาพหน้าจอที่แสดงระยะเวลาการสืบค้น:

แก้ไข 2: รายละเอียดเวลาสถิติสำหรับการวิ่งครั้งที่สอง ดูเหมือนว่าจะช้าอย่างสม่ำเสมอในขณะนี้ดังนั้นเราจะแนบ profiler และ perfmon:
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 97402 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
