none
sql server 2008(SP1)-10.0.2531.0(x64)运行一段时间,就出现Insufficient system memory in resource pool 'internal' to run thr query RRS feed

  • 问题

  • 注:本数据库服务器和另一个数据库服务器做了镜像,问题出现在PRIMARY机器上。
    数据库服务器的内存是8G,现在将数据库能用的“最大服务器内存”设成2GB,应该足够用了。
    但总是过一段时间由于SQLSERVER.exe所占内存达到2GB报错;但其实并没有太多数据库应用在后台跑。莫非是镜像惹的祸?
    我用SELECT * FROM MASTER.SYS.SYSPROCESS找到一些数据,但数据中的memusage最大为2,为什么?
    如何能够得知耗光内存的进程的名字?

    2016年12月5日 4:10

全部回复

  • If it's dedicated sql server, you can set max sql memory to 5gb. By the way, latest sql2k8 sp is sp4.
    2016年12月5日 17:08
  • 服务器是8g内存,sql实例里的最大服务器内存设置为2g,有点不合理

    如果是一个大查询,很容易会出现

    Insufficient system memory in resource pool 'internal' to run the query

    建议设置sql实例里的最大服务器内存设置为6g


    Love SQL

    2016年12月6日 8:08
  • Albert,
    问题是我的应用查询数据库没有那么大数据量。
    我也百度/GOOGLE了一些资料,他们说SQL SERVER无法自动释放已获取的内存,只有当系统要求时才会自动释放。
    但问题是当SQL SERVER所占内存达到2GB(我提前设置的“最大服务器内存”)之后,我的新的数据库连接请求就会返回内存不足的错误,导致应用无法完成,这是最要命的呀。
    我现在不确定这种内存的长期占用是由于应用写的有问题还是其他问题,SQL SERVER能否提供一个工具/查询语句来跟踪究竟哪个查询/执行语句耗用了大量的内存?
    我用SELECT * FROM MASTER.SYS.SYSPROCESSES只返回部分数据,还是无法得到准确的答案。

    2016年12月7日 12:09
  • 另外,在我们系统的其他数据库服务器上(供其他应用使用),其SQLSERVR.exe内存占用只有不到100M,而且连续运行数年都没有问题。他的数据量比我的大很多(因为它是实时数据库,大量现场行数据),且数据文件也大很多。
    这是为什么?如果内存不断增大是默认行为,但为什么其他数据库占的内存这么小?

    2016年12月7日 12:14
  • What's memory usage on the server? Max sql memory is for cache buffers only, other sql related .exe programs use memory from OS too.
    2016年12月7日 13:30
  • 我估计“我们系统的其他数据库服务器上(供其他应用使用),其SQLSERVR.exe内存占用只有不到100M”是早期版本的SQL Server,把可执行文件占用的内存跟缓存分开了。

    另外一种可能是那个数据库的文件虽然大,但是读写到的数据范围只有很少一点。


    想不想时已是想,不如不想都不想。

    2016年12月8日 5:29
    版主
  • 对不起,这段时间一直在网上查询相关知识。

    关于SQL SERVER内存不断增长的问题,网上都说这是正常现象;但问题是当所占内存达到先前预设的最大内存后,系统就报错(如题),这是让人无法忍受的。

    我也尝试用PROFILER和DATABASE ENGINE TUNING ADVISOR进行了一些系统检测,也发现一些语句写的不尽合理,已经都更正了;但之前的现象仍然存在,即很短时间(2天左右)即达到2G的内存占用,之后再用的话,就会出现“Insufficient system memory"的问题,真是头痛死了。

    有人建议可以定期重启服务,但这是根本的解决办法吗?有人建议更新SP,但更新SP1的时候又出现错误,如:

    The version of SQL Server instance Shared Component does not match the version expected by the SQL Server update. The installed SQL Server product version is 10.1.2531.0, and the expected SQL Server version is 10.2.4000.0.

    用SP2直接更新,又说版本不匹配,也是醉了。

    微软连这个都做不好,SQL SERVER怎么用啊?

    2016年12月25日 4:48
  • Latest sql2k8 service pack is sp4.
    2016年12月25日 19:52
  • 内存使用不断上涨是正常的,这个网上和官方文档都有说明,不值得奇怪,而且也不用担心,达到最大内存使用(可以配置 max server memory 控制上限)

    内存的分配和磁盘分配不同,所以不能单纯地以记录多少和数据文件大小来来比较,对于一个查询来说,同样是返回几条记录,但复杂查询和简单查询的区别是很大的,需要排序操作和不需要排序操作的内存使用有时候也非常大,变长字段的长度定义,比如varchar(max)和 varchar(100),就算他们存储相同的内容,在内存的分配上,也是不同的

    SP补丁的问题,已经安装的是10.1,要求的是10.2,是不是下载错了?正常情况下 SP4可以直接基于原始版本安装的


    2016年12月26日 1:17