ฉันจะอ่านค่าคิวรีได้อย่างไรและเป็นเปอร์เซ็นต์เสมอหรือไม่


34

ขณะนี้ฉันกำลังศึกษาเกี่ยวกับ SQL 70-433 (การสอบ Microsoft Certification) และฉันสับสนมากเกี่ยวกับการวัดประสิทธิภาพ "ค่าใช้จ่ายแบบสอบถาม"

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

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

แต่การอภิปรายเรื่องค่าใช้จ่ายในการสืบค้นในบทที่ 6 บทเรียนหนึ่งของชุดฝึกอบรม SQL 70-433 ของ Microsoft ดูเหมือนจะไม่เกี่ยวข้องกับเรื่องนี้

นี่คือตัวอย่าง: พวกเขาแสดงแบบสอบถามที่ประกอบด้วยแบบสอบถามย่อยย่อยที่สัมพันธ์กันสองรายการแล้วปรับปรุงด้วยแบบสอบถามโดยแทนที่แบบสอบถามย่อยด้วย OUTER APPLY ผลลัพธ์: "แบบสอบถามนี้มีค่าใช้จ่ายประมาณ 76 ในขณะที่ค่าใช้จ่ายของแบบสอบถามแรกนั้นเพิ่มขึ้นเป็นสองเท่าโดยประมาณ 151 รายการ" พวกเขาปรับปรุงแบบสอบถามให้ดียิ่งขึ้นและลดต้นทุนจาก 76 เป็น 3.6 พวกเขาไม่ได้หมายความว่าตัวเลขเหล่านี้เป็นเปอร์เซ็นต์ในขณะที่พวกเขาบอกเป็นนัย ๆ ว่าเป็นตัวเลขสัมบูรณ์ซึ่งเกี่ยวข้องกับแบบสอบถามเป็นวัตถุแบบสแตนด์อโลนโดยไม่มีการอ้างอิงกับแบบสอบถามอื่นใด ๆ และต่อไปคำถามแรกอาจมีราคา 151% ได้อย่างไร

ต่อมาในบทที่พวกเขาแสดงภาพหน้าจอของแผนการดำเนินการซึ่งมีสามส่วน คนแรกบอกว่า "ราคา: 0%" คนที่สองบอกว่า "ราคา: 1%" และคนสุดท้ายพูดว่า "ราคา: 99%" แต่ข้อความ (ของหนังสือเล่มนี้) ด้านล่างหน้าจอ "ต้นทุนของแบบสอบถามนี้คือ 0.56" . ฉันเดาว่าพวกเขาหมายถึงค่าใช้จ่ายประเภทอื่น แต่ฉันไม่สามารถอ้างอิงถึงที่อื่นได้

ใครช่วยได้บ้าง ฉันสับสนอย่างทั่วถึง


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

คำตอบ:


43

มีการรายงานต้นทุนคิวรีในแผนการดำเนินการเป็น "ต้นทุนทรีย่อยโดยประมาณ" 1.5นี้เป็นตัวเลขที่แน่นอนเช่น Conor Cunningham พูดถึงในงานนำเสนอ SQLBitsซึ่ง แต่เดิมอ้างถึงจำนวนวินาทีที่ใช้ในการดำเนินการบนเครื่องของพนักงาน Microsoft ( "Nick's Machine" ) ใน SQL Server 7 วัน

ป้อนคำอธิบายรูปภาพที่นี่

แต่ตอนนี้ควรตีความว่าเป็นการวัดแบบไม่มีต้นทุนต่อหน่วยโดยรวม

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

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

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

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


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

4
ฉันสงสัยเกี่ยวกับหน่วยวัดเสมอดีใจที่ได้รู้ในที่สุด ฉันอธิบายให้คนฟัง (ตลก) ว่าเป็น "SQL Dollars" หากค่าการสืบค้นเท่ากับ 1.0 นั่นก็เหมือนกับการจ่าย 1 ดอลลาร์สำหรับกาแฟหนึ่งถ้วย ไม่ใช่ราคาที่ไม่ดี คุณจะจ่าย $ 300 สำหรับถ้วยหรือไม่? ไม่มีทาง!
datagod
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.