我们可以看到,在基本上连接到 SQLserver 以插入/删除/更新数据的 perl 程序运行期间,下面的调用非常频繁
sp_tables @table_name='NOXXTABLE'
。我们看到对于许多 SPID,调用发生了很多次。
在 SQLserver 中运行 sp_tables @table_name='NOXXTABLE'
我们可以看到它没有返回任何行。它通常在几毫秒内完成。
但是在分析之后,当我们检查特定 SQLText(sp_tables @table_name='NOXXTABLE')
的运行时以查找阻塞 SPID 时,它在 0 秒到 1 分钟之间变化,并且越来越在同一个 SPID 中非常非常频繁地调用。许多 SPID 也发生同样的情况,它们再次多次调用 sp_tables
,每次调用都花费大量时间。
有什么解决办法吗?
最佳答案
DBD::ODBC 的 ping 方法使用 NOXXTABLE。如果您使用 DBD::ODBC 调用 DBI 的 ping 方法,它会执行一个表('','','NOXXTABLE','')。如果你想少调用 ping less 或用其他更适合你的系统的代码覆盖 DBD::ODBC 的 ping 方法。
关于sql-server - sp_tables 调用花费更多时间导致阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447884/