Có lợi ích gì khi kích hoạt Truy vấn Store trên msdb?


9

Trong kho lưu trữ truy vấn của cơ sở dữ liệu hệ thống SQL (master, model, msdb, tempdb) chỉ có thể được sử dụng trên msdb. Tôi đã xem và không tìm thấy bất kỳ tài liệu nào về cửa hàng truy vấn trên msdb.

Mặc dù bạn không thể nhìn thấy nó trong GUI, nhưng nó có thể được xác thực trên phiên bản SQL 2016 của bạn

Xác thực Cửa hàng Truy vấn bị tắt

USE msdb
SELECT * FROM sys.database_query_store_options; 

Bật cửa hàng truy vấn

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

Xác thực Cửa hàng Truy vấn được bật

USE msdb
SELECT * FROM sys.database_query_store_options; 

Trong tất cả các cơ sở dữ liệu hệ thống, tại sao msdb là cơ sở duy nhất có tùy chọn sử dụng Query Store và nó bổ sung giá trị gì?

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

James, xin vui lòng xem cập nhật câu trả lời của tôi liên quan đến [model]việc được đưa vào danh sách "không được phép".
Solomon Rutzky

@SolomonRutzky Tôi thấy, rất thú vị. Tôi có ý kiến ​​dưới câu trả lời của bạn, hãy tiếp tục mở rộng câu trả lời của bạn.
James Jenkins

@SolomonRutzky Trên thực tế có thể một câu hỏi mới là inorder. Xem Tôi có thể có Cửa hàng truy vấn tự động khi tôi tạo cơ sở dữ liệu mới không?
James Jenkins

Câu trả lời:


7

Microsoft kích hoạt một tính năng không có nghĩa là nó sẽ hữu ích cho mọi người. Đối với các hệ thống sử dụng một số tính năng có thể có nghĩa là dựa vào thông tin được lưu trữ trong MSDB. Trong những trường hợp đó, Store Store có thể hữu ích.

Dưới đây là một vài bài viết về việc sử dụng và điều chỉnh các đối tượng cơ sở dữ liệu MSDB.

Cơ sở dữ liệu msdb từ sách trực tuyến.

Điều chỉnh hiệu suất MSDB của Geoff N. Hiten

Tầm quan trọng của việc bảo trì trên MSDB của Tim Radney, nơi ông đã đề cập sau đây:

Tối ưu hóa các chỉ mục trong msdb cũng quan trọng như cơ sở dữ liệu người dùng của bạn. Nhiều lần tôi đã tìm thấy các khách hàng đang tối ưu hóa cơ sở dữ liệu người dùng nhưng không phải là cơ sở dữ liệu hệ thống. Do cơ sở dữ liệu msdb được sử dụng nhiều bởi SQL Server Agent, Log Shipping, Service Broker, SSIS, sao lưu và khôi phục và các quy trình khác, các chỉ mục có thể bị phân mảnh cao. Đảm bảo rằng các công việc tối ưu hóa chỉ mục của bạn cũng bao gồm cơ sở dữ liệu hệ thống của bạn hoặc ít nhất là msdb. Tôi đã thấy tối ưu hóa chỉ mục giải phóng một vài gigabyte dung lượng từ các chỉ mục bị phân mảnh cao trong msdb.

Tôi có thể thấy cách lưu trữ truy vấn có thể giúp tối ưu hóa chiến lược lập chỉ mục của bạn và tối ưu hóa truy vấn / kết hợp / xóa một số thông tin được lưu trữ trong MSDB.


1
Ngoài các tính năng sử dụng được [msdb]ghi chú trong trích dẫn, "các quy trình khác" sẽ bao gồm những thứ như: dbmail, dịch vụ máy chủ quản lý trung tâm (CMS) (đáng chú ý nhất là danh sách Máy chủ đã đăng ký), tôi nghĩ ai đó trong các nhận xét về bài đăng được liên kết đó đã đề cập Quản lý dựa trên chính sách (PBM) và tôi nghĩ Kiểm toán máy chủ (ít nhất là các định nghĩa, nhưng tôi chưa xác nhận điều này).
Solomon Rutzky

5

