原文: Linked Server performance tips
重點摘要:
透過linked server 所執行的遠端存取/交易,可能耗用大量的頻寬,所以在使用上,要注意能避免的overhead 要盡量避免。
當查詢裡包括遠端主機的資料時,用linked server 將比使用 OPENROWSET 或 OPENDATASOURCE 來得有效率。
當需要遠端主機回傳資料時,盡量讓資料先在遠端過濾完畢後再回傳;亦即,只取回必要的資料就好,以避免額外的網路傳輸。OPENQUERY 可作到這樣的效果。
當遠端 DB 與近端 DB 的 character set 與 sort order (collation) 相同時,可將 SP_SERVEROPTION "collation compatible"選項打開,可增加效能;尤其當使用 WHERE 時,若選項不開啓,則 MS SQL 必須將遠端所有資料傳輸至近端後才能比對;若開啓,則可在遠端比對。
遠端主機最好與近端主機接同一台 switch,或至少在同一個 subnet 裡。
當以 Enterprise Manager 或 Management Studio 建立一個 linked server 時,在 Server Option tab 裡,可以考慮設定 Connection Timeout 以及 Query Timeout 的值;預設值 0 表示不會 time out,設定該值可以幫助我們找出效能不彰的 Query 。
在預設的情形下, MS SQL 會將查詢盡量放在遠端,並只取回必要的資料, 但在下述情形下, MS SQL 可能必須先將所有資料取回:
-
Data conversion operations (eg: cast/convert)
-
當用到 bit, timestamp, 或 uniqueidentifier 等資料型態
-
用到 "TOP" keyword
-
INSERTS, UPDATES, 或 DELETES
-
所以最好避免執行上述的遠端查詢/交易
最後, 善用 Query Analyzer 查看 query plan, 以確保大多數的資料查詢是在遠端上執行,而非近端 DB。