Kế hoạch bắt buộc về thứ hai có thể đọc được


14

Nếu một kế hoạch bị bắt buộc trên chính trong Nhóm sẵn có, nó có được áp dụng cho các truy vấn chạy trên thứ cấp không?

Tôi đang tìm kiếm câu trả lời bao gồm cả khả năng buộc kế hoạch:

Tôi đã đọc những điều sau đây cho thấy các kế hoạch bắt buộc của QS không được thực hiện, nhưng không thể tìm thấy bất cứ điều gì có thẩm quyền trong tài liệu, hoặc bất cứ điều gì về hướng dẫn kế hoạch.

Bằng chứng thuyết phục về việc ép buộc sẽ là sự hiện diện của Use Planhoặc PlanGuideNamePlanGuideDBcác tài sản trong kế hoạch thực hiện thứ cấp.

Câu trả lời:


18

Buộc truy cập gói kế hoạch KHÔNG ảnh hưởng đến các truy vấn trên thứ cấp

Sử dụng Query Store để buộc một kế hoạch trên chính chắc chắn trông giống như nó buộc kế hoạch trên thứ cấp.

Tôi đã thử chạy một truy vấn trên một máy chủ không phải là prod, và sau đó sp_query_store_flush_dbxóa kho lưu trữ truy vấn (được yêu cầu để có được dữ liệu để đồng bộ hóa với phụ). Đây là phụ ở bên trái (lưu ý cảnh báo được khoanh tròn về việc "chỉ đọc") và chính ở bên phải:

ảnh chụp màn hình giao diện người dùng của cửa hàng truy vấn

Bây giờ tôi sẽ nhấp vào "Kế hoạch bắt buộc" ở bên phải và sau đó làm mới cả hai chế độ xem:

ảnh chụp màn hình giao diện người dùng của cửa hàng truy vấn hiển thị cả hai kế hoạch bắt buộc

Vì vậy, "buộc" ít nhất được thực hiện trong các bảng Cửa hàng Truy vấn cơ bản. Điều này có ý nghĩa, cho rằng các bài viết được trích dẫn trong OP đưa ra quan điểm rằng việc buộc truy vấn sẽ được giữ nguyên sau khi chuyển đổi dự phòng:

Câu hỏi: QDS sẽ giữ lại thông tin Kế hoạch FORCED khi chuyển đổi cơ sở dữ liệu từ bản sao chính sang bản sao phụ?

Trả lời: Có, QDS lưu trữ thông tin Kế hoạch cưỡng bức trong bảng sys.query_store_plan, vì vậy trong trường hợp chuyển đổi dự phòng, bạn sẽ tiếp tục thấy hành vi tương tự trên Chính mới.

Nhưng hành vi cưỡng bức có thực sự diễn ra? Bây giờ tôi sẽ chạy cùng một truy vấn trên cả hai máy chủ. Trên chính, như mong đợi, thuộc tính "UsePlan" có trong kế hoạch XML:

<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="82"
           CompileCPU="78" CompileMemory="2104" UsePlan="true">

Và trong giao diện người dùng:

ảnh chụp màn hình của kế hoạch thực hiện trong SSMS hiển thị thuộc tính "kế hoạch sử dụng"

Trên thứ cấp (lưu ý tên máy chủ khác nhau), kế hoạch không bị ép buộc . Đây là đoạn mã XML cùng kế hoạch:

<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="32" 
           CompileCPU="28" CompileMemory="1656">

ảnh chụp màn hình của kế hoạch thực hiện trong SSMS hiển thị thuộc tính không có "kế hoạch sử dụng"

Hướng dẫn kế hoạch KHÔNG ảnh hưởng đến các truy vấn trên phụ

Tôi đã tạo một hướng dẫn kế hoạch trên chính bằng mã này (tên bảng đã thay đổi để bảo vệ người vô tội):

EXEC sp_create_plan_guide 
    @name = 'plan-guide-test',
    @stmt = N'SELECT TOP (1000) * 
FROM dbo.TableName t 
WHERE 
    NOT EXISTS 
    (
        SELECT NULL 
        FROM dbo.OtherTable o 
        WHERE t.Id = o.TableName
    );',
    @type = N'SQL',
    @module_or_batch = NULL,
    @hints = N'OPTION (MAXDOP 1)';

Tất nhiên, hướng dẫn kế hoạch có hiệu lực trên chính, bằng chứng là kế hoạch thực hiện:

<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
            PlanGuideDB="..._UAT" PlanGuideName="plan-guide-test" ...>

ảnh chụp màn hình của kế hoạch thực hiện trong SSMS hiển thị các thuộc tính hướng dẫn kế hoạch

Tôi đã xác nhận tại thời điểm này rằng hướng dẫn kế hoạch đã được nhân rộng lên thứ cấp.

Chạy cùng một truy vấn trên thứ cấp, kế hoạch thực hiện bị thiếu tất cả các dấu hiệu bị ép buộc bởi một hướng dẫn kế hoạch:

<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
            QueryHash="0xECF8A24F126EE77A" QueryPlanHash="0x0E93CF7FEAC1B6EA" 
            RetrievedFromCache="true" SecurityPolicyApplied="false">

ảnh chụp màn hình của kế hoạch thực hiện trong XML với các thuộc tính hướng dẫn kế hoạch bị thiếu

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.