ติดตามสถานะ 4199 - เปิดใช้งานทั่วโลกหรือไม่


19

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

ดูเหมือนว่ามันจะเป็นประโยชน์ต่อการปฏิบัติงานทั่วทั้งกระดานฉันกำลังพิจารณาที่จะเปิดใช้งานทั่วโลกในสภาพแวดล้อมที่ไม่ใช่การผลิตของเราและปล่อยให้มันนั่งสองสามเดือนเพื่อแก้ไขปัญหา

การแก้ไขใน 4199 มีการสะสมในเครื่องมือเพิ่มประสิทธิภาพโดยปริยายในปี 2014 (หรือ 2016) หรือไม่? แม้ว่าฉันจะเข้าใจกรณีที่ไม่แนะนำการเปลี่ยนแปลงแผนโดยไม่คาดคิด แต่ก็แปลกที่จะซ่อนการแก้ไขทั้งหมดนี้ไว้ระหว่างรุ่น

เรากำลังใช้ 2008, 2008R2 และส่วนใหญ่ 2012


คุณกำลังประสบปัญหาการประเมิน cardinality หรืออะไรบางอย่าง?
Zane

คุณอ่านการเปลี่ยนแปลงที่เปิดใช้งานโดยการตั้งค่าสถานะเพื่อดูว่าพวกเขาจะเป็นประโยชน์กับคุณ?
swasheck

ฉันอ่านมาแล้วหลายครั้งดูเหมือนว่ามีความเกี่ยวข้อง
FilamentUnities

คำตอบ:


20

โดยส่วนตัวเมื่อใดก็ตามที่ฉันสร้างเซิร์ฟเวอร์ใหม่สำหรับโครงการใหม่ฉันจะเปิดใช้งาน TF4199 ทั่วโลกอยู่เสมอ เช่นเดียวกับเมื่อฉันอัปเกรดอินสแตนซ์ที่มีอยู่เป็นเวอร์ชันที่ใหม่กว่า

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

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

เห็นได้ชัดว่าการตั้งค่าสถานะมีผลต่ออินสแตนซ์ทั้งหมดดังนั้นคุณจะต้องทดสอบฐานข้อมูลทั้งหมดที่อยู่ที่นั่น


12
สิ่งสำคัญที่ควรทราบว่าการแก้ไขวันที่ 4199 ทั้งหมดจะเปิดใช้งานใน SQL Server 2016 (โดยไม่มีการตั้งค่าสถานะการติดตาม) 4199 จะยังคงทำงาน แต่จะเปิดใช้งานการแก้ไขใหม่จากจุดนั้นไปข้างหน้า
Aaron Bertrand

6

การค้นหาของฉันในหัวข้อนำฉันมาที่นี่ดังนั้นฉันแค่อยากจะแบ่งปันประสบการณ์ล่าสุดของฉันในหัวข้อ

ฉันใช้ SQL 2014 ดังนั้นฉันจึงคิดว่าฉันจะปลอดภัยจากการต้องดูแลประมาณ 4199 นิดหน่อย ... แต่มันก็ไม่จริง ...

วิธีการวินิจฉัยหากคุณต้องการ 4199

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

SELECT SomeColumn
FROM SomeTable    
OPTION(QUERYTRACEON 4199)

ในสถานการณ์ของฉันฉันมีประโยค 10 อันดับแรกที่ทำให้เกิดคำถามที่วิ่งได้โดยไม่ต้องซึ่งเป็นสิ่งที่ทำให้ฉันคิดว่ามีบางสิ่งบางอย่างที่กำลังเกิดขึ้นและ 4199 อาจช่วยได้

ประมาณ 4199

การแก้ไขข้อบกพร่อง / ประสิทธิภาพของ SQL Server Query Optimizer ใด ๆ ที่สร้างขึ้นหลังจากการเปิดตัวเวอร์ชันหลักใหม่จะถูกซ่อนและถูกบล็อก นี่คือในกรณีที่พวกเขาอาจเป็นอันตรายต่อบางโปรแกรมที่ดีที่สุดในทางทฤษฎีอย่างสมบูรณ์แบบ ดังนั้นให้ติดตั้งการอัปเดตตามที่คุณต้องการการเปลี่ยนแปลงเครื่องมือเพิ่มประสิทธิภาพการสืบค้นจริงจะไม่เปิดใช้งานตามค่าเริ่มต้น ดังนั้นเมื่อทำการแก้ไขหรือปรับปรุงครั้งเดียวแล้ว 4199 ก็กลายเป็นสิ่งจำเป็นหากคุณต้องการใช้ประโยชน์จากมัน เมื่อมีการแก้ไขปรากฏขึ้นมากมายในที่สุดคุณจะพบว่าตัวเองเปิดใช้งานเมื่อหนึ่งในนั้นมีผลกับคุณ โดยทั่วไปโปรแกรมแก้ไขเหล่านี้จะเชื่อมโยงกับค่าสถานะการสืบค้นกลับของตนเอง แต่ใช้ 4199 เป็นหลัก "เปิดการแก้ไขทุกครั้ง"

