การอัพเดตสถิติแบบขนาน


14

ใน SQL Server 2008 หรือใหม่กว่าUPDATE STATISTICS WITH FULLSCANการดำเนินการแบบเธรดเดียวหรือสามารถใช้การขนานได้หรือไม่ วิธีการเกี่ยวกับสถิติการปรับปรุงด้วยการสุ่มตัวอย่างเริ่มต้น - มันสามารถใช้ขนานกันได้อย่างไร ฉันไม่เห็นตัวเลือกที่ระบุMAXDOPด้วยสถิติการอัปเดต

คำตอบ:


22

มีการอัปเดตสถิติแบบขนานตั้งแต่ SQL Server 2005 ซึ่งมีการบันทึกไว้ในบทความ TechNet "สถิติที่ใช้โดยเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาใน Microsoft SQL Server 2005" :

สารสกัดบทความ

เมื่อทำการสแกนเต็มรูปแบบ (ไม่ว่าจะร้องขออย่างชัดเจนหรือไม่ก็ตาม) แบบสอบถามภายในที่สร้างขึ้นสำหรับการรวบรวมข้อมูลจะมีรูปแบบทั่วไป:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

สังเกตMAXDOPคำใบ้ที่นั่น (แม้ว่าจะไม่มีวิธีใดที่ผู้ใช้จะสามารถระบุคำใบ้ได้ด้วยตนเอง) เมื่อมีการรวบรวมสถิติตัวอย่างแบบสอบถามภายในใช้ส่วนTABLESAMPLEคำสั่งซึ่งป้องกันไม่ให้คู่ขนาน เอ็นจินยังสร้างMAXDOP 1คำใบ้บนเคียวรีภายในซึ่งซ้ำซ้อนเล็กน้อย

หากคุณต้องการลดความขนานให้ชัดเจนMAXDOPคำแนะนำในการสืบค้นภายในสามารถแทนที่ได้โดยใช้Resource Governor (Enterprise เท่านั้น)

SQL Server 2016 เพิ่มการอัพเดทสถิติตัวอย่างแบบขนาน


1

เริ่มต้นจาก SQL Server 2016 SP2 คุณสามารถใช้MAXDOPตัวเลือก

ปรับปรุงเพิ่มการสนับสนุนสำหรับ MAXDOP ตัวเลือกสำหรับการสร้างสถิติและการปรับปรุงสถิติงบ :

การปรับปรุงนี้เพิ่มการสนับสนุนสำหรับตัวเลือก MAXDOP สำหรับคำสั่ง CREATE STATISTICS และ UPDATE STATISTICS ใน Microsoft SQL Server 2016 และ 2017 สิ่งนี้ช่วยให้คุณสามารถแทนที่การตั้งค่าเริ่มต้นสำหรับระดับสูงสุดของ parallelism (MAXDOP) ที่ระบุในระดับฐานข้อมูลหรือเซิร์ฟเวอร์

หมายเหตุ: ระดับของผลลัพธ์ของการขนานจะถูก จำกัด โดยการตั้งค่ากลุ่มเวิร์กโหลด MAX_DOP หากใช้ Resource Governor

ตัวอย่างเช่นสมมติว่ามีการใช้ตาราง Sales.SalesOrderDetail และมีการสร้างสถิติหลายรายการแล้ว ในกรณีนี้สคริปต์ต่อไปนี้จะอัปเดตแต่ละสถิติด้วยระดับความเท่าเทียมกันเท่ากับ 8

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8

-3

สถิติการอัพเดทไม่มีการขนานภายในใด ๆ ไม่สำคัญว่าคุณกำลังใช้งาน FULLSCAN หรือ SAMPLING แน่นอนคุณสามารถรันคำสั่ง UPDATE STATISTICS หลายคำสั่งพร้อมกันในแต่ละการเชื่อมต่อที่แตกต่างกันผ่านงาน SQL Agent หลายงานหรือการวางแผนอื่น ๆ ขึ้นอยู่กับสถานการณ์ที่แน่นอนของคุณด้วยฮาร์ดแวร์และข้อมูลคุณอาจพบว่าการทำดัชนีตารางใหม่นั้นเร็วกว่าสถิติการอัพเดทด้วย FULLSCAN และอาจเป็นตัวเลือกที่ดีกว่า


ฉันขอโทษที่ทำเครื่องหมาย แต่คุณไม่รู้ว่าคุณกำลังพูดถึงอะไร จาก whitepaper นี้msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "การรวบรวมสถิติแบบขนานสำหรับ fullscan: สำหรับสถิติที่รวบรวมด้วย fullscan การสร้างวัตถุสถิติเดียวสามารถทำได้แบบขนานสำหรับ ทั้งตารางที่ไม่แบ่งพาร์ติชันและพาร์ติชั่น " อย่างไรก็ตามฉันไม่สามารถดูความเท่าเทียมกันเมื่อฉันใช้สถิติอัปเดตด้วยการสแกนเต็มรูปแบบในตาราง 30 ล้านแถว
SQL Learner

นอกจากนี้สถิติการอัพเดทยังล็อคความเสถียรของสคีมาด้วยดังนั้นหากคุณเรียกใช้สถิติการอัปเดตอื่น ๆ ระบบจะรอจนกว่าจะเสร็จสมบูรณ์ก่อนหน้านี้
SQL Learner

4
@SQLLearner: ไม่มีความผิด แต่ไม่ว่าคำตอบนี้จะถูกต้องทำไมคุณถามคำถามนี้ถ้าคุณอ่านกระดาษสีขาวนั่น? มันให้คำตอบกับทุกสิ่งที่คุณถาม หากคุณไม่เห็นความขนานสำหรับสถานการณ์เฉพาะของคุณโปรดแก้ไขคำถามเพื่อระบุว่าและรายละเอียดอื่น ๆ ที่เกี่ยวข้อง
Jon Seigel

จอน Seigel พบและอ่านกระดาษสีขาวหลังจากโพสต์คำถามอย่างไรก็ตามการให้บริการอินเทอร์เน็ตยังไม่แน่ใจว่าสถานะการอัพเดตสามารถใช้แบบคู่ขนานได้หรือไม่
SQL Learner

4
คุณพูดถูกกับกระดาษขาวและ sql2008 ฉันเพิ่งอ่านกระดาษสีขาวนั่น ข้อมูลในหัวของฉันล้าสมัย ฉันมีปัญหามากมายทั้ง sql2005 หรือแม้กระทั่ง sql2000 สำหรับการทำดัชนีใหม่สถิติการปรับปรุง FULLSCAN เทียบกับตัวอย่างเวลาที่ต้องใช้สำหรับงานและคุณภาพสุ่มของข้อมูลบนหน้าสถิติ ฉันเดาว่าความเจ็บปวดทั้งหมดนั้นคือน้ำใต้สะพานในขณะนี้ ฉันจะบอกว่าคุณสามารถเรียกใช้ UPDATE STATS บนตารางที่แตกต่างกันในแบบคู่ขนาน แต่ดูเหมือนว่าจะมีปัญหามากกว่าที่จะคุ้มค่าและคุณอาจมีการโต้แย้ง I / O มากเกินไปเพื่อให้คุ้มค่า
darin strait
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.