การวัดการขับไล่แผน


9

เรามี SQL Server 2016 SP1 โดยมีหน่วยความจำสูงสุดตั้งไว้ที่ 24GB
เซิร์ฟเวอร์นี้มีคอมไพล์จำนวนมากโดยมีเพียง 10% ของคอมไพล์เหล่านี้มาจากคิวรี Ad-Hoc ดังนั้นแผนที่รวบรวมใหม่ควรเก็บไว้ในแผนแคช แต่ขนาดของแผนแคชจะไม่เพิ่มขึ้น (ประมาณ 3.72GB)

ฉันสงสัยว่ามีแรงกดดันหน่วยความจำท้องถิ่นที่นำไปสู่การลบแผนจากแคช ขีดจำกัดความดันแคชของแผนคือ 5GB (75% ของหน่วยความจำเป้าหมายที่มองเห็นได้จาก 0-4GB + 10% ของหน่วยความจำเป้าหมายที่มองเห็นได้จาก 4GB-64GB + 5% ของหน่วยความจำเป้าหมายที่มองเห็น> 64GB) เมื่อ cachestore ถึง 75% ของขีด จำกัด แรงดันควรลบแผนออกจากแคช ในกรณีของฉัน 75% จาก 5 GB คือ 3.75GB ดังนั้นจึงเป็นไปได้ที่จะเป็นสาเหตุของการคอมไพล์สูง

มีวิธีวัด (perfmon, Extended events, ... ) การลบออกจากแผนออกจากแคชหรือไม่? ดังนั้นฉันจึงมั่นใจได้ว่าความดันในหน่วยความจำในเครื่องเป็นสาเหตุของการคอมไพล์สูง

คำตอบ:


9

มี XEvent สำหรับสิ่งนั้น:

query_cache_removal_statistics

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

ดังนั้นสิ่งที่ชอบ:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

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

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