我有一个包含大量表的数据库,大约3500个,以及需要访问表列表的应用程序。
在特定服务器上,这需要2.5分钟才能返回。
EXEC sp_tables @table_type="'TABLE'"
我知道有更快的方法可以做到这一点,但遗憾的是我无法修改应用程序,需要找到一种方法将其推送到30秒以下,以便应用程序不会抛出超时错误。
因此。我可以做些什么来提高sql server中sp的性能?
答案 0 :(得分:0)
如果您没有在用户帐户上设置GRANT VIEW DEFINITION
权限,我看到这些存储过程运行缓慢。根据我的阅读,这将导致安全检查发生,从而减慢查询速度。
也许SQL大师可以评论为什么,如果这对您的问题有帮助。
答案 1 :(得分:0)
嗯,sp_tables是系统代码,不能更改(可以在SQL Server 2000中解决,而不是SQL Server 2005 +)
您的选择
你已经对明显的解决方案说“不”......
答案 2 :(得分:0)
您需要像其他任何性能问题一样处理此问题。 为什么这么慢?即,它阻止在哪里?磁盘IO?中央处理器?网络?锁争?科学方法是使用Waits and Queues或更新的SQL 2008 equivalent Troubleshooting Performance Problems in SQL Server 2008等方法。懒惰的方法是只检查sys.dm_exec_requests
中执行wait_type
调用的会话中的wait_time
,wait_resource
和sp_tables
列。一旦你发现阻止执行的,你就可以继续进行。
如果我冒昧地猜测,你会发现争用是原因:其他会话只是锁定表的元数据,从而阻止sp_tables的执行,这必须等到它前面的所有操作完成。