มันจะเป็นการดีกว่าถ้าหากแผนแบบสอบถามที่จะถูกแยกโดยคำสั่งเพื่อการใช้งานใหม่?


11

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

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

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

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

อาจเป็นเพียงการแสดงความไม่รู้ของฉันว่า


dbidและobjectidทั้งคู่มีis_cache_key=1ดังนั้นคุณจะไม่ได้รับการนำแผนมาใช้ใหม่ระหว่างวัตถุที่คอมไพล์ต่าง ๆ
Martin Smith

คำตอบ:


11

หากผู้ใช้ดำเนินการคำสั่งที่เป็นหนึ่งในงบในแบบสอบถามหลายคำสั่งสามารถใช้ส่วนที่เกี่ยวข้องของแผนแบบสอบถามที่มีอยู่แล้วในแคชสำหรับแบบสอบถามหลายคำสั่ง?

หมายเลขหน่วยพื้นฐานของการที่นำมาใช้แผนใน SQL Server เป็นชุด

มันจะดีกว่าที่จะแฮชแต่ละคำสั่งในแบบสอบถามแบบหลายคำสั่งเพื่อให้ผู้ใช้สามารถเรียกใช้แต่ละคำสั่งจากแบบสอบถามได้หรือไม่

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

ฉันคาดว่าจะมีปัญหาแทรกซ้อนที่ฉันไม่ได้คำนึงถึง

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

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

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