หากคุณรู้ว่าต้องการการแก้ไขใดคุณสามารถเปิดใช้งานการแก้ไขเป็นชิ้น ๆ แทนที่จะใช้ 4199 หากคุณต้องการเปิดใช้งานการแก้ไขทั้งหมดให้ใช้ 4199

ตกลงคุณต้องการ 4199 ทั่วโลก ...

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

DBCC TRACEON (4199, -1);

โดยที่ -1 ระบุส่วน Global ใน DBCC TRACEON สำหรับข้อมูลเพิ่มเติมดู:

https://msdn.microsoft.com/en-us/library/ms187329.aspx?f=255&MSPPError=-2147217396

แผนการสืบค้น "Recompiling"

ในความพยายามครั้งล่าสุดของฉันฉันต้องเปิดใช้งาน 4199 ทั่วโลกแล้วลบแผนแบบสอบถามแคชที่มีอยู่ :

sp_recompile 'dbo.SomeTable'

https://msdn.microsoft.com/en-us/library/ms181647.aspx?f=255&MSPPError=-2147217396

ที่กระบวนงานที่เก็บไว้ recompile ค้นหาแผนแบบสอบถามใด ๆ ที่เกี่ยวข้องกับวัตถุฐานข้อมูล (เช่นตาราง) และลบแผนแบบสอบถามเหล่านั้นต้องการความพยายามครั้งถัดไปในการเรียกใช้แบบสอบถามที่คล้ายกันเพื่อรวบรวม

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

ในบทสรุปที่ 4199

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


1

ฉันต้องการแบ่งปันประสบการณ์ของฉันกับธงการติดตาม 4199

ฉันเพิ่งเสร็จสิ้นการวินิจฉัยปัญหาด้านประสิทธิภาพของระบบลูกค้าที่ใช้ SQL Server 2012 SP3 ลูกค้าย้ายฐานข้อมูลการรายงานออกจากเซิร์ฟเวอร์ OLTP ที่ใช้งานจริงไปยังเซิร์ฟเวอร์ใหม่ เป้าหมายของลูกค้าคือการลบการแข่งขันสำหรับทรัพยากรด้วยแบบสอบถาม OLTP น่าเสียดายที่ลูกค้ากล่าวว่าเซิร์ฟเวอร์การรายงานใหม่ช้ามาก

แบบสอบถามตัวอย่างทำงานบนระบบ OLTP ที่เสร็จสมบูรณ์ใน 1.6 วินาที แผนแบบสอบถามทำดัชนีค้นหาบนตารางแถว ~ 200 ล้านที่เป็นส่วนหนึ่งของมุมมอง

บนเซิร์ฟเวอร์ใหม่แบบสอบถามเดียวกันเสร็จสมบูรณ์ใน 10 นาที 44 วินาที มันทำการสแกนดัชนีในตารางแถวเดียวกัน ~ 200 ล้าน

ข้อมูลเซิร์ฟเวอร์การรายงานเป็นสำเนาของข้อมูล OLTP ดังนั้นจึงไม่ปรากฏว่ามีความแตกต่างในข้อมูล

ฉันนิ่งงันจนกระทั่งฉันจำได้ว่าซอฟต์แวร์ของเรา (ซึ่งใช้ระบบ OLTP) เปิดใช้งานการตั้งค่าสถานะการติดตามบางอย่างเมื่อเริ่มต้น หนึ่งในนั้นคือ 4199 ฉันจำได้ว่าเป็นการแก้ไขเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหา

ฉันทดสอบการเปิดใช้งานการตั้งค่าสถานะการติดตาม 4199 บนเซิร์ฟเวอร์การรายงานใหม่ของลูกค้าและแบบสอบถามการรายงานเสร็จสมบูรณ์ใน 0.6 วินาที (ว้าว!) ฉันปิดใช้งานการตั้งค่าสถานะการสืบค้นกลับและการสืบค้นกลับสู่ความสมบูรณ์ใน 10 นาที 44 วินาที เปิดใช้งานการตั้งค่าสถานะ: กลับไปที่ 0.6 วินาที เห็นได้ชัดว่าการเปิดใช้งานการตั้งค่าสถานะการติดตามเปิดใช้งานเครื่องมือเพิ่มประสิทธิภาพการใช้ดัชนีค้นหาในมุมมองบนตาราง 200 ล้านแถว

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

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