我有一個SQL Server Express的2008 R2運行。有十個用戶使用存儲過程永久地讀/寫相同的表。他們這樣做日夜。
問題
存儲過程的表現越來越隨着數據庫容量低。 當數據庫大小大約爲200MB時,存儲過程調用需要平均10ms。 當數據庫大小約爲3GB時,相同的調用需要avg 200ms。 所以我們必須每月清理一次數據庫。
我們已經做了一些有積極作用的表的索引優化,但問題依然存在。
最後我不是SQL Server專家。你能給我一些提示,開始擺脫這個性能問題嗎?
我有一個SQL Server Express的2008 R2運行。有十個用戶使用存儲過程永久地讀/寫相同的表。他們這樣做日夜。
問題
存儲過程的表現越來越隨着數據庫容量低。 當數據庫大小大約爲200MB時,存儲過程調用需要平均10ms。 當數據庫大小約爲3GB時,相同的調用需要avg 200ms。 所以我們必須每月清理一次數據庫。
我們已經做了一些有積極作用的表的索引優化,但問題依然存在。
最後我不是SQL Server專家。你能給我一些提示,開始擺脫這個性能問題嗎?
在SQL Server Express Edition的限制(1GB內存緩衝池,只有一個使用的插槽CPU,10GB數據庫大小)不太可能成爲問題。應用程序設計,錯誤查詢,過度鎖定併發性和糟糕的索引更可能成爲問題。鏈接的文章(特別是第一篇)包括如何識別瓶頸的方法論。
SQLExpress是爲測試目的而構建的,性能直接受到Microsoft的限制,如果您在生產環境中使用它,您可能希望獲得SQL Server的許可證。
-1 SQL Express可以(也可以)用於生產。我非常肯定,OP在Enterprise Edition上會遇到完全相同的問題,但沒有證明他看到的性能問題是由於Express限制造成的。應用程序問題(表掃描!)是一個更爲可能的問題。 –
-1。你甚至不打擾 - 對於較小的設置(100用戶,10GB數據),使用SQL Express是完全正確的。許可證允許。在發佈前閱讀 - 在這種情況下是許可證文件。 – TomTom
看起來他很快就會達到Express的極限(4GB DB,1G RAM和1個CPU)。個人偏好,我絕不會使用快遞應用程序,但那是我的電話。如果你的應用程序和數據很小,那麼使用快遞應該沒有問題。 – Limey
首先,SQL Server Express不是您要求的最佳版本。獲取開發人員版來測試它。它和企業一模一樣,但如果你不使用「生產」就免費。
關於性能,這裏涉及的東西太多了,您可以使用它來改進它,因爲索引直到分區。我們需要更多的信息來提供幫助
這是最有可能的簡單編程錯誤 - 聽起來像是你根本要麼有:
這就是最後 - 加上可能真的很糟糕的SQL。典型的過濾錯誤:somefomula(field)LIKE值,意思是「請忘記您的索引,請在檢查前進行表掃描並計算一些公式(字段)」。
可能是糟糕的索引,數據庫設計不佳,可能不適用規範化,不需要的列索引,需要很長時間執行的差勁查詢。
在優化SQL查詢之前,您需要查找查詢的熱點。通常您可以使用SQL Profiler在SQL Server上執行此操作。對於Express版本,沒有這樣的工具。
返回所有renct查詢:
SELECT *
FROM sys.dm_exec_query_stats order by total_worker_time DESC;
僅返回頂部耗時查詢:但是你可以通過使用幾個查詢走動
SELECT total_worker_time, execution_count, last_worker_time, dest.TEXT
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY total_worker_time DESC;
現在你應該知道哪些查詢需要進行優化。
您可以粘貼其中一個存儲過程的示例嗎?然後我會看一看,看看我能不能幫忙。 –
你唯一能做的就是要麼。看看存儲過程中查詢的性能,或者如果他們已經達到了實際的極限,可以考慮將設計更改爲側重於任何問題。可能值得聘請顧問dba提供一些專家協助。 –
您的SQLServer版本在最大數據大小上有限制:10 GB。因此,如果您解決了性能問題,則必須在數月內清理數據庫或對其進行升級。 –