Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询和RAM问题_Sql_Sql Server_Sql Server 2008_Tsql_Ram - Fatal编程技术网

SQL查询和RAM问题

SQL查询和RAM问题,sql,sql-server,sql-server-2008,tsql,ram,Sql,Sql Server,Sql Server 2008,Tsql,Ram,我有一个sql查询,我正试图在一个有8GB内存的服务器上运行。如果我重新启动服务器,它将启动,内存使用量约为1.2GB 如果我执行查询,当查询完成时,RAM的使用量将达到4GB左右,并且似乎保持在那里,即使是在晚上 如果我随后再次执行查询(第二天),RAM的使用量会上升到7GB左右,即使查询完成后也会保持不变 如果我在等待24小时后再次尝试执行查询,RAM使用率仍然为7GB,但这次,查询开始返回内存不足错误 我的问题是,当查询完成运行时,如何清除内存使用情况?理想情况下,如果sql脚本本身能够在

我有一个sql查询,我正试图在一个有8GB内存的服务器上运行。如果我重新启动服务器,它将启动,内存使用量约为1.2GB

如果我执行查询,当查询完成时,RAM的使用量将达到4GB左右,并且似乎保持在那里,即使是在晚上

如果我随后再次执行查询(第二天),RAM的使用量会上升到7GB左右,即使查询完成后也会保持不变

如果我在等待24小时后再次尝试执行查询,RAM使用率仍然为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.

您应该设置最大服务器内存,使操作系统和服务器上的任何其他软件至少有一两个gig可用。SQL将缓存数据,并仅在接近极限时释放数据

使用最大服务器内存防止SQL server缓冲池使用 超过指定的内存量,因此剩余 内存可用于快速启动其他应用程序。SQL Server确实如此 不立即分配上的最大服务器内存中指定的内存 启动。SQL Server会根据需要增加内存使用量,直到 达到最大服务器内存中指定的值。SQL Server无法 超过此内存使用量,除非最大服务器内存的值为 提高

通过在对象查看器中右键单击服务器并选择属性,可以使用Management Studio对其进行更改。然后更改最大服务器内存值:


要释放内存,您可以使用but this命令,但它们仅用于测试常量上下文中的查询持续时间。SQLServer足够聪明,可以在需要时将对象从RAM中移除

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

由于此命令强制SQL将对象保留在RAM中,您确定不使用
DBCC PINTABLE
吗?

是否可以添加详细的错误消息?在SQL Server Management Studio中,右键单击服务器实例,选择属性,单击“内存”页面,并确保“最大服务器内存”设置为合理的值(在您的情况下),默认情况下,SQL Server将耗尽所有可用内存并保留它。这是第一步。我希望这只是你的个人测试服务器或类似的东西。否则,我肯定会建议您购买更多的RAM。@JamesZ,即使我得到1TB的RAM,如果每次执行查询后都没有清除RAM,这意味着如果查询运行250次或更多,我将开始出现内存错误。@pmbAustin,SQL Server Managedment Studio出于某种原因被设置为2PB。我现在将它设置为4GB,并允许它在夜间执行。会让你知道发生了什么。DBCC PINTABLE不是已经在2000年或者类似的时候被删除了吗?无论如何,即使它仍然存在,也不应使用:)