1줄 요약 : MS-SQL SP에서 openquery를 이용해서 RDS(MySQL)로 data insert…

1줄 요약 : MS-SQL SP에서 openquery를 이용해서 RDS(MySQL)로 data insert 작업 수행시 말도 안되게 느리게 작업이 수행되는 증상에 대한 이야기입니다.
——————————————————————————————–
MS-SQL의 SP에서 OPENQUERY를 이용해서 원격 MySQL RDS로 insert 구문을 수행하는데 700 row 입력에 2분~3분의 시간이 소요됩니다. RDS의 스토리지 타입도 IOPS 1000까지 스케일업을 해도 마찬가지인데요. 실제로 외부 서버에서 python으로 1000 row insert를 수행하면 0.740ms로 1초 내로 작업 완료됩니다. 혹시 이런 증상을 겪어보신 경험이 있으시면 조언 좀 부탁드립니다.
MS-SQL쪽 경험이 전무해서 이게 RDS 문제인지 MS-SQL쪽을 수정해야될지 애매하네요.

감사합니다.

11 thoughts on “1줄 요약 : MS-SQL SP에서 openquery를 이용해서 RDS(MySQL)로 data insert…

  1. ms-sql은 뭔지는 알지만 sp가 뭔지 openquery가 뭔지도 모르는 수준에서 원인을 추측해보자면 1 ROW씩 SELECT->INSERT를 반복하고있는게 아닐까 싶습니다. SELECT 700 -> INSERT 700 으로 바꿀 수 있으면 될 것 같습니다만… 장님 코끼리 다리만지기네요 ^^;

  2. 아마존의 RDS도 내부적으로는 EBS를 사용할텐데요. 제 경험으로는 IOPS문제라기 보다는 RDS와 내부적으로 사용하는 EBS와의 네트워크 속도 때문에 충분한 IOPS가 안나오는 경우가 있었습니다. 네트워크 속도가 빠른 인스턴스로 업그레이드 하셔야 될듯합니다.

  3. 네트웍쪽이 문제라면 python 테스트로도 문제가 되야 할 거 같은데 본문에서 언급했던것처럼 1초내로 완료되었습니다.

  4. mysql 의 insert 성능 개선 팁인 insert into tbl (col) values (data1), (data2) … ; 이런식으로 1000개 정도씩 끊어서 insert 하면 10,000개도 1초내로 완료되는걸 확인했습니다.

  5. SP상에서 INSERT OPENQUERY(RDS_DB, ‘SELECT NO, NAME FROM RDS_DB.table ‘); 뭐 대충 이런식으로 구동시키는걸로 확인했습니다. MS-SQL쪽은 상대방이고 저는 MySQL RDS쪽입니다.

  6. 이기종 간 데이터 연결이라 직접 환경을 보기 전에 단언하기 어려울 듯 싶습니다만, 문제가 된다면 아마도 Transaction에 들어가는 Round Trip 비용 때문이거나, RDS로 다중 연결로 인해 발생하는 문제가 아닐까 싶습니다. 단순 데이터 이전 이라면 BCP가 가장 빠르지 않을까 싶네요..

  7. 생각해보니 Linked Server Provider 종류나 설정에 따라 전체 성능 문제가 될 수도 있겠네요….
    실시간 처리라면 RDS(MySQL)에 프로시저를 만들고 SQL 서버에서 호출하는 형태가 비교적 가벼울듯싶네요….

  8. 혹시 저 같은 경우를 겪을 미래의 어느 분을 위해서 뒤늦은 해결된 결과 공유드립니다. 원인은 MS-SQL(국내)이 위치한 ISP망에서 해외망 접속시 비정상적으로 느린게 원인이었습니다. 국내 클라우드사 중 한곳에 DB용 인스턴스를 생성해서 테스트했더니 응답시간이 정상적으로 처리된다고 하네요.

Comments are closed.