2010-08-10 25 views
2

我们可以看到,在我们的perl程序运行期间,基本上连接到SQLserver以插入/删除/更新数据,下面非常频繁地调用 sp_tables @table_name='NOXXTABLE'。我们看到,对于许多SPID来说,这个呼叫发生了很多次。sp_tables调用需要更多时间导致阻塞

在SQLserver上运行sp_tables @table_name='NOXXTABLE'我们可以看到它没有返回任何行。它通常以毫秒为单位完成。

但是在分析后,当我们检查阻塞SPID的特定SQLText(sp_tables @table_name='NOXXTABLE')的运行时间时,它在0秒到1分钟之间变化,并且在相同的SPID内被非常频繁地调用。许多SPID也是如此,它们每次都需要花费很多时间再次调用sp_tables

有没有解决方案可以解决这个问题?

回答

3

DBD :: ODBC的ping方法使用NOXXTABLE。如果您使用DBD :: ODBC调用DBI的ping方法,它将执行一个表('','','NOXXTABLE','')。如果你想这样做,少调用ping命令或用其他更适合系统的代码覆盖DBD :: ODBC的ping方法。

+0

谢谢bohica! 在这种情况下,从哪里ping完成,为什么? 在此点燃一些光。 我们在两次选择之间也看到了sp_tables调用。 那么这里我们怎么称呼它少了几次? 表('','','NOXXTABLE','')是否知道数据库连接是否还活着? ,因为没有任何名为NOXXTABLE并且没有结果返回。 – 2010-08-11 13:39:08

+0

我不能告诉你你的代码(或你使用的代码)在哪里调用ping。我告诉你的是,当调用DBI ping方法并且使用DBD :: ODBC时,它通过在表NOXXTABLE上发出表呼叫来实现ping。争论是这将需要往返数据库。 – bohica 2010-08-11 14:22:50