簡體   English   中英

SQL 服務器維護建議?

[英]SQL Server Maintenance Suggestions?

我經營着一個在線攝影社區,似乎該網站在數據庫訪問方面陷入了爬行,有時會超時。

我認為自己相當有能力編寫 SQL 查詢和設計表,但絕不是 DBA ......因此問題。

一些背景:

  1. 我的站點和 SQL 服務器正在遠程主機上運行。 我通過 SQL 服務器管理更新了 Visual Studio 中的 ASP.NET 代碼和 SQL。 工作室快車。 我沒有對服務器的物理訪問權限。

  2. 我所有存儲的過程(我想我都得到了)都包含在事務中。

  3. 此時主表只有9400條記錄。 我每晚向該表添加 12 條新記錄。

  4. 這個主表上有一個視圖,它將其他幾個表中的數據匯集到一個視圖中。

  5. 輔助表是較小的記錄,但更多。 一個是 70,000,另一個是 115,000。 這些是#3 中項目的評論和評分記錄。

  6. 索引位於最需要的字段上。 我將它們設置為自動重新計算大表上的統計信息。

當站點停止運行時,如果我運行代碼來清除事務日志、更新統計信息、重建主視圖以及重建存儲過程以獲取評論,速度就會恢復。 但是,我必須手動執行此操作。

可悲的是,我的用戶對這些問題感到沮喪,他們的參與減少了。

所以我的問題是......在遠程環境中,設置和安排維護計划以保持我的 SQL 數據庫在其峰值運行的最佳方法是什么?

我的直覺說你做錯了什么。 這聽起來有點像您聽到的那些故事,除非您每晚重新啟動服務器,否則某些系統無法保持正常運行:-)

您的查詢有問題,您擁有的行數幾乎總是與性能無關,而且您的數據庫無論如何都非常小。 我對 SQL 服務器不太熟悉,但我想它有一些非常好的查詢分析工具。 我還想象它有一種記錄慢速查詢的方法。

我真的聽起來像您缺少索引。 當然,您可能認為您已經添加了正確的索引,但在您確認正在使用之前,這並不重要。 也許你認為你有正確的,但你的查詢表明不是這樣。

首先,弄清楚如何記錄您的查詢。 很有可能你有一個殺手在那里做一些索引可以修復的順序掃描。

其次,您可能有一堆小查詢正在殺死它。 例如,您可能有一些“用戶”object 每次從 user_id 查找用戶名時都會訪問數據庫。 尋找你查詢數據庫一百次的地方並用緩存替換它——即使那個“緩存”只不過是一個在請求結束時被擦除的私有變量。

底線是,我真的懷疑它在 SQL 服務器中配置錯誤。 我的意思是,如果你因為系統停頓而不得不每晚重新啟動服務器,你會責怪系統還是你的代碼? 同樣的交易......學習SQL服務器提供的工具,我敢打賭它們非常漂亮:-)

話雖如此,一旦你承認自己做錯了什么,享受這個過程。 對我來說,沒有什么比優化慢速數據庫查詢更有趣了。 令人驚奇的是,您可以使用 10 秒的運行時間將其轉換為具有 50 毫秒運行時間的查詢,並使用一個放置良好的索引。

您無需將維護任務設置為維護計划。

只需創建一個存儲過程來執行您希望執行的維護任務、索引重建、統計更新等。

然后創建一個調用您的存儲過程的作業。 該作業可以配置為按您想要的時間表運行。

要創建作業,請使用過程 sp_add_job。

要創建計划,請使用過程 sp_add_schedule。

我希望我所詳述的內容清晰易懂,但如果您需要進一步的幫助,請隨時給我留言。

干杯,約翰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM