Giới thiệu
Lưu trữ truy vấn là một tính năng mới, được giới thiệu trong SQL Server 2016, cho phép quản trị viên cơ sở dữ liệu xem xét trước đây các truy vấn và các kế hoạch liên quan của chúng bằng cách sử dụng GUI có sẵn trong SQL Server Management Studio, cũng như phân tích hiệu suất truy vấn bằng các Chế độ xem Quản lý Động nhất định. Cửa hàng truy vấn là một tùy chọn cấu hình trong phạm vi cơ sở dữ liệu và có sẵn để sử dụng nếu mức độ tương thích của cơ sở dữ liệu được đề cập là 130.
Cửa hàng truy vấn tương tự như các công nghệ như vậy trong nền tảng cơ sở dữ liệu Oracle như Kho lưu trữ khối lượng công việc tự động (AWR). AWR nắm bắt thống kê hiệu suất trên quy mô lớn hơn cả Query Store và cho phép quản trị viên cơ sở dữ liệu phân tích trước đây về hiệu suất. Các khái niệm như khoảng thời gian lưu giữ và giới hạn lưu trữ của dữ liệu được thu thập có sẵn trong kiến trúc AWR khi chúng có trong Cửa hàng truy vấn. Các tùy chọn cấu hình chính sau đây khả dụng khi bật Cửa hàng truy vấn:
- Chế độ Hoạt động: Xác định xem Cửa hàng truy vấn sẽ chấp nhận dữ liệu mới được ghi lại (Chế độ ghi đọc) hay chỉ lưu trữ dữ liệu cũ có sẵn cho báo cáo (Chế độ chỉ đọc)
- Khoảng thời gian tải dữ liệu: Xác định tần suất bộ đệm bộ nhớ Lưu trữ Truy vấn được chuyển vào đĩa. Nhớ lại rằng dữ liệu Cửa hàng truy vấn được lưu trữ trong cơ sở dữ liệu nơi Cửa hàng truy vấn được bật. Giá trị mặc định là 15 phút.
- Khoảng thời gian Thu thập Thống kê: Xác định tần suất thu thập thống kê thời gian chạy của cửa hàng truy vấn.
- Kích thước Tối đa: Xác định mức độ có thể phát triển của kho lưu trữ cho thống kê Cửa hàng truy vấn. Theo mặc định, nó là 100MB.
- Chế độ Chụp cửa hàng Truy vấn: Xác định mức độ chi tiết của chụp truy vấn. TẤT CẢ, TỰ ĐỘNG và KHÔNG CÓ là các tùy chọn khả dụng. Giá trị mặc định là TỰ ĐỘNG.
- Chế độ Dọn dẹp Dựa trên Kích thước: Xác định xem Cửa hàng truy vấn có xóa dữ liệu cũ khi đạt đến kích thước tối đa hay không.
- Ngưỡng truy vấn cũ: Xác định số ngày mà Cửa hàng truy vấn lưu giữ dữ liệu. Giá trị mặc định được đặt thành ba mươi ngày.
Hình 2 Tùy chọn cửa hàng truy vấn
Lưu trữ truy vấn là một tính năng trong phạm vi cơ sở dữ liệu có thể được bật bằng cách sử dụng GUI (SQL Server Management Studio) hoặc bằng cách chạy lệnh sau:
ALTER DATABASE [WideWorldImporters] SET QUERY_STORE =ON;
Phép đo từ xa truy vấn do Query Store thu thập được lưu trữ trong các bảng hệ thống trong cơ sở dữ liệu nơi Query Store đã được kích hoạt.
Truy vấn Mẫu &Báo cáo Mặc định
Cho đến nay mọi thứ tôi đã viết đều có sẵn từ nhiều nguồn khác; một số trong số chúng có thể được tìm thấy trong phần tài liệu tham khảo.
Trong phần này, chúng ta sẽ xem xét sâu hơn một chút về những gì chúng ta thực sự có thể làm với Query Store sau khi chúng ta đã kích hoạt nó bằng các ví dụ đơn giản. Hãy xem xét hai truy vấn sau:
Liệt kê 1:Tìm nạp Bản ghi bằng Bộ lọc Cụ thể
sử dụng WideWorldImportersgoselecta.ContactPersonID, a.OrderDate, a.DeliveryMethodID, a.Comments, b.OrderedOutersfromPurchasing.PurchaseOrders ainner tham gia Purchasing.PurchaseOrderLines bon a.PurchaseOrderID =b.Purchasing 1000 ML20 / 1000 ML20300 trước>Liệt kê 2:Tìm nạp Bản ghi bằng Phạm vi
sử dụng WideWorldImportersgoselecta.ContactPersonID, a.OrderDate, a.DeliveryMethodID, a.Comments, b.OrderedOutersfromPurchasing.PurchaseOrders ainner tham gia Purchasing.PurchaseOrderLines bon a.PurchaseOrderID =Hãy chú ý đến phiên bản thay thế của các truy vấn này được viết bằng chữ hoa:
Liệt kê 1:Tìm nạp Bản ghi bằng Bộ lọc Cụ thể (Chữ hoa)
SỬ DỤNG WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID, A.ORDERDATE, A.DELIVERYMETHODID, A.COMMENTS, B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER THAM GIA MUA HÀNG. trước>Liệt kê 2:Tìm nạp Bản ghi bằng Phạm vi (Chữ hoa)
SỬ DỤNG WIDEWORLDIMPORTERSGOSELECTA.CONTACTPERSONID, A.ORDERDATE, A.DELIVERYMETHODID, A.COMMENTS, B.ORDEREDOUTERSFROMPURCHASING.PURCHASEORDERS AINNER THAM GIA MUA HÀNG. / pre>Như bạn có thể thấy, chúng tôi đã chạy các truy vấn này nhiều lần bằng cách sử dụng từ khóa GO. Do đó, chúng tôi có một số lượng dữ liệu hợp lý để làm việc. Điều đầu tiên chúng ta nên biết khi sử dụng Cửa hàng truy vấn để phân tích hiệu suất là có sáu báo cáo mặc định được tích hợp trong Cửa hàng truy vấn SQL Server 2016 như trong Hình 3.
Hình 3 Báo cáo Cửa hàng Truy vấn
Tên của các báo cáo được mô tả chi tiết trong các bài viết trước cũng như trong tài liệu của Microsoft. Dữ liệu do các báo cáo này cung cấp được truy xuất từ các Chế độ xem quản lý động chính được liệt kê bên dưới:
DMV thống kê kế hoạch
- sys.query_store_query_text - chứa các văn bản truy vấn duy nhất được thực thi dựa trên cơ sở dữ liệu
- sys.query_store_plan - chứa một kế hoạch ước tính cho truy vấn với thống kê thời gian biên dịch
- sys.query_context_settings - chứa một số kết hợp duy nhất của kế hoạch ảnh hưởng đến cài đặt mà theo đó các truy vấn được thực thi
- sys.query_store_query - các mục truy vấn được theo dõi và buộc riêng trong Cửa hàng truy vấn
DMV thống kê thời gian chạy
- sys.query_store_runtime_stats_interval - Cửa hàng truy vấn chia thời gian thành các khoảng thời gian được tạo tự động (khoảng thời gian) và lưu trữ số liệu thống kê tổng hợp về khoảng thời gian đó cho mọi kế hoạch được thực thi
- sys.query_store_runtime_stats - chứa thống kê thời gian chạy tổng hợp cho các kế hoạch đã thực thi
Nhiều chi tiết hơn về cách sử dụng các DMV này có sẵn trong Tài liệu tham khảo của Microsoft. Trong bài viết này, chúng tôi chỉ sử dụng GUI là chủ yếu.
Như bạn có thể thấy từ Hình 4, chúng tôi xem xét báo cáo Tiêu thụ Tài nguyên Tổng thể trong khi trong phần tiếp theo, chúng tôi sẽ thu hẹp các truy vấn mà chúng tôi đã liệt kê trước đó và dữ liệu chúng tôi có thể truy xuất từ các truy vấn đơn giản này.
Hình 4 Báo cáo tiêu thụ tài nguyên tổng thể
Phân tích truy vấn bằng GUI
Một số điều chính cần được coi là hữu ích khi sử dụng Báo cáo cửa hàng truy vấn:
- Bạn có thể định cấu hình môi trường bằng cách nhấp vào nút được đánh dấu trong Hình 4. Hình 5 cho chúng ta thấy các chi tiết mà chúng ta có thể thay đổi để phù hợp với trường hợp sử dụng của mình:tiêu chí dữ liệu được trả về, phạm vi ngày và tập dữ liệu được trả lại. Ví dụ:nếu tôi muốn thấy rõ ID truy vấn được liên kết với các truy vấn mà tôi đang xem xét, tôi muốn giảm tập dữ liệu của mình từ Top 25 mặc định xuống Top 10 chẳng hạn.
Hình 5 Tùy chọn cấu hình báo cáo
Hình 6 25 truy vấn hàng đầu được thực hiện vào ngày 1 tháng 5 năm 2018
Hình 7 10 truy vấn hàng đầu được thực hiện vào ngày 1 tháng 5 năm 2018
- Biểu đồ thanh hiển thị dữ liệu chủ yếu theo thời gian trên trục x nhưng bạn có thể đi sâu vào một điểm dữ liệu cụ thể để xem dữ liệu dựa trên ID truy vấn. Mỗi ID truy vấn xác định một truy vấn cụ thể. Điều quan trọng cần lưu ý là một truy vấn được xác định duy nhất bằng cách băm văn bản. Do đó, một truy vấn trong chữ thường khác với cùng một truy vấn trong chữ hoa. Đây phải là một kiến thức phổ biến:các truy vấn đặc biệt là mối quan tâm đối với bộ đệm kế hoạch và chúng cũng có hại cho kho lưu trữ truy vấn cả về việc sử dụng không gian và phân tích thích hợp.
Hình 8 Truy vấn trong Liệt kê 1 (Chữ thường, Truy vấn 42480)
Hình 9 Truy vấn trong Liệt kê 3 (Chữ hoa, Truy vấn 42490)
- Quan sát quan trọng thứ ba là thực tế là khi một điểm dữ liệu được đánh dấu màu xanh lá cây, thì kế hoạch thực thi chi tiết được hiển thị trong ngăn dưới liên quan đến điểm dữ liệu đó. Trong Hình 7, điểm dữ liệu này đề cập đến ID truy vấn 42481 mà chúng tôi đã thực hiện trước đó (truy vấn đầy đủ được hiển thị trong Liệt kê 2). Di chuột qua điểm dữ liệu này sẽ hiển thị truy vấn, ID của nó và số lượng kế hoạch được liên kết với truy vấn này (xem Hình 8).
Hình 10 Truy vấn 42481 Chi tiết
Truy vấn của chúng tôi đã được thực hiện 1391 lần vì nó được Query Store ghi lại chính xác và hiển thị trong trục y (số lượng thực thi) của biểu đồ thanh trong Hình 10. Báo cáo đang được kéo trong khi lô vẫn đang thực thi. Do đó, chúng tôi không có tổng số đầy đủ (1500) thông báo cho chúng tôi biết rằng có dữ liệu thu thập theo thời gian thực mỗi khi thực hiện truy vấn. Ở phía bên phải, chúng ta cũng thấy Kế hoạch được sử dụng cho nhiều lần thực thi này (Kế hoạch 675). Chúng tôi có thể xác minh điều này bằng cách sử dụng truy vấn trong Liệt kê 5.
Danh sách 5
SỬ DỤNG WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry. * FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_idxt =Qry_store ASquery_query_text Txt Qry.query_query .query_text_idwhere Qry.query_id =42481;Hình 11 ID truy vấn và ID kế hoạch từ các DMV
Một chút điều chỉnh
Hãy xem xét một truy vấn khác.
Khi chúng tôi chạy truy vấn trong Liệt kê 6 và kiểm tra chi tiết từ Cửa hàng truy vấn, chi tiết kế hoạch thực thi tiết lộ rằng chúng tôi cần một chỉ mục để cải thiện 51%.
Liệt kê 6:Truy vấn dưới mức tối ưu
CHỌN HÀNG ĐẦU (1000) [OrderLineID], [OrderID], [StockItemID], [Description], [PackageTypeID], [Quantity], [UnitPrice], [TaxRate], [PickedQuantity], [PickingCompletedWhen], [LastEditedBy ], [LastEditedWhen] FROM [WideWorldImporters]. [Sales]. [OrderLines] trong đó unitPrice> 1000 GO 2000Hình 12 Chi tiết truy vấn dưới mức tối ưu
Hình 13 Kế hoạch thực thi truy vấn dưới mức tối ưu
Khi chúng tôi tạo chỉ mục được đề xuất bằng cách sử dụng câu lệnh trong Liệt kê 7, chúng tôi khiến Trình tối ưu hóa Truy vấn tạo một kế hoạch thực thi mới. Trong trường hợp này, kế hoạch thực thi mới được kỳ vọng sẽ cải thiện hiệu suất. Tuy nhiên, có những trường hợp những thay đổi nhất định có thể khiến hiệu suất bị giảm sút, chẳng hạn như những thay đổi đáng kể về khối lượng dữ liệu làm mất hiệu lực của thống kê hoặc giảm số lượng chỉ mục, v.v. Các truy vấn như vậy được cho là đã giảm hiệu suất và có thể được kiểm tra bằng cách sử dụng báo cáo Truy vấn đã hồi quy trong Cửa hàng truy vấn.
Liệt kê 7:Tạo chỉ mục
SỬ DỤNG [WideWorldImporters] GOCREATE KHÔNG ĐIỀU CHỈNH CHỈ SỐ [Custom_IX_UnitPrice] BẬT [Bán hàng]. [OrderLines] ([UnitPrice]) BAO GỒM ([OrderLineID], [OrderID], [StockItemID], [Description], [PackageTypeID], [Số lượng ], [TaxRate], [PickedQuantity], [PickingCompletedWhen], [LastEditedBy], [LastEditedWhen]) ĐIHình 14 Truy vấn được tối ưu hóa (Thay đổi trong kế hoạch thực thi)
Hình 15 Truy vấn được tối ưu hóa (Hai kế hoạch)
Hình 16 Truy vấn được tối ưu hóa (Kế hoạch bắt buộc)
Khi có nhiều kế hoạch cho một truy vấn như được hiển thị trong Hình 14 và Hình 16, chúng ta có thể yêu cầu trình tối ưu hóa luôn sử dụng một kế hoạch mà chúng tôi chọn bằng cách nhấp vào nút Kế hoạch buộc. Đây là một nhiệm vụ hơi tẻ nhạt trong các phiên bản trước của SQL Server.
Như bạn có thể thấy từ Hình 17, Cửa hàng truy vấn cho phép chúng tôi so sánh các kế hoạch khác nhau được liên kết với một truy vấn bằng cách sử dụng một số chỉ số.
Hình 17 So sánh các kế hoạch thực thi
Một lần nữa, chúng ta có thể sử dụng truy vấn trong Liệt kê 8 để xác minh các kế hoạch được liên kết với ID truy vấn này bằng cách sử dụng DMV. (Tham khảo Hình 11)
Liệt kê 8:Các kế hoạch được liên kết với truy vấn 42497
SỬ DỤNG WideWorldImportersGOSELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry. * FROM sys.query_store_plan AS PlJOIN sys.query_store_query AS Qry ON Pl.query_idxt =Qry_store ASquery_query_text Txt Qry.query_query .query_text_idwhere Qry.query_id =42497;Khám phá các biến thể
Một báo cáo hữu ích khác mà Cửa hàng truy vấn cung cấp cho chúng tôi là Truy vấn có mức độ thay đổi cao. Báo cáo này cho chúng ta thấy sự khác biệt giữa các chỉ số mong muốn đối với một truy vấn cụ thể trong một khoảng thời gian nhất định. Điều này rất hữu ích cho việc phân tích lịch sử về hiệu suất. Sử dụng các câu lệnh trong Liệt kê 9, chúng tôi tạo dữ liệu có thể đưa ra bức tranh về các biến thể sẽ trông như thế nào. Các bước trong quy trình chỉ cần tạo một bảng nhỏ và sau đó chèn các bản ghi bằng các kích thước lô khác nhau.
Liệt kê 9:Các kế hoạch được liên kết với truy vấn 42497
sử dụng WideWorldImportersgo-- Tạo một bảng Tablecreate (ID int ID (1000,1), FirstName varchar (30), LastName varchar (30), CountryCode char (2), HireDate datetime2 default getdate ()); - Chèn các bản ghi trong một loạt các kích thước khác nhau Chèn vào các giá trị bảng ('Kenneth', 'Igiri', 'NG', getdate ()); GO 10000insert vào các giá trị bảng ('Kwame', 'Boateng', 'GH', getdate ()); GO 10chèn vào các giá trị tableone ('Philip', 'Onu', 'NG', getdate ()); GO 100000chèn vào các giá trị tableone ('Kwesi', 'Armah', 'GH', getdate ()); GO 100Cửa hàng truy vấn hiển thị cho chúng tôi các chi tiết như giá trị tối thiểu và tối đa của các số liệu này cho các khoảng thời gian thực thi cụ thể của truy vấn mà chúng tôi quan tâm. Trong ví dụ này, chúng tôi thấy rằng đây chỉ đơn giản là kết quả của số lô mỗi lần thực hiện (lưu ý rằng các tham số thực sự đang được sử dụng để thực thi câu lệnh INSERT). Trong quá trình sản xuất, các yếu tố khác có thể là nguyên nhân dẫn đến các biến thể đó.
Hình 18 Sự thay đổi về thời lượng
Hình 19 Sự thay đổi trong các văn bản logic
Hình 20 Sự thay đổi trong số lần đọc vật lý
Kết luận
Trong bài viết này, chúng tôi đã xem xét môi trường GUI của SQL Server 2016 Query Store và một số điều chúng tôi có thể suy luận về hiệu suất của phiên bản của chúng tôi (đối với SQL) bằng cách sử dụng Query Store. Có một số bài báo trên Internet cho thấy các trường hợp sử dụng thậm chí nâng cao hơn và giải thích sâu hơn nhiều về bên trong. Bài viết này nên được sử dụng tốt cho các DBA cấp trung bình, những người muốn bắt đầu sử dụng Query Store để đánh giá / điều chỉnh hiệu suất.
Tài liệu tham khảo
- Phương pháp hay nhất với Cửa hàng truy vấn
- Cristiman, L. (2016) Cửa hàng truy vấn - Cài đặt và giới hạn
- Giám sát hiệu suất bằng cách sử dụng Cửa hàng truy vấn
- Lượt xem danh mục cửa hàng truy vấn
- Thủ tục đã lưu trữ trong cửa hàng truy vấn
- Cửa hàng truy vấn - Cách hoạt động và cách sử dụng nó
- Các tình huống sử dụng cửa hàng truy vấn
- Van de Lar, E. (2016) Cửa hàng truy vấn SQL Server 2016:Bắt buộc các kế hoạch thực thi bằng cách sử dụng Cửa hàng truy vấn
Công cụ hữu ích:
dbForge Query Builder dành cho SQL Server - cho phép người dùng tạo các truy vấn SQL phức tạp một cách nhanh chóng và dễ dàng thông qua giao diện trực quan trực quan mà không cần viết mã thủ công.