8 GB RAM'e sahip bir sunucuda çalıştırmaya çalıştığım bir sql sorgum var. Sunucuyu yeniden başlatırsam, başlatılır ve bellek kullanımı yaklaşık 1,2GB'tır.SQL Sorgu ve RAM sorunları
Sorguyu çalıştırırsam, sorgu bittiğinde RAM kullanımı yaklaşık 4 GB'a gider ve gece boyunca bile orada kalır gibi görünür.
Sorguyu tekrar çalıştırırsam (bir sonraki gün), RAM kullanımı yaklaşık 7 GB'a kadar çıkar ve sorgu bittiğinde bile orada kalır.
Sorguyu 24 saat bekledikten sonra yeniden çalıştırmayı denerseniz, RAM kullanımı hala 7 GB'tır, ancak bu kez sorgu bellek hatalarını geri döndürmeye başlar.
Sorunuz, sorgu çalışmayı bitirdiğinde bellek kullanımını nasıl temizlerim? İdeal olarak, sql betiğinin kendisi ana işi bitirdiğinde RAM kullanımını temizlemesi iyi olurdu.
sunucu sürümü:
Microsoft SQL Server 2008 R2 var (RTM) - 10.50.1600.1 (X64).
hata iletisi:
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.
Detaylı hata mesajları ekleyebilir misiniz? –
SQL Server Management Studio'da, sunucu örneğini sağ tıklatın, Özellikler'i seçin, "Bellek" sayfasına tıklayın ve "Maksimum sunucu belleği" seçeneğinin sizin durumunuzda 4096 makul bir değere ayarlandığından emin olun.Varsayılan olarak, SQL Server tüm kullanılabilir belleği kullanacak ve üzerine basılı tutacaktır. Bu ilk adım. – pmbAustin
Umarım bu sadece kişisel test sunucunuz ya da bunun gibi bir şeydir. Aksi takdirde daha fazla RAM satın almanızı kesinlikle tavsiye ederim. –