Apa manfaatnya mengaktifkan Query Store di msdb?


9

Dari basis data sistem SQL (master, model, msdb, tempdb), query store hanya dapat digunakan di msdb. Saya mencari dan tidak menemukan dokumentasi tentang permintaan toko di msdb.

Meskipun Anda tidak dapat melihatnya di GUI, itu dapat divalidasi pada contoh SQL 2016 Anda

Validasi Toko Kueri dimatikan

USE msdb
SELECT * FROM sys.database_query_store_options; 

Aktifkan Toko Kueri

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

Toko Kueri Validasi aktif

USE msdb
SELECT * FROM sys.database_query_store_options; 

Dari semua basis data sistem mengapa hanya msdb satu-satunya yang memiliki opsi untuk menggunakan Query Store, dan nilai apa yang ditambahkannya?

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

James, silakan lihat pembaruan jawaban saya terkait dengan [model]dimasukkan dalam daftar "tidak diizinkan".
Solomon Rutzky

@SolomonRutzky begitu, sangat menarik. Saya memiliki komentar di bawah jawaban Anda, jangan ragu untuk terus memperluas jawaban Anda.
James Jenkins

@ SolomonRutzky Sebenarnya mungkin pertanyaan baru tidak benar. Lihat Bisakah saya mengaktifkan Query Store ketika saya membuat basis data baru?
James Jenkins

Jawaban:


7

Microsoft mengaktifkan fitur tidak berarti itu akan berguna untuk semua orang. Untuk sistem yang menggunakan beberapa fitur dapat berarti mengandalkan informasi yang disimpan dalam MSDB. Dalam kasus tersebut, Query Store dapat bermanfaat.

Berikut adalah beberapa artikel tentang penggunaan dan pencarian objek database MSDB.

msdb Database dari buku online.

Tuning Kinerja MSDB oleh Geoff N. Hiten

Pentingnya Pemeliharaan pada MSDB oleh Tim Radney di mana ia menyebutkan berikut:

Mengoptimalkan indeks dalam msdb sama pentingnya dengan database pengguna Anda. Sering kali saya menemukan klien yang mengoptimalkan basis data pengguna tetapi bukan basis data sistem. Karena database msdb banyak digunakan oleh Agen SQL Server, Pengiriman Log, Pialang Layanan, SSIS, pencadangan dan pemulihan, dan proses lainnya, indeks bisa menjadi sangat terfragmentasi. Pastikan bahwa pekerjaan pengoptimalan indeks Anda juga mencakup basis data sistem Anda, atau setidaknya msdb. Saya telah melihat optimasi indeks membebaskan beberapa gigabytes ruang dari indeks yang sangat terfragmentasi dalam msdb.

Saya dapat melihat bagaimana toko kueri dapat membantu dalam mengoptimalkan strategi pengindeksan Anda dan secara optimal menanyakan / mengagendakan / membersihkan beberapa informasi yang disimpan dalam MSDB.


1
Selain fitur yang [msdb]disebutkan dalam kutipan, "proses lain" akan mencakup hal-hal seperti: dbmail, layanan Server Manajemen Pusat (CMS) (paling banyak dibagikan daftar Server Terdaftar), saya pikir seseorang dalam komentar pada posting terkait tersebut menyebutkan Manajemen Berbasis Kebijakan (PBM), dan saya pikir Server Audit (definisi setidaknya, tapi saya belum mengkonfirmasi ini).
Solomon Rutzky

5

@SqlWorldWide menjawab bagian "mengapa [msdb]" dari pertanyaan jadi saya tidak akan menduplikasinya di sini. Tapi untuk menjawab "mengapa tidak [master], [model], [tempdb]" bagian dari pertanyaan:

  • [tempdb]adalah penyimpanan sementara dan pada dasarnya tidak akan pernah mendapatkan manfaat dari optimasi otomatis atau kemampuan untuk memberikan analisis historis. Jika Query Store melacak statistik eksekusi pada Prosedur Tersimpan, itu tidak akan membantu di sini ketika Prosedur Tersimpan ada di tempat lain. Dan sementara dimungkinkan untuk membuat Prosedur Tersimpan sementara, Procs Tersimpan sementara lokal kemungkinan tidak akan mendapat manfaat dari ini mengingat bahwa nama mereka menyertakan kode hash unik untuk memisahkan nama-nama serupa di beberapa sesi. Dan sementara Global Stored Procs global memiliki nama yang konsisten di seluruh sesi, mengingat sifat sementara, tidak ada cara untuk mengasumsikan bahwa Global sementara Stored Procs dengan nama yang sama di seluruh sesi (menganggap tidak pada saat yang sama) bahkan akan memiliki kode yang sama, dan karenanya tidak dapat diperbaiki makna / statistik.

  • [model]adalah templat untuk membuat basis data baru (termasuk [tempdb], yang akan dibuat kembali setiap kali instance SQL Server dimulai / dimulai ulang). Kueri tidak dieksekusi dari sini. Namun, saya kira itu mungkin masuk akal untuk memungkinkan Query Store untuk diaktifkan sini sehingga ON secara default saat membuat DB baru. Namun, bagaimanapun itu , itu berarti Query Store akan diaktifkan [tempdb], dan itu hanya konyol (lihat poin langsung di atas).

    PEMBARUAN:
    Woah, Nelly! Saya baru saja membaca kembali pertanyaan awal yang mengarah ke pertanyaan ini dan menemukan sesuatu yang aneh: hanya ada pesan kesalahan untuk [master]dan [tempdb]; tidak ada kesalahan yang dilaporkan untuk [model]. Ada kemungkinan bahwa OP hanya meninggalkan pesan kesalahan ketika menyalin ke pertanyaan, jadi saya menjalankan yang berikut ini di SQL Server 2016 SP1-CU7-GDR (13.0.4466.4) untuk melihat sendiri:

    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];

    Dan hasilnya? [model]dan [IsQueryStoreEnabledByDefault]dikembalikan, tapi [tempdb]ini tidak dalam hasil! Jadi, tambahan namun untuk dua pertama "Namun" s, tampaknya [model] dapat memiliki Query Toko diaktifkan yang a) default Query Disimpan pemberdayaan (ya, itu kata, saya bahkan memeriksa ;-) untuk DBs yang baru dibuat, dan b) diabaikan untuk penciptaan kembali [tempdb]pada permulaan layanan (karenanya ini bukan pintu belakang untuk menyalakannya [tempdb]).  

  • [master]adalah database sistem utama dan Anda seharusnya tidak memiliki kode yang berjalan di sini. Juga, Prosedur Tersimpan yang ada di sini dan sering digunakan baik tidak akan mendapat manfaat dari optimasi, atau mengeksekusi dalam konteks Database Pengguna di mana mereka dipanggil (yaitu sistem disimpan procs dimulai dengan sp_adalah kasus khusus di mana mereka "muncul" di semua DB - tidak perlu sepenuhnya memenuhi syarat dengan [master]..- dan mengeksekusi seolah-olah mereka benar-benar ada di setiap DB) dan mungkin diatur oleh Query Store di Database Pengguna (s) di mana mereka dipanggil.


Ketika Anda menjalankan model USE SELECT * FROM sys.database_query_store_options; Setelah mengatur model Query Store aktif, itu tidak ditampilkan seperti pada. TETAPI Seperti yang Anda katakan database baru telah dihidupkan, dalam kasus saya ini menggunakan perubahan opsional yang saya pilih ketika menggedornya lebih awal pada hari itu. Jadi, jika Anda akan menggunakan model, Anda mungkin ingin mengatur semua opsi Toko Kueri ke preferensi Anda untuk kejutan aviod.
James Jenkins
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.