11

上的LocalServer(一個SQL Server 2008 R2),我有個同義詞叫做syn_view1指向鏈接服務器remoteserver.remotedb.dbo.view1性能的影響

這種緩慢的查詢需要20秒運行。

select e.column1, e.column2 
from syn_view1 e 
where e.column3 = 'xxx' 
    and e.column4 = 'yyy' 
order by e.column1 

這種快速查詢需要1秒運行。

select e.column1, e.column2 
from remoteserver.remotedb.dbo.view1 e 
where e.column3 = 'xxx' 
    and e.column4 = 'yyy' 
order by e.column1 

在兩個查詢唯一的區別是真正的代名詞的存在。 顯然,同義詞會影響查詢的性能。

的慢查詢執行計劃是:

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 

而對於快速查詢:

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 

我的理解是,在慢速查詢時,服務器會從所有數據遠程服務器,然後應用過濾器(儘管沒有索引),而在FAST查詢中,服務器從遠程服務器獲取過濾的數據,從而使用遠程索引。

快速時有什麼方法可以使用同義詞嗎? 也許設置了鏈接的服務器?本地數據庫服務器?

感謝您的幫助!

+0

建議在遠程服務器上創建一個過程。 – 2013-03-08 12:54:59

+0

@AaronBertrand,它會改變什麼? 索引是否會被使用?我能否避免在存儲過程中指定鏈接服務器的完整限定名稱? – 2013-03-11 06:24:05

+0

是的,是的。您可以爲存儲過程名稱而不是視圖創建同義詞。 – 2013-03-11 11:00:16

回答

1

this post上dba.stacexchange.com接受的答案指出,可能發生由於鏈接服務器上限制訪問權限查詢在鏈接服務器的性能缺陷的,限制到本地服務器的表統計信息的可見性。這可能會影響查詢計劃,從而影響性能。

摘錄:

這就是爲什麼我得到不同的結果。以系統管理員身份運行時,I 得到了完整的分配統計信息,表明訂單ID> 20000時沒有 行,估計值爲一行。 (回想一下, 優化器從不假設統計數據爲零)。但是,當 以普通用戶身份運行時,DBCC SHOW_STATISTICS失敗,並且出現 權限錯誤。此錯誤未被傳播,但優化器接受沒有統計信息並使用默認的 假設。由於它確實獲得了基數信息,因此它瞭解到遠程表有830行,估計有249行。

+0

我可以看到,如何查詢到鏈接服務器的性能可能會遇到很多問題,但爲什麼同義詞查詢和鏈接表之間的區別;最終同義詞給出了相同的連接,除非你建議在同義詞本身上設置不同的訪問權限? – PhillipH 2014-07-24 08:50:10

+1

@PhillipH:很明顯*對於同義詞,*有些不同;這種解釋似乎足以導致觀察到的性能下降,所以值得在遠程服務器上檢查。 – 2014-07-24 09:29:44

2

我將轉儲數據爲了通過到本地服務器上的一個臨時表。然後我會從臨時表中選擇順序。秩序幾乎總是殺手。