Na LocalServer (SQL Server 2008 R2), mam synonimem nazywa syn_view1
wskazując na serwerze połączonym remoteserver.remotedb.dbo.view1
Wydajność efekt Synonimy na serwerze połączonym w programie SQL Server
Ten SLOW zapytanie trwa 20 sekund uruchomić .
select e.column1, e.column2
from syn_view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Ten szybki zapytanie trwa 1 sekundy uruchomić.
select e.column1, e.column2
from remoteserver.remotedb.dbo.view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Jedyna różnica w obu zapytaniach to w rzeczywistości obecność synonimu. Oczywiście, synonim ma wpływ na wydajność zapytania.
plan wykonania dla zapytania SLOW jest:
Plan Cost % Subtree cost
4 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 3.3521
3 Filter
I/O cost: 0.000000 CPU cost: 0.008800 Executes: 1
Cost: 0.008800 0.26 3.3521
2 Compute Scalar
I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1
Cost: 0.000000 0.00 3.3433
1 Remote Query
I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1
Cost: 3.343333 99.74 3.3433
A dla zapytania szybko:
Plan Cost % Subtree cost
3 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 0.1974
2 Compute Scalar
I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1
Cost: 0.000000 0.00 0.1974
1 Remote Query
I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1
Cost: 0.197447 100.00 0.1974
moim rozumieniu jest to, że w zapytaniu powolny, serwer pobiera wszystkie dane z zdalny serwer, następnie stosuje filtr (ale bez indeksu), podczas gdy w zapytaniu FAST serwer pobiera przefiltrowane dane ze zdalnego serwera, a więc używa zdalnych indeksów.
Czy jest jakiś sposób użycia synonimu podczas bycia szybkim? Może konfiguracja połączonego serwera? lokalny serwer bazy danych?
Dzięki za pomoc!
Zalecamy utworzenie procedury na serwerze zdalnym. –
@AaronBertrand, co by to zmieniło? Czy indeksy będą używane?Czy byłbym w stanie uniknąć podania pełnej, w pełni kwalifikowanej nazwy połączonego serwera w mojej procedurze przechowywanej? –
Tak i tak. Można utworzyć synonim nazwy procedury składowanej zamiast widoku. –