การเปิดใช้ Query Store บน msdb มีประโยชน์อย่างไร


9

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

แม้ว่าคุณจะไม่เห็นใน GUI แต่ก็สามารถตรวจสอบได้ในอินสแตนซ์ SQL 2016 ของคุณ

Validate Query Store ปิดอยู่

USE msdb
SELECT * FROM sys.database_query_store_options; 

เปิด Query Store

USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = ON
GO
ALTER DATABASE msdb SET QUERY_STORE (OPERATION_MODE = READ_WRITE
, INTERVAL_LENGTH_MINUTES = 30
, MAX_STORAGE_SIZE_MB = 1000
, QUERY_CAPTURE_MODE = AUTO)
GO

Validate Query Store เปิดอยู่

USE msdb
SELECT * FROM sys.database_query_store_options; 

จากฐานข้อมูลระบบทั้งหมดทำไม msdb เป็นเพียงตัวเลือกเดียวที่มีตัวเลือกในการใช้ Query Store และเพิ่มค่าอะไร

-- Stop Query Store
USE [master]
GO
ALTER DATABASE msdb SET QUERY_STORE = OFF
GO

เจมส์โปรดดูอัปเดตคำตอบของฉันที่เกี่ยวข้องกับ[model]การรวมอยู่ในรายการ "ไม่อนุญาต"
โซโลมอน Rutzky

@ SolomonRutzky ฉันเห็นว่าน่าสนใจมาก ฉันมีความคิดเห็นภายใต้คำตอบของคุณโปรดขยายคำตอบของคุณต่อไป
James Jenkins

@SolomonRutzky จริง ๆ แล้วอาจเป็นคำถามใหม่ที่ไม่เป็นระเบียบ ดูฉันสามารถเปิด Query Store โดยอัตโนมัติเมื่อฉันสร้างฐานข้อมูลใหม่ได้หรือไม่
James Jenkins

คำตอบ:


7

Microsoft การเปิดใช้งานคุณสมบัติไม่ได้หมายความว่าจะเป็นประโยชน์สำหรับทุกคน สำหรับระบบที่ใช้คุณสมบัติบางอย่างอาจหมายถึงการใช้ข้อมูลที่เก็บไว้ใน MSDB ในกรณีดังกล่าว Query Store อาจมีประโยชน์

ต่อไปนี้เป็นบทความเกี่ยวกับการใช้และการปรับแต่งวัตถุฐานข้อมูล MSDB

ฐานข้อมูล msdbจากหนังสือออนไลน์

การปรับประสิทธิภาพของ MSDBโดย Geoff N. Hiten

ความสำคัญของการบำรุงรักษาบน MSDBโดย Tim Radney ซึ่งเขากล่าวถึงต่อไปนี้:

การปรับดัชนีให้เหมาะสมใน msdb นั้นสำคัญเท่ากับฐานข้อมูลผู้ใช้ของคุณ หลายครั้งที่ฉันพบลูกค้าที่ปรับฐานข้อมูลผู้ใช้ แต่ไม่พบฐานข้อมูลระบบ เนื่องจากฐานข้อมูล msdb นั้นถูกใช้อย่างหนักโดย บริษัท ตัวแทนของเซิร์ฟเวอร์ SQL, Log Shipping, Service Broker, SSIS, การสำรองและกู้คืนและกระบวนการอื่น ๆ ดัชนีสามารถแยกส่วนได้อย่างมาก ตรวจสอบให้แน่ใจว่างานการปรับดัชนีให้เหมาะสมของคุณรวมฐานข้อมูลระบบของคุณหรืออย่างน้อย msdb ฉันเห็นการเพิ่มประสิทธิภาพของดัชนีเพิ่มพื้นที่ว่างหลายกิกะไบต์จากดัชนีที่มีการแยกส่วนสูงภายใน msdb

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


1
นอกจากคุณสมบัติที่ใช้[msdb]ในหมายเหตุ "กระบวนการอื่น ๆ " จะรวมถึงสิ่งต่าง ๆ เช่น: dbmail บริการ Central Management Server (CMS) (รายการเซิร์ฟเวอร์ที่ลงทะเบียนที่ใช้ร่วมกันที่สะดุดตาที่สุด) ฉันคิดว่ามีใครบางคนในความคิดเห็นเกี่ยวกับโพสต์ที่เชื่อมโยง การจัดการตามนโยบาย (PBM) และฉันคิดว่าการตรวจสอบเซิร์ฟเวอร์ (คำจำกัดความอย่างน้อยที่สุด แต่ฉันไม่ได้ยืนยันสิ่งนี้)
โซโลมอน Rutzky

5

@SqlWorldWide ตอบส่วน "ทำไม[msdb]" ของคำถามดังนั้นฉันจะไม่ทำซ้ำที่นี่ แต่การที่จะตอบ "ทำไมไม่[master], [model], [tempdb]" ส่วนหนึ่งของคำถาม:

  • [tempdb]เป็นการจัดเก็บชั่วคราวและโดยธรรมชาติแล้วดูเหมือนจะไม่ได้รับประโยชน์จากการปรับให้เหมาะสมอัตโนมัติหรือความสามารถในการวิเคราะห์เชิงประวัติ หากร้านค้าแบบสอบถามติดตามสถิติการดำเนินการในกระบวนงานที่เก็บไว้จะไม่ช่วยได้ที่นี่เมื่อกระบวนการจัดเก็บมีอยู่ที่อื่น และในขณะที่เป็นไปได้ในการสร้างขั้นตอนการจัดเก็บชั่วคราว Procs ที่จัดเก็บชั่วคราวในพื้นที่มีแนวโน้มที่จะไม่ได้รับประโยชน์จากสิ่งนี้เนื่องจากชื่อของพวกเขามีรหัสแฮชที่ไม่ซ้ำกันเพื่อแยกชื่อที่คล้ายกันในหลายเซสชัน และในขณะที่ Procs ที่จัดเก็บชั่วคราวทั่วโลกมีชื่อที่สอดคล้องกันในแต่ละเซสชันเนื่องจากลักษณะชั่วคราวไม่มีวิธีที่จะสมมติว่า Procs ที่จัดเก็บชั่วคราวทั่วโลกที่มีชื่อเดียวกันทั่วทั้งเซสชัน (สมมติว่าไม่ใช่ในเวลาเดียวกัน) จะมีรหัสเดียวกัน และด้วยเหตุนี้จึงไม่มีความหมาย /สถิติที่สัมพันธ์กัน

  • [model]เป็นเทมเพลตสำหรับสร้างฐานข้อมูลใหม่ (รวมถึง[tempdb]ซึ่งสร้างขึ้นใหม่ทุกครั้งที่มีการเริ่มต้น / รีสตาร์ทเซิร์ฟเวอร์ SQL) ข้อความค้นหาไม่ทำงานจากที่นี่ อย่างไรก็ตามฉันคิดว่ามันอาจสมเหตุสมผลที่จะอนุญาตให้ Query Store เปิดใช้งานที่นี่เพื่อให้เปิดโดยค่าเริ่มต้นเมื่อสร้าง DBs ใหม่ แต่อย่างไรก็ตามนั่นหมายความว่า Query Store จะเปิดใช้งานใน[tempdb]และนั่นเป็นเพียงความโง่ (ดูจุดด้านบนโดยตรง)

    อัพเดท:
    ว้าวเนลลี่! ฉันเพิ่งอ่านคำถามเริ่มต้นที่นำไปสู่คำถามนี้และสังเกตเห็นสิ่งที่แปลก: มีเพียงข้อผิดพลาดสำหรับ[master]และ[tempdb]; [model]มีข้อผิดพลาดไม่มีรายงาน เป็นไปได้ว่า OP เพิ่งจะออกจากข้อความแสดงข้อผิดพลาดเมื่อคัดลอกไปที่คำถามดังนั้นฉันจึงรันสิ่งต่อไปนี้บน SQL Server 2016 SP1-CU7-GDR (13.0.4466.4) เพื่อดูตัวเอง:

    ALTER DATABASE [model] SET QUERY_STORE = ON; -- completes successfully!
    
    -- Restart instance to force recreation of [tempdb];
    
    CREATE DATABASE [IsQueryStoreEnabledByDefault];
    
    SELECT * FROM sys.databases WHERE [is_query_store_on] = 1;
    
    DROP DATABASE [IsQueryStoreEnabledByDefault];

    และผลลัพธ์หรือไม่ [model]และ[IsQueryStoreEnabledByDefault]จะถูกส่งกลับ แต่[tempdb]เป็นไม่ได้ในผล! ดังนั้นเพิ่มเติมอย่างไรก็ตามถึงสองตัวแรก "อย่างไรก็ตาม" ดูเหมือนว่า[model] สามารถเปิดใช้งาน Query Store ซึ่ง a) ค่าเริ่มต้นการเปิดใช้งาน Query Stored (ใช่มันเป็นคำที่ฉันตรวจสอบแม้ ;-) สำหรับ DBs ที่สร้างขึ้นใหม่และ b) ถูกละเว้นสำหรับการสร้าง[tempdb]การบริการที่ขึ้นต้นใหม่ (ดังนั้นนี่ไม่ใช่ประตูหลังสำหรับการเปิดใช้งานใน[tempdb])  

  • [master]เป็นระบบฐานข้อมูลหลักและคุณไม่ควรใช้รหัสในการทำงานที่นี่ นอกจากนี้ขั้นตอนการจัดเก็บที่มีอยู่ที่นี่และใช้บ่อยจะไม่ได้ประโยชน์จากการปรับให้เหมาะสมหรือดำเนินการในบริบทของฐานข้อมูลผู้ใช้ที่ถูกเรียกใช้ (เช่นระบบที่จัดเก็บ procs ที่เริ่มต้นด้วยsp_เป็นกรณีพิเศษที่ "ปรากฏ" ทั้งหมด DBs - ไม่จำเป็นต้องผ่านการรับรองอย่างเต็มรูปแบบด้วย[master]..- และดำเนินการราวกับว่ามีอยู่จริงในแต่ละ DB) และอาจถูกควบคุมโดย Query Store ในฐานข้อมูลผู้ใช้ที่ถูกเรียกใช้


เมื่อคุณเรียกใช้ USE model SELECT * FROM sys.database_query_store_options หลังจากเปิดการตั้งค่ารุ่น Query Store จะไม่แสดงเป็นเปิด แต่ในขณะที่คุณพูดว่าฐานข้อมูลใหม่ได้เปิดอยู่ในกรณีของฉันมันใช้การเปลี่ยนแปลงเพิ่มเติมที่ฉันเลือกไว้เมื่อตำบนฐานข้อมูลในวันก่อนหน้า ดังนั้นหากคุณกำลังจะใช้โมเดลคุณอาจต้องการตั้งค่าตัวเลือก Query Store ทั้งหมดตามที่คุณต้องการเพื่อเซอร์ไพรส์ aviod
James Jenkins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.