728x90

글을 보다가 재미난 테스트 내용이 있어 공유드립니다.

테스트 내용은 연결된 서버를 통해서 데이터를 가지고 올 때 Pull/Push(땡겨오는/밀어넣는) 방식에 따른
성능 차이가 얼마나 발생하는지 비교한 내용입니다.

1. 테스트 스크립트 (5만건의 데이터 이관할 때 사용한 스크립트)

-- Push Script

insert openquery(SQL02, 'select * from testDB.dbo.target_table') select * from source_table;

 

-- Pull Script

insert target_table select * from openquery(SQL01, 'select * from testDB.dbo.test')

2. 테스트 결과



3. 결과에 대한 의견
  > Pull 방식이 Push 방식에 비해서 성능이 매우 좋은 것을 볼 수 있습니다. (약 120배)
  > 대량 데이터 이관시 Pull 방식을 사용하시기를 권장합니다.
  > 단순한 쿼리를 사용한 테스트이므로 모든 경우에 Push 방식이 더 빠르다고 이야기하기는 힘들 것 같습니다.
     (Join이나 subquery가 있는 경우 결과가 달라질 수 있지 않을까 생각해봅니다.)

4. 연결된 서버 사용에 대한 개인적인 의견
  > 서비스 프로시져 내에서 연결된 서버를 사용하는 것은 권장하고 싶지 않습니다.
     이유는 1대의 DB서버 장애시 다른 DB서버까지 장애가 확대되어지기 때문입니다.
  > 필요한 부분이나 상황에 맞추어 사용할 필요는 있지만 가능한 서비스 프로시져 내에서 여러 "연결된 서버"에
     접근하는 것은 제거 또는 최소화하는 것이 좋지 않을까합니다.


출처. Linked servers and performance impact: Direction matters!

728x90

+ Recent posts