@SqlWorldWide đã trả lời phần "tại sao [msdb]" của câu hỏi vì vậy tôi sẽ không sao chép nó ở đây. Nhưng để trả lời "tại sao không [master], [model], [tempdb]" một phần của câu hỏi:

  • [tempdb]là lưu trữ tạm thời và về bản chất dường như sẽ không bao giờ được hưởng lợi từ tối ưu hóa tự động hoặc khả năng cung cấp phân tích lịch sử. Nếu Cửa hàng truy vấn theo dõi số liệu thống kê thực hiện về Quy trình được lưu trữ, điều đó sẽ không giúp ích ở đây khi Quy trình được lưu trữ tồn tại ở nơi khác. Và mặc dù có thể tạo các Thủ tục được lưu trữ tạm thời, các Procs được lưu trữ tạm thời cục bộ có thể sẽ không được hưởng lợi từ điều này vì tên của chúng bao gồm một mã băm duy nhất để phân tách các tên tương tự qua nhiều phiên. Và mặc dù các Procs được lưu trữ tạm thời toàn cầu có một tên nhất quán trong các phiên, do tính chất tạm thời, không có cách nào để giả định rằng các Procs được lưu trữ tạm thời toàn cầu có cùng tên trong các phiên (giả sử không cùng lúc) sẽ có cùng mã, và do đó không thể có ý nghĩa /thống kê tương quan .

  • [model]là khuôn mẫu để tạo cơ sở dữ liệu mới (bao gồm [tempdb], được tạo lại mỗi lần phiên bản SQL Server khởi động / khởi động lại). Truy vấn không thực hiện từ đây. Tuy nhiên, tôi cho rằng có thể có ý nghĩa khi cho phép Cửa hàng truy vấn được bật ở đây để nó được BẬT theo mặc định khi tạo DB mới. Nhưng, tuy nhiên để tuy nhiên, điều đó có nghĩa Query cửa hàng sẽ được cho phép trong [tempdb], và đó chỉ là ngớ ngẩn (xem điểm trực tiếp ở trên).

    CẬP NHẬT:
    Woah, Nelly! Tôi vừa đọc lại câu hỏi ban đầu dẫn đến câu hỏi này và nhận thấy một điều kỳ lạ: chỉ có thông báo lỗi cho [master][tempdb]; không có lỗi báo cáo cho [model]. Có thể OP chỉ bỏ qua thông báo lỗi đó khi sao chép vào câu hỏi, vì vậy tôi đã chạy phần sau trên SQL Server 2016 SP1-CU7-GDR (13.0.4466.4) để tự mình xem:

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

    Và kết quả? [model][IsQueryStoreEnabledByDefault]được trả về, nhưng [tempdb]không trong kết quả! Vì vậy, một bổ sung tuy nhiên cho hai "tuy nhiên" đầu tiên, dường như [model] có thể kích hoạt Cửa hàng truy vấn mà a) mặc định Hỗ trợ truy vấn được lưu trữ (vâng, đó là một từ, tôi thậm chí đã kiểm tra ;-) cho các DB mới được tạo và b) được bỏ qua cho việc tạo lại [tempdb]khi bắt đầu dịch vụ (do đó đây không phải là cửa sau để bật dịch vụ này [tempdb]).  

  • [master]là cơ sở dữ liệu hệ thống chính và bạn không nên có mã chạy ở đây. Ngoài ra, các Thủ tục được lưu trữ tồn tại ở đây và thường được sử dụng sẽ không được hưởng lợi từ tối ưu hóa hoặc thực thi trong ngữ cảnh Cơ sở dữ liệu người dùng nơi chúng được gọi (ví dụ: các procs được lưu trữ hệ thống bắt đầu sp_là một trường hợp đặc biệt trong đó chúng "xuất hiện" DB - không cần phải có đủ điều kiện với [master]..- và thực thi như thể chúng thực sự tồn tại trong mỗi DB) và có thể bị chi phối bởi Query Store trong (các) Cơ sở dữ liệu người dùng nơi chúng được gọi.


Khi bạn chạy mô hình USE CHỌN * TỪ sys.database_query_store_options; Sau khi thiết lập mô hình Truy vấn lưu trữ trên, nó không hiển thị như trên. NHƯNG> Như bạn nói cơ sở dữ liệu mới đã bật, trong trường hợp của tôi, nó đã sử dụng các thay đổi tùy chọn mà tôi đã chọn khi đập vào nó trước đó trong ngày. Vì vậy, nếu bạn định sử dụng mô hình, có lẽ bạn muốn Đặt tất cả các tùy chọn Cửa hàng Truy vấn theo sở thích của mình thành những bất ngờ thú vị.
James Jenkins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.