เหตุใดจึงตั้งค่าสถิติการอัปเดตอัตโนมัติเป็นเท็จ


10

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

ฉันเห็นดัชนีแบบครอบคลุมรายวันสร้างใหม่ (ฉันสามารถจัดการกับสิ่งนี้ได้) และการอัปเดตสถิติรายวันด้วยตนเอง

ประมาณครึ่งหนึ่งของฐานข้อมูลได้รับการตั้งค่าเป็นสถิติการอัพเดทอัตโนมัติ = เท็จด้วยเหตุผลที่ไม่ชัดเจนนอกเหนือจากที่ฉันบอกก็คือการลด 'ปัญหาประสิทธิภาพ' ...

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

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

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

คำตอบ:


6

คุณถูกต้องฉันเชื่อว่าในกรณีส่วนใหญ่Auto Update statisticsควรตั้งค่าเป็นจริงเราควรอนุญาตให้ SQL Server ตัดสินใจว่าจะอัปเดตสถิติเมื่อใดและเชื่อฉันว่าทำงานได้ดี เมื่อสิ่งนี้ถูกตั้งค่าเป็นจริงตรวจสอบให้แน่ใจว่ามีการอัปเดตสถิติเกี่ยวกับการกระจายข้อมูลในฟิลด์ซึ่งจะช่วยให้เครื่องมือเพิ่มประสิทธิภาพในที่สุดเตรียมแผนได้ดีขึ้น สิ่งสำคัญที่ควรทราบที่นี่คือสถานะการอัพเดทอัตโนมัติจะทำงานเมื่อมีการเปลี่ยนแปลงข้อมูล 20% ในตาราง ดังนั้นคุณไม่ควรรู้สึกว่าในตารางที่มีแถว 100K หากมีการอัปเดต 10 แถวการอัปเดตสถานะจะเริ่มขึ้น

การวิเคราะห์ลึกมากขึ้นจะทำโดยพอล Randal ในบล็อกเข้าใจเมื่อสถิติโดยอัตโนมัติจะปรับปรุง ฉันไม่เห็นอุปสรรคใด ๆ หากตัวเลือกนี้ถูกตั้งค่าเป็นจริง ใช่คุณสามารถเห็นกิจกรรม I / O บางอย่างเมื่อตั้งค่าตัวเลือกนี้เป็นจริง

ข้อสรุปที่สำคัญซึ่งสามารถดึงจากบล็อกคือ

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

สำหรับกรณีที่คุณเพิ่งอ่านฐานข้อมูลหรือฐานข้อมูลที่คุณเพิ่งเลือกการดำเนินการและไม่มีการดำเนินการ DML ในกรณีนี้คุณสามารถเก็บตัวเลือกเป็นเท็จ แต่ไม่มีอันตรายใด ๆ เกิดขึ้นถ้าคุณทำให้มันเป็นจริง เราเห็นฐานข้อมูลส่วนใหญ่ที่มีกิจกรรมจำนวนหนึ่ง


10

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

อีกตัวเลือกหนึ่งคือการเปิดใช้งานทั้งตัวเลือกAUTO_UPDATE_STATISTICSและAUTO_UPDATE_STATISTICS_ASYNCฐานข้อมูล สิ่งนี้จะช่วยให้แบบสอบถามดำเนินการตามแผนการดำเนินการตามสถิติเก่า ๆ มากกว่าที่จะเกิดค่าใช้จ่ายในการอัพเดทสถิติแบบซิงโครนัส นี่เหมาะสมอย่างยิ่งสำหรับปริมาณงาน OLTP ตราบใดที่เซิร์ฟเวอร์มีขนาดเพื่อรองรับปริมาณงานแบบสอบถามรวมถึงการปรับปรุงสถิติพื้นหลัง


ฉันพยายามนึกถึงตัวอย่างที่ auto_update_stats จะทำให้เกิดปัญหาจริง ๆ และนี่ก็เป็นปัญหาที่ยอดเยี่ยม - ฉันโหวตขึ้นสองครั้ง (ถ้าทำได้) สำหรับการทำงานที่ยอดเยี่ยมเช่นกันการหลีกเลี่ยงความล่าช้าของสถิติปกติ ข้อความค้นหา
SqlRyan

1
ฉันมีสถานการณ์ที่มีฐานข้อมูลขนาดใหญ่ (VLDB) ว่าตัวเลือกสถิติ auto_update เปิดอยู่และ SQL จะเริ่มต้นในช่วงเวลาที่ไม่เหมาะสมของวันทำงาน ฉันปิดและต้องมีกลยุทธ์มากขึ้นเกี่ยวกับการอัพเดทด้วยตนเองไปยังตารางและสถิติเฉพาะเจาะจงแทนที่จะปล่อยให้เซิร์ฟเวอร์กำหนดตารางและเวลา สิ่งนี้ทำให้ระบบของฉันสามารถคาดเดาได้มากขึ้น แต่มีค่าใช้จ่ายในการจัดการที่สูงขึ้น (ไม่ต้องสงสัยเลย) แต่ต้องเกิดขึ้นเพื่อหลีกเลี่ยงการบุกรุกงานอัพเดท หาก "blanketing" ระบบที่มีการจัดการดัชนี / สถิติทั่วไปเป็นสิ่งที่คุณต้องการ มิฉะนั้นบางสถานการณ์อาจต้องใช้กลยุทธ์อย่างละเอียด
SnapJag

6

โดยทั่วไปฉันจะบอกว่าการมีสถิติการอัปเดตอัตโนมัติเป็นประโยชน์ แต่ก็มีเหตุผลหลายประการที่คุณสามารถเปิดหรือปิดได้

หนึ่งคือว่าบางตารางมีจำนวนมากปั่นป่วนและบางทีแบบสอบถามไม่ไวต่อสถิติที่แม่นยำมาก คิดว่า ETL หรือสถานการณ์จำนวนมากที่คุณกำลังเปลี่ยนข้อมูลจำนวนมาก แต่ไม่ได้อ่านจากที่นั่นหรือไม่อ่านมากนัก มีจุดไม่มากนักที่จะมีการอัปเดตสถิติอัตโนมัติและทำให้ I / O เครือข่ายให้ข้อมูลสถิติที่แม่นยำยิ่งขึ้นซึ่งจะไม่นำมาใช้

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

หรือบางทีคุณแค่มีภาระงานเขียนหนัก หรือโดยทั่วไปการอ่านจะสแกนแบบเต็มซึ่งสถิติไม่สำคัญอย่างยิ่ง

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