안녕하세요.
요 몇일 SSIS로 씨름하고 있습니다.ㅠㅠ
다름이 아니라 SSIS의 실행테스크로 update 쿼리를 실행하게되면 무한 대기 상태로 남아 있습니다.
(때로는 잘 동작하던 녀석이었습니다... 하지만 어느순간 부터 동작하지 않는다는.. 쿨럭..)
혹시나 해서 해당 쿼리를 SSMS에서 바로 실행해 보았을 때에는 정상적으로 동작하였습니다.
도데체 무슨 쿼리가 실행 되길래 이러는지 프로파일러로 보니 SQL실행 테스크는 exec sp_executesql 구문을 사용하여 실행 하는 것으로 보입니다만..
update가 아닌 select 쿼리를 넣어서 실행하니 잘 되었습니다. 유독 UPDATE문만 넣어서 실행했을때 무한 대기 상태로 대기 중이더군요..
혹시 lock로 block 되어 있는줄 알고 sp_blocker_pss08 로 상태를 보았습니다만 별다른 문제는 없었습니다.
제가 무엇을 체크하면 좋을지 조언 부탁 드립니다.
감사합니다.
Comment 4
-
Hisory
2014.04.25 10:56
-
구짜
2014.04.25 11:57
안녕하세요, 말씀 감사 드립니다. :)단일행 단위로 하였을 경우 업데이트 속도가 현저히 낮아져서 전체로 업데이트 하는 방법으로 쿼리를 변경 하고 있었습니다.
현재 SSIS 에서 데이터흐름 테스크를 통하여 조회 후 단일행 업데이트로 진행 되고 있으나 정말 너무 느립니다..
select 부분은 2초 안에 load 되는 반면 업데이트 될 때 4만건이 약 7분 이상 소요 됩니다.. ㅠㅠ
select insert는 문제 없으나, Update 구문이 문제 인것 같습니다. 혹시 UPDATE 구문과 관련되어 index를 확인해 봐야 할까요?
감사합니다.
-
Hisory
2014.04.25 13:21
대량으로 업데이트 건이 몇건이나 되는지 모르겠으나..
서버 사양에비해 많은 건수를 업데이트 하면 실운영상 해당 작업때문에 문제가 발생할수도 있습니다.
굳이 한번에 업데이트하실려면 만개 오만개 이런식으로 끊어서 업데이트하라고 권장하고 싶습니다.
테이블에 비해 업데이트 양이 많다고하면 인덱스도 별 효과를 보지는 못하고여..
나눠서 업데이트 하신다고하면 where 문에 걸리는 컬럼의 인덱스를 살펴보시면 좋을듯 합니다.
-
구짜
2014.04.25 15:21
말씀 감사드립니다. :) 찾아보다보니 해당 query가 SOS_SCHEDULER_YIELD 의 wait type로 대기중으로 되어있는데 혹시 다른 큰 프로세스에 의해서 해당 프로세스가 대기상태로 빠진것 일까요.
더 공부해 봐야 할 것 같습니다.
update 를 단일행단위로 하는지 전체 데이터를 통으로 하는지 에 따라 달라 질것같네여.
만약 통으로 update 하게 되면 loop 방식으로 바꿔보시는것도 방법이지 않을까 싶습니다.