มีเหตุผลในการอัปเดตสถิติด้วยตนเองหรือไม่


19

ใน SQL Server สถิติจะถูกอัพเดตโดยอัตโนมัติเมื่อAuto Update Statisticsอยู่ในTrue(ซึ่งเป็นค่าเริ่มต้น) มีเหตุผลในการอัปเดตสถิติด้วยตนเองและในสถานการณ์ใดบ้าง

คำตอบ:


21

แน่นอนว่าหากข้อมูลของคุณเปลี่ยนแปลงบ่อยกว่าอัตราสถิติอัตโนมัติ (หรือว่าคุณกำลังอัปเดต <20% ของแถวบ่อยเช่นการอัปเดตสถานะหรือประทับวันที่ / เวลา) หรือถ้าตารางของคุณมีขนาดใหญ่และไม่เปลี่ยนแปลงเพียงพอที่จะกระตุ้นการอัปเดตสถิติอัตโนมัติ หรือถ้าคุณมีดัชนีที่กรอง ( เนื่องจากเกณฑ์สถิติอัตโนมัติยังคงขึ้นอยู่กับ% ของการเปลี่ยนแปลงในตารางทั้งหมดไม่ใช่% ของการเปลี่ยนแปลงของชุดย่อยของแถวในดัชนีที่กรอง )


+1 สำหรับดัชนีที่กรองแล้ว ฉันคิดว่านั่นเป็นเหตุผลหลักหรือในชุดข้อมูลขนาดใหญ่มาก ฉันมีตารางที่ฉันแทรก 30m แถวต่อเดือน แต่มันเป็นเปอร์เซ็นต์เพียงเล็กน้อยดังนั้นสถิติจะไม่ได้รับการอัปเดตตามปกติเว้นแต่ฉันจะเริ่มด้วยตนเอง
JNK

+1 นอกจากนี้คุณทำตามกำหนดเวลาเพื่อรีเซ็ตตัวนับซึ่งหมายความว่ามีโอกาสน้อยกว่านอกหน้าต่างการบำรุงรักษาของคุณ
gbn

7

อีกสองเหตุผล (ผิวเผิน):

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

... นอกจากว่าคุณจะเปิดใช้งานสถิติการอัพเดทอัตโนมัติแบบอะซิงโครนัส จากนั้นแบบสอบถามที่เรียกใช้การอัปเดตจะไม่รอสถิติใหม่ แต่อาจทำงานด้วยสถิติเก่าและไม่ถูกต้อง

ฉันเจอปัญหาการบล็อคแปลก ๆ บางอย่างเมื่อฐานข้อมูลที่มีตารางค่อนข้างใหญ่ (44M แถว, 8.5 GB) จะเริ่มอัปเดตสถิติ เราเลิกใช้งานแอปพลิเคชันนั้นก่อนที่ฉันจะสามารถติดตามสิ่งที่เกิดขึ้นจริง ๆ ได้


1
+1 นั่นเป็นจุดที่ยอดเยี่ยมเกี่ยวกับการบล็อกและตัวเลือก async
Aaron Bertrand

5

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

http://sqlblog.com/blogs/elisabeth_redei/archive/2009/03/01/lies-damned-lies-and-statistics-part-i.aspx

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