การปรับปรุงตัวอย่าง SQL Server ของสถิติพลาด RANGE_HI_KEY สูงสุดในคอลัมน์คีย์จากน้อยไปมาก


10

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

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

การโหลดข้อมูลทำงานข้ามคืนดังนั้นในวันศุกร์ที่ 8 เมษายนเราโหลดข้อมูลสำหรับวันที่ 7

FULLSCANหลังจากทำงานในแต่ละเราปรับปรุงสถิติแม้จะใช้กลุ่มตัวอย่างมากกว่า

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

สำหรับที่เก็บข้อมูลแรกขอบเขตที่ต่ำกว่าคือค่าที่เล็กที่สุดของคอลัมน์ที่สร้างฮิสโตแกรม

อย่างไรก็ตามมันไม่ได้พูดถึง bucket / ค่าที่มากที่สุด

ด้วยการอัพเดตสถิติตัวอย่างในตอนเช้าของวันที่ 8 ตัวอย่างจะพลาดค่าสูงสุดในตาราง (อันดับที่ 7)

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

เนื่องจากเราทำการสืบค้นข้อมูลจากวันก่อนจำนวนมากทำให้มีการประมาณค่า cardinality ที่ไม่ถูกต้องและมีจำนวนการสอบถามที่หมดเวลา

SQL Server ไม่ควรระบุค่าสูงสุดสำหรับคีย์นั้นและใช้เป็นค่าสูงสุดRANGE_HI_KEYหรือไม่ หรือเป็นเพียงแค่นี้ข้อ จำกัด ของการปรับปรุงโดยไม่ต้องใช้FULLSCAN?

รุ่น SQL Server 2012 SP2-CU7 ขณะนี้เราไม่สามารถอัปเกรดได้เนื่องจากมีการเปลี่ยนแปลงOPENQUERYพฤติกรรมใน SP3 ที่มีการปัดเศษตัวเลขในแบบสอบถามเซิร์ฟเวอร์ที่เชื่อมโยงระหว่าง SQL Server และ Oracle

คำตอบ:


11

SQL Server ไม่ควรระบุค่าสูงสุดสำหรับคีย์นั้นและใช้เป็นค่าสูงสุดRANGE_HI_KEYหรือไม่ หรือเป็นเพียงแค่นี้ข้อ จำกัด ของการปรับปรุงโดยไม่ต้องใช้FULLSCAN?

มันเป็นข้อ จำกัด ของการนำสถิติตัวอย่างไปใช้ในปัจจุบัน การรวบรวมสถิติตัวอย่างใช้TABLESAMPLE SYSTEMซึ่งใช้การสแกนตามลำดับการจัดสรรและเลือกหน้าจากการสแกนเป็นตัวอย่าง เพจที่เลือกเท่านั้นที่สนับสนุนฮิสโตแกรม

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

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

การสุ่มตัวอย่างทำงานอย่างไรเมื่ออัปเดตสถิติ

และบทความของฉันคำสั่งจัดสรรจะสแกน

สำหรับวิธีแก้ปัญหาดูสถิติในคอลัมน์จากน้อยไปมากโดยFabiano Amorim


2

เดาด่วน: เปิดใช้งานการตั้งค่าสถานะการติดตาม 4139

คุณกำลังเรียกใช้SP2-CU1อยู่แล้วดังนั้นจึงควรใช้งานได้

โปรดทราบแนวทางเกี่ยวกับ TF 2389 โฆษณา 2390 และดูhttp://sql-sasquatch.blogspot.com.mt/2013/06/mssql-plan-guides-to-address-ascending.html

(หมายเหตุฉันไม่ได้ตีปัญหานี้จริงๆและยังไม่ได้ดำน้ำลึก)

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