为什么SQL Server使用很少的内存

如题所述

为什么SQL Server使用很少的内存

昨天论坛里边看到一个帖子,说SQL Server的内存一直上不去。从Task Schedule中看到SQL Server只使用了88MB内存,实际这台机器有12GB的内存,可用内存有超过8GB。
www.2cto.com
当时我以为是开启了AWE导致的,所以连接到他的服务器看了一下。但是数据库为2005企业版64位,所以不用开启AWE。而且即使开启了,也会被忽略。

使用下面的脚本查询了一下SQL Server内存使用:

select physical_memory_in_use_kb,locked_page_allocations_kb,*fromsys.dm_os_process_memory

看到实际使用的内存有2GB,远远超出任务管理器看到的。(也可以通过Perfmon的Total server memory(MB)查看)。
www.2cto.com
当时觉得很奇怪,查看了SQL Server错误日志发现了类似下面的信息:

2009-06-0412:21:08.16 Server Large Page Extensions enabled.
2009-06-04 12:21:08.16 Server Large Page Granularity: 2097152
2009-06-04 12:21:08.21 Server Large Page Allocated: 32MB

猜测这台期间开启了Lock Pages In memory功能,之后得到确认。因为开启Lock Pages In memory之后,SQL Server会使用AWE APIs锁定内存页,所以这部分的内存使用不会显示在Working Set中。

So in summary the AWE APIs for 32bit and 64bit SQL Server systems are used for different purposes. In 32bit it is really to extend memory access beyond 4Gb or to enable the AWE feature. For 64bit systems, it is to possibly gain performance and to “lock pages” for the buffer pool.

到现在这个问题就比较明朗了,其实SQL Server还是正常工作的。一般查询SQL Server的使用还是建议使用DMV或者Perfmon,直接查看Working Set信息可能不准。

另外说一下,当时看到上面Large Page的信息,以为是数据库开启了LargePage,但是使用DBCC TRACSTATUS查看没有开启834 Trace Flag,所以大数据功能是没有启用的。只有开启834 Trace Flag数据库才会真正启用Large Page。

启用Large page在数据库错误日志会看到类似信息:

2009-06-0414:20:40.03 Server Using large pages for buffer pool.

关于Lock Pages In memory/working set机制我找到了两篇文章,大家有兴趣可以参考:
<a href="http://blogs.msdn.com/b/psssql/archive/2009/06/05/sql-server-and-large-pages-explained.%3Ca%20href=" kf="" web="" asp="" "="" target="_blank" class="keylink" style="color: rgb(51, 51, 51); text-decoration: none;">aspx" target="_blank">Funwith Locked Pages, AWE, Task Manager, and the Working Set
WhySQL Server is using so LESS memory
温馨提示:内容为网友见解,仅供参考
无其他回答

为什么SQL Server使用很少的内存
如果小于4M或更小,说明计算机上总的内存可能不足,或某个程序没有释放内存●Memory:PageFaults\/sec每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page\/sec只表明数据不能在内存指定工作集中立即使用。如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,...

为什么SQL Server使用很少的内存
猜测这台期间开启了Lock Pages In memory功能,之后得到确认。因为开启Lock Pages In memory之后,SQL Server会使用AWE APIs锁定内存页,所以这部分的内存使用不会显示在Working Set中。So in summary the AWE APIs for 32bit and 64bit SQL Server systems are used for different purposes. In 32bit...

浅谈优化SQLServer服务器内存配置
由于tempdbinRAM使用的内存是由系统从内存体单独分配的,与SQL Server的内存选项设置的可用内存池是分开的,使用tempdbin RAM将减少整个系统的可用内存,应根据SQL Server和服务器运行情况进行配置,否则就可能适得其反,影响系统性能。另外,适当增加tempdb数据库空间,即使不使用tempdbin RAM,也可以提高数据...

服务器2012r2安装内存96G为什么可用内存64G?
5. 物理硬件限制:服务器的物理硬件配置也会影响可用内存的数量。如果服务器的硬件不支持那么大的内存,或者存在硬件故障,也可能导致可用内存减少。6. 内存配置:在SQL Server等数据库系统中,可以通过设置Min Server Memory (MB) 和 Max Server Memory (MB)来控制SQL Server使用的内存大小。如果这些值...

SQL Server配置内存过大、Server不能启动时怎么办
如果Server使用内存太小,影响到SQL Server的性能,但内存配置过大超过一定比例时,导致SQL Server不能启动。在ISQL中,用sp_configure “memory”可以看到你的Server现在使用的内存大小。这个数字单位为Page,每一个Page为2K。参数memory在启动Server时被读入内存。所以memory被修改之后,必须shutdown Server...

怎样解决SQL Server内存不断增加问题
当系统本身有内存可以用的的时候,SQL Server 根据操作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止内存页面交换(在 4 至 10 MB 之间),SQL Server 缓冲池就会继续增大。如果你想把sql的内存控制在某个数量,可以更改配置信息...

SQL Server执行SQL语句时内存占用特点[3]
首先简述一下SQL Server内存占用的特点 SQL Server所占用的内存除程序(即SQL Server引擎)外 主要包括缓存的数据(Buffer)和执行计划(Cache) SQL Server以 KB大小的页为单位存储数据 这个和SQL Server数据在磁盘上的存储页大小相同 当SQL Server执行SQL 语句时 如果需要的数据已经在其内存中 则直接从内存...

为什么SQL Server运行中会隔1、2个小时就把我的内存全“吃”了呢...
只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。需要采取措施限制SQL Server 的内存使用量。可以通过设置SQL Server 数据...

sql server 在占用服务器内存居高不下怎么办
1、SQL Server 作为一个数据库服务系统,它的作用就是以尽可能高效、实用的方式管理数据,所以,它占用服务器内存高是很普遍的现象。2、但是如果在SQL数表设计、存储过程代码编写、临时表的应用中,不注意考虑内存占用与释放,CPU运算,可能会额外的造成不必要的内存占用、CPU占用等。3、SQL Server在运行...

SQLServer如何设置内存大小
1. 调整最大服务器内存设置 SQL Server 使用内存来缓存数据,以便快速检索。但是,如果它占用了太多的内存,可能会导致系统资源争用,影响性能。通过配置 SQL Server 的最大服务器内存设置,可以限制它使用的内存量。这可以在 SQL Server Management Studio (SSMS) 中完成,通过右键点击服务器,选择“内存...

相似回答