Tôi có truy vấn sql mà tôi đang cố gắng chạy trên một máy chủ có RAM 8GB. Nếu tôi khởi động lại máy chủ, nó khởi động và mức sử dụng bộ nhớ là khoảng 1.2GB.Các vấn đề về truy vấn và RAM SQL
Nếu sau đó tôi thực hiện truy vấn, vào thời điểm truy vấn đã kết thúc, mức sử dụng RAM sẽ tăng lên khoảng 4GB và dường như ở lại đó, thậm chí qua đêm.
Nếu sau đó tôi thực hiện lại truy vấn (ngày tiếp theo), việc sử dụng RAM tăng lên khoảng 7 GB và vẫn ở đó ngay cả khi truy vấn đã kết thúc.
Nếu sau đó tôi thử thực hiện lại truy vấn sau khi chờ 24 giờ, mức sử dụng RAM vẫn ở mức 7 GB, nhưng lần này, truy vấn bắt đầu trả về lỗi bộ nhớ.
Câu hỏi của tôi là, làm cách nào để xóa sử dụng bộ nhớ khi truy vấn đã chạy xong? Lý tưởng nhất, nó sẽ là tốt nếu kịch bản sql chính nó có thể xóa việc sử dụng RAM khi nó đã hoàn thành công việc chính của nó.
Phiên bản máy chủ là:
Đó là Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64).
Các thông báo lỗi là:
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.
Bạn có thể thêm thông báo lỗi chi tiết không? –
Trong SQL Server Management Studio, nhấn chuột phải vào cá thể máy chủ, chọn Properties, bấm vào "Memory" trang, và đảm bảo "tối đa bộ nhớ máy chủ" được thiết lập để một cái gì đó hợp lý, trong trường hợp của bạn, 4096.Theo mặc định, SQL Server sẽ sử dụng hết bộ nhớ có sẵn và giữ nó. Đây là bước đầu tiên. – pmbAustin
Tôi hy vọng đó chỉ là máy chủ thử nghiệm cá nhân của bạn hoặc một cái gì đó tương tự. Nếu không, tôi chắc chắn sẽ khuyên bạn nên mua thêm RAM. –