글을 보다가 재미난 테스트 내용이 있어 공유드립니다.
테스트 내용은 연결된 서버를 통해서 데이터를 가지고 올 때 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!
'IT이야기 > MS-SQL' 카테고리의 다른 글
SERVICE MASTER KEY (SMK) (0) | 2016.06.29 |
---|---|
DB 서버 이전 시 체크리스트 (SQL Server 기준) (0) | 2016.06.29 |
[툴소개]SSMS Tools Pack 2.0 (freeware) (0) | 2016.06.29 |
SQL Server 트랜잭션 로그 읽기 (0) | 2016.06.29 |
SQL Server 상태 모니터링 (0) | 2015.09.02 |