Sql-Server

SQL Server Linked Server to Progress 使用 openquery 視圖很慢

  • March 14, 2013

我們有一個 SQL Server 數據庫設置,其中一個連結伺服器設置連接到 Progress OpenEdge 數據庫。我們使用類似於以下的程式碼創建了一些 OpenEdge 表的 SQL Server 視圖(用於與 SSRS 一起使用):

CREATE VIEW accounts AS SELECT * FROM OPENQUERY(myLinkedServerName,
'SELECT * FROM PUB.accounts')

CREATE VIEW clients AS SELECT * FROM OPENQUERY(myLinkedServerName,
'SELECT * FROM PUB.clients')

由於某種原因,查詢似乎帶回了整個表,然後在 SQL 端進行過濾,而不是在 Progress 端執行查詢。我是開發人員而不是 DBA,所以我希望專家可以為我提供解決方案或至少解釋原因。

謝謝。

我們所做的是將視圖全部轉儲在一起,並添加執行 openquery 的儲存過程,這些儲存過程具有一組有限的返回值和一個受限的 where 子句。我們還與進步一起工作,他們也推薦了一些優化。性能仍然不是很好,但比以前好多了。我們正在從 Progress 後端遷移到 SQL,這是啟用 Report Designer 的一個步驟,它完成了。在數據完全遷移到 SQL Server 環境之前,我們不會開始深入研究性能。

在上面的查詢中,每次有人查看您的視圖時,OPENQUERY都會在您的伺服器上執行

為什麼不執行一項將數據從進度伺服器傳輸到 sql 伺服器並在本地創建指向伺服器中表的視圖的作業。

那會快得多

CREATE PROCEDURE [dbo].[copydatafromProgress]
AS
BEGIN

insert into tbl_accounts
SELECT * FROM OPENQUERY(myLinkedServerName,'SELECT * FROM PUB.accounts')

insert into tbl_clients
SELECT * FROM OPENQUERY(myLinkedServerName,'SELECT * FROM PUB.clients')

End



CREATE VIEW accounts AS SELECT * FROM tbl_accounts
CREATE VIEW clients AS SELECT * FROM tbl_clients

之後,創建一個每天執行一次儲存過程的作業,或者根據您需要的時間表。

引用自:https://dba.stackexchange.com/questions/24503