วิธีรับประสิทธิภาพคิวรีที่แม่นยำ


9

ฉันพยายามปรับปรุงประสิทธิภาพของโพรซีเดอร์ที่เก็บไว้ เมื่อฉันรัน SP มันจะเสร็จสิ้นเกือบจะในทันทีราวกับมีบางสิ่งบางอย่างถูกแคช ฉันถูกบอกให้ใช้ SQL สองบรรทัดต่อไปนี้ก่อนดำเนินการ SP ใน SSMS:

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

เมื่อฉันรัน SP ด้วยโค้ดสองบรรทัดด้านบน SP จะเสร็จสิ้นในเวลาประมาณ 8 วินาที อย่างไรก็ตามนี่เป็นการให้เวลาดำเนินการจริงแก่ฉันจริง ๆ หรือไม่ ฉันจะรู้ได้อย่างไร


คำตอบ:


9

คำสั่งเหล่านั้นทำสองสิ่ง:

  • ล้างแคชหน้าซึ่งจัดเก็บหน้าข้อมูลที่ถูกดึงออกมาจากดิสก์แล้ว (โดยปกติแล้วปัจจัยที่ใหญ่ที่สุดในการสืบค้นคือการเข้าถึงดิสก์)
  • ล้างแคชแผนคิวรีซึ่งหมายความว่าเซิร์ฟเวอร์ต้องสร้างแผนคิวรีใหม่ ปกติจะไม่สำคัญยกเว้นปริมาณธุรกรรมที่สูงมาก

โดยทั่วไปคุณจะได้รับเวลาที่เทียบเท่ากับสถานการณ์ "กรณีที่แย่ที่สุด" - คุณเพิ่งรีบูตเซิร์ฟเวอร์และไม่มีอะไรอยู่ในหน่วยความจำ การเรียกใช้ครั้งต่อมาไม่จำเป็นต้องจ่ายค่าใช้จ่ายในการดึงข้อมูลจากดิสก์เนื่องจากหน้าเว็บเหล่านั้นถูกโหลดเข้าสู่หน่วยความจำแล้ว

สิ่งนี้คล้ายกับสถานการณ์ในโลกแห่งความจริงผู้ใช้รายแรกของคุณที่จะเรียกใช้คิวรีแบบเฉพาะเจาะจงนั้นอาจต้องรอนานกว่าการรันครั้งต่อไปโดยสมมติว่าคุณกำลังตรวจสอบข้อมูลเดิม

วิธีที่ดีที่ฉันชอบใช้คือการเรียกใช้หลายครั้งและรับค่าเฉลี่ย สิ่งนี้มีประโยชน์อย่างยิ่งในสภาพแวดล้อมที่ใช้ร่วมกันเนื่องจากคุณไม่สามารถควบคุมทรัพยากรที่ใช้ร่วมกันอย่างเต็มรูปแบบเช่น tempdb

คุณยังสามารถใช้คำสั่งเหล่านี้เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นจริงเบื้องหลัง:

SET STATISTICS IO ON
SET STATISTICS TIME ON

สิ่งเหล่านี้จะให้ข้อมูลโดยละเอียดเกี่ยวกับการอ่านหน้าจากดิสก์ (ต่อวัตถุ) การอ่านหน้าแบบลอจิคัลเวลาที่ใช้ในการรวบรวมแผนและเวลาที่ใช้ในการดำเนินการสืบค้น


คำตอบที่ยอดเยี่ยมตามปกติ JNK
OO

เต็มใจช่วย! คุณเพิ่งถามคำถามเกี่ยวกับสิ่งที่ฉันจัดการกับสิ่งต่างๆมากมาย หากคุณถามเกี่ยวกับการจำลองแบบหรือจัดการหน่วยความจำฉันจะไม่ได้มากที่จะเพิ่ม :)
JNK

2
ฉันรู้เกี่ยวกับการตั้งค่าสถิติ IO เปิด แต่ฉันไม่เคยรู้เกี่ยวกับการตั้งเวลาสถิติสถิติ ขอบคุณ JNK
datagod

2
เพียงแค่ FYI คุณจะได้รับข้อมูลจำนวนมากโดยไม่มีการตั้งค่า SET ทั้งหมดโดยสร้างแผนจริงโดยใช้ SQL Sentry Plan Explorer และเพื่อให้ได้จำนวนมาก (เช่น 5) ทำงานคุณสามารถจบแบทช์ด้วยGO 5เหมือนกับใน SSMS เป็นการดาวน์โหลดฟรีฉันไม่ได้พยายามขายอะไรให้คุณเลย sqlsentry.net/plan-explorer/sql-server-query-view.asp
Aaron Bertrand

1
@JNK ดีแน่นอนมันฟรีประหยัดเวลาและแสดงข้อมูลที่เป็นไปไม่ได้หรือยุ่งยากมากที่จะออกจาก Management Studio และฉันทำงานที่นั่น :-)
Aaron Bertrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.