Trường hợp truy vấn máy chủ được liên kết được thực hiện ở đâu?


8

Tôi có hai phiên bản ServerAServerB và tôi đã tạo một máy chủ được liên kết trong ServerA cho ServerBLinksrv_B .

Tôi có thể thực hiện một truy vấn trên ServerA bằng cách sử dụng quy ước đặt tên gồm bốn phần:

SELECT * FROM Linksrv_B.master.sys.databases

hoặc OPENQUERY():

SELECT * FROM OPENQUERY(Linksrv_B, 'SELECT * FROM master.sys.databases')  

Tôi biết máy chủ được liên kết hoạt động trên cơ sở dữ liệu không đồng nhất bằng cách sử dụng giao dịch phân tán dưới dạng một hàng.

  1. Nhà cung cấp OLEDB được bắt đầu / kết nối ở đâu? ServerA hay ServerB?
  2. Trường hợp truy vấn được thực hiện trên ServerA hoặc ServerB? Có tối ưu hóa đi vào chơi nếu trên máy chủ nào?
  3. Trường hợp tập kết quả được lưu trữ?
  4. Bất cứ ai có thể cho chúng tôi một lời giải thích chi tiết về cách máy chủ được liên kết hoạt động.

1
Kendra Little có một video tuyệt vời về chủ đề này: brentozar.com/archive/2015/05/ Kẻ
MguerraTorres

Câu trả lời:


5

1 - Nhà cung cấp OLEDB được khởi tạo trên Máy chủ A, Máy chủ B xem đó là kết nối và truy vấn thông thường, không biết Sever A là Máy chủ SQL, nó chỉ là máy khách của nó.

2 - Truy vấn được thực hiện trên cả hai. Máy chủ A chuyển truy vấn đến Máy chủ B thực thi nó, sau đó Máy chủ A hoạt động với kết quả. Trình tối ưu hóa hoạt động trên cả hai, nhưng không thể nói chuyện với các máy chủ khác.

Đưa ra một truy vấn không phức tạp, hiệu suất sẽ tương đương. Tuy nhiên, khi bạn bắt đầu truy cập vào các truy vấn phức tạp hoặc bộ dữ liệu lớn, bạn sẽ thấy hiệu suất tăng bằng cách tìm nạp những gì bạn cần từ Máy chủ B vào bảng tạm thời và sau đó sử dụng dữ liệu có trên Máy chủ A. (Giả sử bạn cần trộn và khớp dữ liệu trên các máy chủ). Về cơ bản, với cú pháp OPENQUERY, bạn chuyển toàn bộ truy vấn đến máy chủ B (hy vọng bao gồm một mệnh đề where) sau đó trả lại dữ liệu cho Serer A. Với bốn phần đặt tên, bạn không có quyền kiểm soát và trình tối ưu hóa sẽ nhanh chóng quyết định tìm nạp tất cả dữ liệu trong bảng từ Máy chủ B và sau đó loại bỏ dựa trên các tiêu chí khác (tham gia, ở đâu, v.v.).

3 - Kết quả không được lưu trong bộ nhớ cache (trừ khi SQL lưu trữ dữ liệu thông thường). Trừ khi bạn lưu trữ kết quả từ truy vấn máy chủ được liên kết vào bảng tạm thời ở đâu đó.

4 - Nếu bạn quen thuộc với cách các ứng dụng kết nối với cơ sở dữ liệu và thực hiện các truy vấn thì quá trình này rất giống nhau. Ngoại trừ sự khác biệt về xác thực, nó giống nhau, chỉ là nó cho phép dễ dàng trộn và khớp dữ liệu từ nhiều máy chủ thành một tập kết quả. Nhưng hiệu suất của bạn sẽ phụ thuộc rất lớn vào lượng dữ liệu được lấy từ Máy chủ B và nhận thức được khả năng hạn chế của trình tối ưu hóa để ngăn bạn kéo toàn bộ bảng khỏi Máy chủ B, ngay cả khi bạn chỉ cần 5 hàng trong số đó.

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.