คำค้นหาที่ไม่มีแผนเพียงพอที่ดี


20

ฉันมีฐานข้อมูล SQL Server 2012 ผมสังเกตเห็นค่าของสำหรับการค้นหาบางอย่างและทั้งหมดให้Reason for early termination of statement optimization Good Enough Plan Foundตอนนี้คำถามของฉันคือ:

  1. ประเภทใดบ้างที่เป็นไปได้ของ“ เหตุผลในการยกเลิกการปรับให้เหมาะสมที่สุดในช่วงต้น” ฉันค้นหาสิ่งนี้เป็น msdn แต่ไม่ได้รับรายการค่าทั้งหมด
  2. มี DMV หรือเหตุการณ์เพิ่มเติมเพื่อแสดงรายการคำค้นหาทั้งหมดที่การเพิ่มประสิทธิภาพถูกยกเลิกเนื่องจากเหตุผลอื่นนอกเหนือจาก Good Enough Plan Found หรือไม่ ฉันอ้างอิงบทความสองบทความต่อไปนี้ซึ่งไม่ได้แสดงรายการความเป็นไปได้ทั้งหมด [พวกเขายังให้ผลลัพธ์ที่แตกต่างในฐานข้อมูลของฉันด้วย]

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


คำตอบ:


20
  • หน่วยความจำเกินขีด จำกัด

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

  • หมดเวลา

    เหตุผลนี้เข้าใจผิดมาก

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

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

    หากงบประมาณนี้เกินงบประมาณในช่วงการค้นหาระยะที่หนึ่งสิ้นสุดลง นี่เป็นส่วนหนึ่งของการออกแบบและการใช้งานปกติของเครื่องมือเพิ่มประสิทธิภาพ ข้อความค้นหาที่ต้องใช้ความพยายามของเครื่องมือเพิ่มประสิทธิภาพให้ได้มากขึ้น คนที่ทำไม่ทำไม่ได้

    คิดว่า 'หมดเวลา' เป็น 'พบแผนการดีพอ'

  • พบแผนดีพอ

    นี่หมายถึงเหตุผลเดียวกับที่ว่างเปล่า มันเป็นเรื่องแปลกประหลาดทางประวัติศาสตร์ที่วางแผนด้วยต้นทุนต่ำกว่า 0.909090 ... (1 / 1.1) มีป้ายกำกับด้วยวิธีนี้ ไม่มีอะไรหยุดก่อนหรือมีการจัดการเป็นพิเศษหรือแตกต่างกันภายในรหัสของเครื่องมือเพิ่มประสิทธิภาพเมื่อเหตุผลนี้ปรากฏขึ้น

นอกเหนือจากขีด จำกัด หน่วยความจำที่มากเกินไปไม่มี 'เหตุผลการเลิกก่อนกำหนด' ซึ่งมีความหมายมาก (หากมีอะไรเลย) สำหรับการปรับแต่งแบบสอบถามหรือการวิเคราะห์ประสิทธิภาพ ฉันมักจะไม่สนใจพวกเขา

คำแนะนำ

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

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


10

หากคุณไปที่http://schemas.microsoft.com/sqlserver/2004/07/showplan/showplanxml.xsd (ซึ่งเป็นลิงค์ที่คุณจะเห็นว่าคุณเปิดแผนการดำเนินการเป็น xml) คุณจะเห็น สามเหตุผลที่ระบุไว้ซึ่งคือ:

  • หมดเวลา
  • MemoryLimitExceeded
  • GoodEnoughPlanFound

บทความที่คุณพูดถึงดูเหมือนจะโอเคสำหรับการค้นหากิจกรรมเหล่านี้คุณมีปัญหาหรือไม่? สิ่งเดียวที่ต้องคำนึงถึงคือ DMVs เหล่านี้ไม่ได้รวบรวมคำสั่ง SQL ทั้งหมดที่เคยทำงานบนเซิร์ฟเวอร์และรับการรีเซ็ตเมื่อเซิร์ฟเวอร์รีสตาร์ท คุณสามารถดัก showplan xml ด้วย Extended Events และเคียวรีนั้น แต่ดูเหมือนว่าจะเกินความจริงสำหรับฉัน

ฉันไม่ต้องกังวลเกี่ยวกับ GoodEnoughPlanFound มากเกินไปดูเหมือนว่าเครื่องมือเพิ่มประสิทธิภาพกำลังทำงานอยู่ (การหาแผนดีอย่างรวดเร็ว) ค่อนข้างดี

HTH

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.