Tôi có một vấn đề về hiệu suất liên quan đến SQL Server / máy chủ / lượt xem được liên kết. Tôi hy vọng bạn có thể giúp tôi hiểu đâu là cách tốt nhất để làm những gì tôi muốn =).
- Tôi có một cơ sở dữ liệu K với 3 máy chủ được liên kết L1, L2, L3 đến 3 cơ sở dữ liệu X, Y, Z.
- Trong X, Y, Z i lần lượt có 3 khung nhìn gọi là V1, V2, V3.
- Tôi muốn truy vấn sự kết hợp của V1, V2, V3 bằng cơ sở dữ liệu K với máy chủ được liên kết L1, L2, L3.
Sau một số thử nghiệm, đây là tình huống:
- Trong SSMS, nếu tôi chạy truy vấn giả này
SELECT * FROM (L1.V1 u L2.V2 u L3.V3) WHERE some filters
, hiệu suất thực sự tuyệt vời - Nếu tôi tạo VK dạng xem trong cơ sở dữ liệu K, chứa liên kết của ba khung nhìn và sau đó tôi chạy truy vấn
SELECT * FROM VK WHERE some filters
thì hiệu suất sẽ kém hơn trường hợp 1
Câu hỏi
- Tại sao hiệu suất rất khác nhau?
- Làm thế nào tôi có thể cải thiện hiệu suất trong trường hợp 2?
Tôi quan tâm đến việc cải thiện hiệu suất trong trường hợp 2 vì tôi cần một chế độ xem để ánh xạ với nHbinernate trong phần mềm của chúng tôi ...
Cảm ơn trước, liên quan
CẬP NHẬT SAU BÀI VIẾT CỦA JOHN ALAN
Ok, tôi cố gắng nhưng không có kết quả. Tôi không phải là một DBA và kỹ năng của tôi về cấu hình DB thực sự hạn chế. Chúng ta có thể tiến hành từng bước không?
Trên máy chủ từ xa (
called Y
) tôi đã tạo một tài khoản mới (called linkedserver
) bằng cách bảo mật-> đăng nhập-> đăng nhập mới. Tôi chọn tên đăng nhập sau đó xác thực sql và tôi chọn một mật khẩu. cho cơ sở dữ liệu điếc tôi chọnmaster
. Trongserver roles
tab tôi chọnpublic
. trongUser mapping
tab tôi chọn các cơ sở dữ liệu liên quan đến các truy vấn từ xa và, đối với mỗi trong số chúng, tôi chọndb_ddladmin
vàpublic
vai trò. Sau đó, đối với mỗi cơ sở dữ liệu liên quan đến truy vấn từ xa, tôi đã kiểm tra quyền hiệu quả cho người dùng máy chủ được liên kết và có rất nhiềuALTER
và rất nhiềuCREATE
quyền nhưng không hiển thị KẾ HOẠCH (sau đó tôi cũng chọn cái này).Trên máy chủ cơ sở dữ liệu (
called X
) nơi máy chủ được liên kết đến Y tồn tại, tôi đã tạo một máy chủ được liên kết (called L1
). Trong TAB bảo mật, tôi đã chọnlocal user sa
vàremote user linkedserver
với mật khẩu của nó.
Khi tôi chạy truy vấn trên L1 mà không có XEM, tôi có kết quả tốt, Nếu tôi đặt truy vấn ở hiệu suất thấp XEM, không có gì thay đổi ...
Tôi nghĩ rằng tôi đã làm một số bước sai, nhưng tôi không biết nơi ...
ĐỐI VỚI CÂU HỎI TỐT HƠN
Đây là truy vấn tôi chạy mà không có chế độ xem bằng máy chủ được liên kết:
select * from
(
select * from dolph.agendasdn.dbo.vistaaccettazionegrp
union
select * from dolph.acampanet.dbo.vistaaccettazionegrp
union
select * from municipio.dbnet.dbo.vistaaccettazionegrp
) a
where cognome = 'test' and nome = 'test'
vào chế độ xem tôi chỉ đặt mã này
select * from dolph.agendasdn.dbo.vistaaccettazionegrp
union
select * from dolph.acampanet.dbo.vistaaccettazionegrp
union
select * from municipio.dbnet.dbo.vistaaccettazionegrp
sau đó tôi gọi select * from VIEW where cognome = 'test' and nome = 'test'
Vì thế..
- Trường hợp thứ 1 0-1 giây.
- Trường hợp thứ 2> 15 giây ...
Tôi nghĩ điều này là vô lý!
KẾ HOẠCH THỰC HIỆN
Kế hoạch thực hiện với truy vấn đơn giản, không sử dụng chế độ xem:
kế hoạch thực hiện bằng cách sử dụng khung nhìn: