Thỏa thuận với các giao dịch trong một thủ tục được lưu trữ được gọi bởi báo cáo SSRS là gì?


7

Hãy xem xét những điều sau đây:

CREATE PROCEDURE dbo.usp_trantest AS
SELECT @@TRANCOUNT as trancount;
GO

Khi tôi gọi usp_trantestthủ công từ bên trong SSMS, trancount là 0. Nếu tôi chạy báo cáo SSRS có chứa một tập dữ liệu truy vấn cùng một thủ tục được lưu trữ, thì trancount được ghi là 1.

Thực hiện theo dõi T-SQL của phương thức SSRS cho thấy một sự kiện theo dõi cho lệnh gọi thủ tục được lưu trữ giống hệt với lệnh tôi đã thực hiện từ SSMS.

Có một số hành vi có thể thay đổi dựa trên bối cảnh SSRS không? Giống như, một giao dịch ngầm được mở cho cuộc gọi sql động hoặc một cái gì đó, hoặc SSRS tạo bối cảnh giao dịch bên ngoài T-SQL?

Biên tập:

Trong câu trả lời đã bị xóa từ một người nào đó (cảm ơn, người lạ!) Đã đề xuất rằng bộ dữ liệu của báo cáo SSRS có thể đã "Sử dụng giao dịch đơn lẻ khi xử lý các truy vấn" được chọn. Đây quả nhiên là một trường hợp đấy!

Tôi đã thực hiện một số thử nghiệm tiếp theo và với cài đặt này không được kiểm tra, @@TRANCOUNTđiều tương tự cho dù đang chạy trong SSMS hay từ báo cáo SSRS.

Vì vậy, có vẻ như chúng ta có thể rút ra kết luận rằng cài đặt Nguồn dữ liệu này khiến báo cáo SSRS tạo bối cảnh giao dịch trên cơ sở dữ liệu trước khi chạy các truy vấn. Vì giao dịch bổ sung này không xuất hiện trong theo dõi T-SQL, nên chúng tôi có thể giả định rằng nó đang được mở bằng phương thức API, thay vì câu lệnh T-SQL.


1
Ai đó đã xóa một câu trả lời (không chắc tại sao) hỏi xem nguồn dữ liệu cho báo cáo SSRS của tôi có thể đã "Chạy tất cả các truy vấn trong một giao dịch" được chọn không. Tôi đã không nghĩ về điều đó, và tôi khá chắc chắn rằng nó làm! Điều này có thể gợi ý rằng SSRS đang tạo một giao dịch ở cấp API sẽ không hiển thị trong theo dõi T-SQL, nhưng tôi chưa thử nghiệm điều này. Tôi đoán cũng có khả năng SSRS sẽ làm điều này cho mỗi truy vấn ngay cả khi cài đặt nguồn dữ liệu đó không được kiểm tra, nhưng điều đó không giúp trả lời câu hỏi.
NRzingh

Vui lòng cập nhật câu hỏi / bình luận sau khi bạn kiểm tra.
Stoleg

Câu trả lời:


2

Trên nguồn dữ liệu của báo cáo SSRS, có một thuộc tính cho "Sử dụng giao dịch đơn lẻ khi xử lý các truy vấn". Có một vài hành vi khác nhau gắn liền với việc đánh dấu hộp kiểm này:

1) Như bạn đã thấy, SSRS sẽ sử dụng một giao dịch rõ ràng để xử lý các tập dữ liệu bằng nguồn dữ liệu này, nếu hộp kiểm này được đánh dấu. Khi nó không được đánh dấu, không có giao dịch rõ ràng.

2) Khi hộp kiểm này không được đánh dấu, các bộ dữ liệu sử dụng nguồn dữ liệu sẽ thực thi song song, sử dụng các kết nối riêng với máy chủ. Nếu hộp kiểm được đánh dấu, thì các bộ dữ liệu sẽ sử dụng một kết nối duy nhất và được xử lý theo kiểu truyền thống.

Ngoài ra, có thể có các động lực khác nhau để sử dụng hộp kiểm này. Hai cái chính là:

1) Đọc tính nhất quán : Nếu bạn đang sử dụng Snapshot Isolation , bạn có thể muốn tất cả các bộ dữ liệu nhất quán theo một thời điểm duy nhất. Trong trường hợp này, sử dụng một giao dịch rõ ràng và sử dụng mức cô lập Ảnh chụp nhanh có thể đảm bảo tất cả các báo cáo trong giao dịch đều nhất quán theo một thời điểm duy nhất.

2) Hiệu suất : Tùy thuộc vào một số yếu tố (thực sự là một chủ đề riêng biệt), bạn có thể thấy sự khác biệt hiệu suất đáng kể giữa việc chạy các truy vấn cho các bộ dữ liệu khác nhau song song với việc chạy chúng một cách an toàn.


0

Trong SSRS 2012, tôi đã không gặp phải hành vi tương tự được chỉ ra ở đây. SP của tôi đã chạy trong các giao dịch mặc dù không có hộp kiểm tra.

Kiểm tra hộp không có ảnh hưởng đến số lượng giao dịch. Trong cả hai trường hợp, @@ TRANCOUNT là = 1.


Bạn có chắc là báo cáo đã thực sự chạy lại truy vấn không? Điều này có vẻ như SSRS đã sử dụng lại các kết quả được lưu trong bộ nhớ cache, điều này có thể xảy ra trong VS. Thử nghiệm của tôi cũng vào năm 2012.
NRzingh

Sau khi phân tích sâu hơn, tôi tin rằng Infor ERP đang gọi báo cáo SSRS đã chiếm quyền điều khiển Sp để thực hiện một số thiết lập của riêng nó. Vì vậy, kết quả của tôi có khả năng không hợp lệ.
Dan
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.