2010-08-24 52 views
0

我有一個數據庫,包含大量的表,大約3500個,以及需要訪問表列表的應用程序。在SQL Server 2005上真的很慢模式信息查詢

在特定的服務器上,這需要超過2.5分鐘才能返回。

EXEC sp_tables @table_type="'TABLE'" 

我知道有更快的方法來做到這一點,但遺憾的是我沒有修改應用程序的位置,需要找到一種方法來推動它低於約30秒,因此應用程序不會拋出超時錯誤。

所以。什麼,如果有的話,我可以做些什麼來提高SQL服務器中的sp的性能?

+0

有趣的是,在帶有3200個表格的db上跑了這個,並且花了不到一秒 – SQLMenace 2010-08-24 17:28:31

回答

0

如果您沒有在您的用戶帳戶上設置GRANT VIEW DEFINITION權限,我已經看到這些存儲過程運行緩慢。從我讀的內容來看,這將導致安全檢查發生速度減慢查詢。

也許一個SQL大師可以評論爲什麼,如果這有助於你的問題。

0

好,sp_tables的是系統代碼和不能更改

您的選項是

  1. 更改SQL
  2. 變化(可以在SQL Server 2000中,沒有SQL Server的解決方法2005+)命令超時
  3. 更大的服務器

你已經說「不」,明顯的解決方案...

+0

的權利。可悲的是,我在這種情況下沒有選擇。 – Brian 2010-08-25 01:38:49

+0

@Brian:對不起,你沒有選擇,只能忍受緩慢的表現...如果你的應用程序被鎖定,這些緩慢,那麼你的應用程序有更大的問題。 – gbn 2010-08-31 04:58:03

0

您需要像處理其他任何性能問題一樣來解決這個問題。 爲什麼速度慢?也就是說,它在哪裏阻塞?磁盤IO?中央處理器?網絡?鎖爭用?科學的方法是使用像Waits and Queues或更新的SQL 2008 equivalent Troubleshooting Performance Problems in SQL Server 2008這樣的方法。懶惰的方法是簡單地檢查執行sp_tables調用的會話中的,wait_timewait_resourcesys.dm_exec_requests。一旦找出什麼阻止執行,您可以相應地繼續。

如果我冒險猜測,你會發現爭用的原因:其他會話鎖定表的元數據,從而阻止sp_tables的執行,它必須等到它前面的所有操作完成。