У меня есть запрос sql, который я пытаюсь запустить на сервере с 8 ГБ ОЗУ. Если я перезапущу сервер, он запустится, а использование памяти составит около 1,2 ГБ.Проблемы с SQL-запросом и оперативной памятью
Если я выполнил запрос, к моменту завершения запроса объем использования ОЗУ составляет около 4 ГБ и, похоже, останется там, даже ночью.
Если я затем выполнил запрос еще раз (на следующий день), объем использования ОЗУ достигнет примерно 7 ГБ и останется там, даже когда запрос завершен.
Если я попытаюсь выполнить запрос снова после ожидания 24 часа, то использование ОЗУ все еще на 7 ГБ, но на этот раз запрос начинает возвращать ошибки из памяти.
Мой вопрос: как очистить использование памяти, когда запрос завершен? В идеале было бы хорошо, если бы сам скрипт sql мог очистить использование ОЗУ, когда он закончил, это основная работа.
Версия сервера:
Это 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
Надеюсь, это ваш личный тестовый сервер или что-то в этом роде. В противном случае я определенно рекомендую вам приобрести больше ОЗУ. –