我有我想其中有8GB內存的服務器上運行的SQL查詢。如果我重新啓動服務器,它將啓動並且內存使用量約爲1.2GB。SQL查詢和RAM問題
如果我再執行查詢,查詢結束的時候,RAM使用去約4GB,似乎呆在那裏,甚至過夜。
如果我再次執行查詢(第二天),該內存的使用上升到約7GB並在那裏停留,即使查詢已完成。
如果我再嘗試等待24小時後再次執行查詢時,內存使用仍然處於7GB,但是這一次,查詢開始返回內存不足的錯誤。
我的問題是,如何我清除,當查詢已完成運行內存使用情況?理想情況下,如果SQL腳本完成主要工作時可以清除RAM使用情況,那將會很好。
服務器版本是:
它的Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)。
的錯誤信息是:
System.Data.SqlClient.SqlException (0x80131904): There is insufficient memory available in the buffer pool.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at Project1.Form1.intenseProcess3() in c:\Users\oshirowanen\Documents\Visual Studio 2013\Projects\Project1\Form1.cs:line 117
ClientConnectionId:33f515db-0086-4f88-a8fd-e7779d92d030
Error Number:802,State:20,Class:17 SqlException caught.
你能添加詳細的錯誤信息嗎? –
在SQL Server Management Studio中,用鼠標右鍵單擊該服務器實例,選擇屬性,點擊「內存」頁面,並確保「最大服務器內存」設置爲一些合理的行爲,你的情況,4096。默認情況下,SQL Server將用盡所有可用內存並保留它。這是第一步。 – pmbAustin
我希望這只是你的個人測試服務器或類似的東西。否則,我肯定會推薦你購買更多的RAM。 –