현재 SQL Server 2000에서 데이터베이스를 실행하고 있습니다. 데이터베이스는 추후 쿼리를 위해 플랫 파일에서 데이터를 지속적으로 가져옵니다. 이 프로세스는 일련의 SQL Server 저장 프로 시저에 의해 수행되고 xp_cmdshell
을 통해 해당 절차에서 BCP
을 호출합니다. 스크립트는 BCP
을 사용하여 플랫 파일을 동일한 서버의 보조 데이터베이스에있는 영구 테이블로 읽습니다. 그런 다음 스크립트는 가져 오기 데이터베이스 테이블에서 데이터를 가져와 정규화되어 쿼리에 사용되는 실제 데이터베이스에 저장합니다.SQL Server 2000 교착 상태를 자르지 않음
일반적으로이 가져 오기 프로세스는 파일 크기에 따라 5-10 분이 걸립니다. 그러나 지난 주에는 50-60 분이 걸렸습니다. 우리는 절차를 단계별로 시도했습니다. 임시 테이블을 만들 자마자 다른 쿼리 창에서 tempdb
을 쿼리 할 수 없다는 것을 알았습니다. 그러나 더 중요한 것은 언제 첫 번째 가져 오기 테이블을 잘라낼 때까지 잘 수행 할 수 있는지입니다. truncate가 실행되도록 허용 한 다음 sp_lock
을 사용하여 데이터베이스의 잠금을 확인할 때 자르기에 의해 수행 된 잠금이 해제되지 않습니다. 그런 다음 에 대한 xp_cmdshell
호출을 허용하고 거기에 있습니다. 우리는 CPU 및 I/O를 살펴보고 절차가 BCP 호출에 걸렸을 때 큰 활동을 보지 않습니다. 또한 우리가 이것을 시도 할 때 알려진 쿼리가 없습니다. 파일 자체는 작습니다. 최대 20 줄.
우리는 별도의 쿼리에서 xp_cmdshell
와 bcp
명령을 실행하면 그것은 잘 작동하지만, 우리는 잘라 내기 라인을 실행하지만, 경우 잠글 저장 프로 시저하지 아직 BCP
라인.
그래서 우리는 왜 서버가이 교착 상태에 빠지며 그다지 중요하게 왜 자물쇠에 의해 만들어진 잠금이 해제되지 않는 것입니까?