2016-10-02 108 views
2

我正在運行基於桌面的應用程序內置C#連接到Microsoft SQL Server Express數據庫。大約20-30個用戶正在訪問此應用程序,同時又有20-30個系統與數據庫連接,並且每天工作24小時。運行的操作系統是Windows Server 2012 Standard。緩慢的SQL Server數據庫響應時間問題

有時我在應用程序中遇到嚴重的性能問題,當我重新啓動服務器時,一切都變得正常。

我已經掃描了所有計算機,並且沒有檢測到病毒。在網絡設備中看起來沒有問題。

可能是什麼問題?垃圾收集?

謝謝

+0

你如何處理代碼中的數據庫連接?如果你沒有處理連接,那麼連接將會出現問題而不會被放回到連接池中,這意味着線程將最終等待連接變得可用。您也可能有表鎖問題,您可能有多個用戶嘗試更新/插入,這會導致記錄或表被鎖定以防止衝突。這與未被處置的連接相結合,可能導致您所描述的內容 –

+0

我只在需要時打開連接並在CRUD操作結束時關閉。下面是示例的它 '嘗試 { } 趕上(例外EXP) { MessageBox.Show(exp.Message.ToString(), 「異常」); } finally if(sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } }' –

+0

你可以檢查sql server cpu,內存使用情況,當你面臨性能問題和更新問題 – TheGameiswar

回答

2

還有爲SQL Server Express版本的模仿:支持

  • CPU數量:在同一時間只有一個CPU(用於SQL最大核心= 4表示2016)。所以,如果你的服務器有多個CPU,它一次只能使用一個CPU。

  • 使用的最大內存:數據緩衝區最大爲1 GB內存。所以,如果你的服務器有更多的GB memeory,SQL Server Express不能利用它。

  • 數據庫大小限制:最大數據庫大小限制爲4 GB(10GB用於SQL表達2016)

磁盤I/O速度和內存是用於SQL性能的主要資源之一。隨着數據長時間處於高速緩存中,服務器不從磁盤讀取內存。

可以幫助查找服務器性能瓶頸的措施之一是測量頁面預期壽命(PLE)。對於配備4GB內存的服務器,應該大於300(但真正的sql express使用有限的1GB)。

PLE是平均數據頁面在緩衝池中的秒數。將數據保存在內存中使得SQL Server可以更快地訪問它,而不必進行長時間,慢速訪問磁盤。這一措施可以打開你的眼睛,並引導你解決可以解決的問題。 你可以通過執行獲得:

SELECT object_name, 
    counter_name, 
    cntr_value AS [value] 
FROM sys.dm_os_performance_counters 
WHERE LTRIM(RTRIM(object_name)) = 'SQLServer:Buffer Manager' 
    AND LTRIM(RTRIM(counter_name)) = 'Page life expectancy' ; 

在SQL表達你失去了重要的資源(內存限制1GB)加強PLE計數器幫助。

您的系統有20-30個用戶,另外還有20-30個系統同時與數據庫連接,並且每天工作24小時。

最好升級到SQL標準版2016,不限制內存(最高128GB)和CPU /內核(最高24核)。

1

看看Windows性能計數器。

我第一次看是的SQLServer:內存管理器:總的服務器內存(KB)的SQLServer:內存管理器:目標服務器內存(KB)。 也看看緩衝區:緩存命中率計數器。

如果目標內存高於總內存增加內存。 如果緩存命中率平均低於99%,也會增加內存。