หลังจากค้นหาไปสักพักหนึ่งฉันตัดสินใจที่จะโพสต์คำถามนี้เพื่อหาคำตอบและขออภัยหากมีคำถาม / คำตอบที่คล้ายกัน
เมื่อเรียกใช้คิวรีด้านล่างของเซิร์ฟเวอร์ SQL สองตัวที่คล้ายกันเราพบแผนการดำเนินการที่แตกต่างกันซึ่งมีผลต่อประสิทธิภาพและเราต้องการความช่วยเหลือในการหาสาเหตุ
แบบสอบถาม:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
แผนการดำเนินการของเซิร์ฟเวอร์ A
แผนการดำเนินการของเซิร์ฟเวอร์ B เซิร์ฟเวอร์ B http://s2.postimg.org/z9fjrfv4n/server_B.png
คุณจะสังเกตเห็นว่าเซิร์ฟเวอร์ B มีการดำเนินการทางกายภาพสูงสุดในแผนการดำเนินการจริงและเรากำลังพยายามหาสาเหตุ แบบสอบถามทั้งสองใช้ดัชนีเดียวกันในดัชนีค้นหา
นี่คือรายละเอียดบางอย่างของเซิร์ฟเวอร์ A และเซิร์ฟเวอร์ B
เซิร์ฟเวอร์ A และ B เป็นทั้งคู่
Windows Server 2008 R2 Standard Service Pack 1
RAM 24GB
ระบบปฏิบัติการ 64 บิต
SQL Server 2012รุ่นที่ได้รับจากการใช้ ( เลือก SERVERPROPERTY ('ProductVersion') )
เซิร์ฟเวอร์A SQL เวอร์ชัน11.0.3000.0
เซิร์ฟเวอร์B SQL เวอร์ชัน11.0.5058.0
สิ่งที่เราได้ลอง
ทำไมเซิร์ฟเวอร์B ถึงมี TOP ในแผนการดำเนินการ ในตัวอย่างแบบสอบถามง่ายๆนี้ไม่มีปัญหาจริง แต่ในแบบสอบถามที่มีขนาดใหญ่กว่าค่าใช้จ่ายจะเพิ่มขึ้นสำหรับ TOP และเราเห็นประสิทธิภาพการทำงานที่ยอดเยี่ยม ความช่วยเหลือใด ๆ ในการแก้ไขข้อบกพร่องนี้จะได้รับการชื่นชมอย่างมากและเราสามารถให้ข้อมูลเพิ่มเติมใด ๆ ที่คุณอาจต้องการความช่วยเหลือ
GO
บรรทัดหลัง rowcount ได้ไหม คุณสามารถโพสต์คุณสมบัติของผู้ให้บริการยอดนิยมได้หรือไม่
TOP
ประกอบการแสดงให้เห็นไม่ใช่ศูนย์SET ROWCOUNT
ได้ดำเนินการก่อนหน้านี้ในการเชื่อมต่อที่ ลองอีกครั้งหลังจากดำเนินการSET ROWCOUNT 0;
แล้ว นอกจากนี้เวอร์ชัน SQL ที่คุณโพสต์ไม่ใช่ SQL 2008 R2 รันSELECT SERVERPROPERTY('ProductVersion');
บนเซิร์ฟเวอร์ 2 เครื่องเพื่อรับรุ่นเซิร์ฟเวอร์ SQL ที่แท้จริง