2017-03-09 3 views
0

SQL Server에 연결된 서버가 2 개 있고 원격 DB에 1 개의 레코드를 업데이트하려고합니다.
문제는 쿼리가 매우 오래 걸리고 (6 분), 이는 단지 1 레코드이므로 수천 업데이트해야하므로 다른 접근 방법을 취해야합니다. 어떤 아이디어 나 제안을 시도해 볼 수 있습니까?연결된 서버에 가입하는 업데이트 쿼리의 성능이 향상되었습니다.

LocalTable의 TaskID, TaskType 및 ClosedOn + Completed + Started에 대한 색인과 RemoteTable의 TaskID, TaskType 및 Status에 대한 색인이 있습니다.

내가 현재 아래

UPDATE RemoteTable 
SET RemoteTable.TaskType = LocalTable.TaskType, 
    RemoteTable.Status = CASE WHEN IsNull(LocalTable.ClosedOn, 0) <> 0 THEN 'Closed' 
           WHEN IsNull(LocalTable.Completed, 0) <> 0 THEN 'Completed' 
           WHEN IsNull(LocalTable.Started, 0) <> 0 THEN 'Started' 
         ELSE 'Created' 
       END, 
FROM Tasks LocalTable INNER JOIN [172.1.2.3].DBName.dbo.Tasks RemoteTable 
    ON Local.TaskID = RemoteTable.TaskID 
where RemoteTable.TaskID = 12345 

실행 계획이 무엇 : 원격 테이블 스캔의 100 %가 원격 표에 대한 작업 ID에 있습니다. enter image description here

+1

업데이트 계획 – jfatal

+0

업데이트 됨 –

+0

호기심에서 벗어났습니다.이 FROM Tasks LocalTable INNER JOIN [172.1.2.3] .DBName.dbo.Tasks RemoteTable ON RemoteTable.TaskID = 12345 및 Local.TaskID = 12345' –

답변

1

링크 된 서버에 대한 분산 트랜잭션으로 인해 속도가 느린 것 같습니다.

원격 서버에 Stored Prodecure를 작성하고 해당 SP를 호출하여 업데이트 할 수 있습니까? 만약 내가 올바르게 기억

https://blog.sqlauthority.com/2007/10/06/sql-server-executing-remote-stored-procedure-calling-stored-procedure-on-linked-server/

(오래된 일) 인서트는이 문제에서 용납하지 않는다, 그래서 당신은 원격 서버에서 준비 테이블에 데이터를로드 할 수 원격 SP는에 그 '명령'을 처리 할 수 ​​있습니다 업데이트를하십시오.