2010-08-10 3 views
2

기본적으로 SQL Server에 연결되어 데이터를 삽입/삭제/업데이트하는 perl 프로그램을 실행하는 동안 매우 자주 sp_tables @table_name='NOXXTABLE'이라고합니다. 우리는 많은 SPID에 대해 전화가 많이 발생한다는 것을 알 수 있습니다.sp_tables 호출이 차단을 야기하는 데 더 많은 시간이 걸림

sp_tables @table_name='NOXXTABLE'을 SQLserver에서 실행하면 아무런 결과도 반환하지 않음을 알 수 있습니다. 대개 밀리 초 단위로 완료됩니다.

그러나 프로파일 링 후 블로킹 SPID에 대한 특정 SQLText(sp_tables @table_name='NOXXTABLE')의 런타임을 점검했을 때 0 초에서 1 분까지 다양했으며 동일한 SPID 내에서 매우 자주 호출되었습니다. 많은 시간이 걸리는 sp_tables에 여러 번 호출되는 SPID의 경우에도 마찬가지입니다.

해결 방법이 있습니까?

답변

3

NOXXTABLE은 DBD :: ODBC의 ping 메소드에서 사용됩니다. DBI :: ODBC를 사용하여 DBI의 ping 메소드를 호출하면 테이블 ('', '', 'NOXXTABLE', '')을 수행합니다. 당신이 덜 ping을 덜 호출하거나 당신의 시스템에 더 적합한 다른 코드로 DBD :: ODBC의 ping 메소드를 오버라이드하고 싶다면.

+0

감사합니다. bohica! 이 경우 정확히 어디에서 ping이 호출되며, 그 이유는 무엇입니까? 친절하게 여기에 약간의 빛을 던져주세요. select 사이에 sp_tables 호출이 나타납니다. 그래서 여기 어떻게 시간을 적게 줍니까? 테이블 ('', '', 'NOXXTABLE', '')은 DB 연결이 활성 상태인지를 알 수있는 대체 방법입니까? NOXXTABLE이라는 것이 없기 때문에 결과가 반환되지 않기 때문입니다. –

+0

코드 (또는 사용중인 코드)가 ping을 호출하는 위치를 말할 수 없습니다. 내가 당신에게 말하는 것은 DBI ping 메서드가 호출되고 DBD :: ODBC를 사용하는 경우 테이블 NOXXTABLE에서 테이블 호출을 실행하여 ping을 구현하는 것입니다. 인수는 데이터베이스로의 왕복이 필요하다는 것입니다. – bohica

관련 문제