ฉันกำลังพยายามที่จะเข้าใจว่าการสุ่มตัวอย่างสถิติทำงานอย่างไรและพฤติกรรมด้านล่างนี้เป็นสิ่งที่คาดหวังในการอัปเดตสถิติตัวอย่างหรือไม่
เรามีตารางขนาดใหญ่แบ่งพาร์ติชันตามวันที่โดยมีแถวสองพันล้านแถว วันที่พาร์ทิชันเป็นวันที่ธุรกิจก่อนหน้านี้และเป็นคีย์จากน้อยไปมาก เราโหลดข้อมูลลงในตารางนี้ในวันก่อนหน้าเท่านั้น
การโหลดข้อมูลทำงานข้ามคืนดังนั้นในวันศุกร์ที่ 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