Chính xác thì SQL Server 2014 có thể thực thi trong chế độ hàng loạt như thế nào?


21

Khi một chỉ mục lưu trữ cột đang được sử dụng trong truy vấn, SQL Server có thể sử dụng chế độ hàng loạt. Tài liệu mỏng về những gì có thể chạy trong chế độ hàng loạt và những gì không thể. Vui lòng xem kế hoạch truy vấn (tạo động lực) sau đây trong đó một số điều đáng ngạc nhiên thực hiện trong chế độ hàng loạt (màu xanh lá cây):

nhập mô tả hình ảnh ở đây

(Đây là một kế hoạch ước tính. Tôi đã sử dụng kế hoạch thực tế để xác minh rằng chế độ thực thi thực tế là lô.)

Lưu ý rằng chỉ có phần xây dựng của T1 sử dụng chỉ mục cột. Tất cả các đầu vào đầu dò (T2 và T3) là các hàng. Dữ liệu của họ dường như chuyển sang chế độ hàng loạt. Tôi luôn nghĩ rằng chế độ hàng loạt đang được sử dụng cho luồng dữ liệu chỉ chạy qua phía đầu dò.

Dường như dữ liệu có thể chuyển sang chế độ hàng loạt ngay cả khi nó không bắt nguồn từ chỉ mục của cột. Điều đó đặt ra câu hỏi: Tại sao SQL Server không sử dụng chế độ hàng loạt cho các truy vấn chỉ dành cho cửa hàng? Có thể có lợi cho một số trong số họ. Việc sử dụng chỉ mục cột có phải là một yêu cầu chính thức cần thiết để khiến SQL Server xem xét chế độ hàng loạt không? Chúng ta có thể thêm một bảng giả hàng không với chỉ mục của cửa hàng cột để tạo ra chế độ hàng loạt và nhận ra hiệu suất tăng?

Chính xác những gì có thể chạy trong chế độ hàng loạt như SQL Server 2014?


5
Tại sao SQL Server không sử dụng chế độ hàng loạt cho các truy vấn chỉ dành cho cửa hàng? Bởi vì CS chỉ hỗ trợ chế độ hàng loạt như bây giờ. Có thể có lợi cho một số trong số họ. Việc sử dụng chỉ mục cột có phải là một yêu cầu chính thức cần thiết để khiến SQL Server xem xét chế độ hàng loạt không? Có CS là một yêu cầu. Có một mục kết nối vẫn đang hoạt động Hỗ trợ Chế độ hàng loạt cho Cửa hàng Row được mở bởi Neugebauer.
Kin Shah

2
Trong năm 2016, có một mẹo mới có thể có để có chế độ hàng loạt được coi là BTW sqlmag.com/sql-server/ mẹo
Martin Smith

Câu trả lời:


30

Chính xác những gì có thể chạy trong chế độ hàng loạt như SQL Server 2014?

SQL Server 2014 thêm phần sau vào danh sách ban đầu của các toán tử chế độ hàng loạt:

  • Tham gia Hash ngoài (bao gồm tham gia đầy đủ)
  • Hash Semi Tham gia
  • Hash Anti Semi Tham gia
  • Liên minh tất cả (chỉ liên kết)
  • Tổng hợp hàm băm vô hướng (không có nhóm theo)
  • Đã xóa Batch Hash Table

Dường như dữ liệu có thể chuyển sang chế độ hàng loạt ngay cả khi nó không bắt nguồn từ chỉ mục của cột.

SQL Server 2012 rất hạn chế trong việc sử dụng các toán tử lô. Các kế hoạch chế độ hàng loạt có hình dạng cố định, dựa vào phương pháp phỏng đoán và không thể khởi động lại chế độ hàng loạt sau khi quá trình chuyển sang chế độ hàng được thực hiện.

SQL Server 2014 thêm chế độ thực thi (lô hoặc hàng) vào khung thuộc tính chung của trình tối ưu hóa truy vấn, có nghĩa là nó có thể xem xét chuyển sang và ra khỏi chế độ hàng loạt tại bất kỳ điểm nào trong kế hoạch. Chuyển đổi được thực hiện bởi các bộ điều hợp chế độ thực thi vô hình trong kế hoạch. Những bộ điều hợp này có chi phí liên quan đến chúng để hạn chế số lượng chuyển đổi được giới thiệu trong quá trình tối ưu hóa. Mô hình linh hoạt mới này được gọi là Thực thi chế độ hỗn hợp.

Các bộ điều hợp chế độ thực thi có thể được nhìn thấy trong đầu ra của trình tối ưu hóa (mặc dù đáng buồn là không có trong các kế hoạch thực hiện có thể nhìn thấy của người dùng) với TF 8607 không có giấy tờ. Ví dụ: những điều sau đây được ghi lại cho một hàng đếm truy vấn trong một hàng lưu trữ:

Bộ điều hợp Row to Batch to Row

Việc sử dụng chỉ mục cột có phải là một yêu cầu chính thức cần thiết để khiến SQL Server xem xét chế độ hàng loạt không?

Đó là ngày hôm nay, vâng. Một lý do có thể cho hạn chế này là nó tự nhiên hạn chế xử lý chế độ hàng loạt thành Phiên bản doanh nghiệp.

Chúng ta có thể thêm một bảng giả hàng không với chỉ mục cột để tạo chế độ hàng loạt không?

Vâng, điều này hoạt động. Tôi cũng đã thấy mọi người tham gia chéo với một chỉ mục cửa hàng cột đơn hàng vì lý do này. Gợi ý mà bạn đưa ra trong các bình luận để lại tham gia vào một bảng cột giả trên false là rất tuyệt vời.

-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*) 
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;

Kế hoạch với hình nộm bên trái tham gia:

Chế độ hàng loạt với bảng giả

Tài liệu mỏng

Thật.

Các nguồn thông tin chính thức tốt nhất là Chỉ mục cột được mô tảĐiều chỉnh hiệu suất của cột máy chủ SQL .

SQL Server MVP Niko Neugebauer có một loạt tuyệt vời trên cột lưu trữ nói chung ở đây .

Có một số chi tiết kỹ thuật tốt về các thay đổi năm 2014 trong bài viết Nghiên cứu của Microsoft, Cải tiến đối với Cửa hàng Cột SQL Server (pdf) mặc dù đây không phải là tài liệu chính thức của sản phẩm.

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.