关于SQL SERVER 2008 内存使用的疑问

allleexp 2011-01-08 06:17:56
1、win2003 Enterprise Edition + SQL SERVER 2008,都是32位的。
2、内存8G,操作系统的boot.ini已经加上了PAE,用以访问大于4G的内存。
3、SQL SERVER 2008的内存管理勾选了“使用AWE分配内存”
4、服务器只运行SQL SERVER。不重启SQL SERVER,不重启服务器。
5、运行一段时间后观察SQL占用的内存始终在1.7G左右。
6、摘录的介绍“在 Windows Server 2003 中,SQL Server 支持动态分配 AWE 内存。启动过程中,SQL Server 仅保留一小部分 AWE 映射内存。当需要额外的 AWE 映射内存时,操作系统便会将其动态分配给 SQL Server。同样,如果所需的资源较少,则 SQL Server 可将 AWE 映射内存返回到操作系统,以供其他进程或应用程序使用”。

疑问:
1、内存剩余还很多,为什么SQL不继续占用内存呢?
2、SQL是不是会定期把不活跃的内存占用换给操作系统?如果是这样,这个定期是长时间?
3、在32位系统里,是不是单个程序占用内存会被限制在2G以内?
4、我的数据库文件占用磁盘3.7G左右,有没有可能把整个数据库都缓冲到内存中,让平时需要I/O访问的操作都从内存中进行?
5、如果第4点不行,那有没有办法让SQL加大缓冲的空间,以减少I/O的访问,从而提高运行速度?
6、如果不使用AWE,我知道可以通过设置内存最大值来让SQL占用很大的内存,但是这样的运行效果反而很慢,运行程序变得很卡,经常出现连接池满的现象。

望大虾赐教!
...全文
1969 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Austindatabases 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 allleexp 的回复:]
1、win2003 Enterprise Edition + SQL SERVER 2008,都是32位的。
2、内存8G,操作系统的boot.ini已经加上了PAE,用以访问大于4G的内存。
3、SQL SERVER 2008的内存管理勾选了“使用AWE分配内存”
4、服务器只运行SQL SERVER。不重启SQL SERVER,不重启服务器。
5、运行一段时间后观察SQL占用的内存始终……
[/Quote]

首先你对SQL SERVER内存管理有错误

1 SQL SERVER 不会将数据库移植到内存中,这是很荒谬的
2 SQL SERVER 一般早期2000,对内存的管理不强,SQL SERVER 2005后对内存的管理措施加强
会根据数据库的查询,等操作自动分配内存的使用,这个你不必担心

另外建议你更换操作系统,请更换到 WINDOWS 2008 64BIT 充分发挥 SQL SERVER的性能
Andy-W 2011-05-24
  • 打赏
  • 举报
回复
6、如果不使用AWE,我知道可以通过设置内存最大值来让SQL占用很大的内存,但是这样的运行效果反而很慢,运行程序变得很卡,经常出现连接池满的现象。
出現這樣的問題,可以看回第3個問題的回答。
Andy-W 2011-05-24
  • 打赏
  • 举报
回复
1、内存剩余还很多,为什么SQL不继续占用内存呢?
因為SQL Server 會動態分配內存。运行在 MicrosoftWindows Server 2003 上的实例使用动态 AWE 内存分配。
2、SQL是不是会定期把不活跃的内存占用换给操作系统?如果是这样,这个定期是长时间?
当该实例获取的内存超过 min server memory 设置并且 Windows 指示可用内存短缺时将释放内存,随着在运行 SQL Server 实例的计算机上启动其他应用程序,这些应用程序将会占用内存,从而使可用物理内存量降到 SQL Server 目标以下。SQL Server 实例将调整其内存使用量。如果有其他应用程序停止运行而使可用内存增多,SQL Server 实例将增加其内存分配的大小。SQL Server 可以每秒释放并获取几 MB 的内存,这使它可以根据内存分配变化快速做出调整。

3、在32位系统里,是不是单个程序占用内存会被限制在2G以内?
所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)。所有操作系统版本(从 Windows 2000 Server 开始,包括 Windows Server 2003)都有一个 boot.ini 开关,可以为应用程序提供访问 3 GB 的进程地址空间的权限,从而将内核模式地址空间限定为 1 GB。
地址窗口化扩展插件 (AWE) 通过允许访问尽可能多的操作系统支持物理内存来扩展 32 位应用程序的功能。AWE 可以将最大内存容量 64 GB 的一部分映射到用户地址空间来实现此功能。应用程序缓冲池和 AWE 映射内存之间的映射通过操作 Windows 虚拟内存表来完成。

4、我的数据库文件占用磁盘3.7G左右,有没有可能把整个数据库都缓冲到内存中,让平时需要I/O访问的操作都从内存中进行?
系統不會主動把整個數據庫文件內容緩存到內存中,除非你執行所有表的查詢,而且分配給SQL Server的內存足夠多。

5、如果第4点不行,那有没有办法让SQL加大缓冲的空间,以减少I/O的访问,从而提高运行速度?
主要你分配給SQL Server足夠大的內存,SQL Server會自動管理缓冲區。是于減少I/O的訪問,還與你T-SQL語句和是否會清除缓冲區內容有關。

6、如果不使用AWE,我知道可以通过设置内存最大值来让SQL占用很大的内存,但是这样的运行效果反而很慢,运行程序变得很卡,经常出现连接池满的现象。
出現這樣的問題,可以看回第2個問題的回答。

無論如何,遇到問題不要衝動。
Felixzhaowenzhong 2011-05-24
  • 打赏
  • 举报
回复
给你个地址
http://www.huacolor.com/article/23361.html
Felixzhaowenzhong 2011-05-24
  • 打赏
  • 举报
回复
遇到 真正的难题 就没人了。杯具呀
gm_dragon 2011-04-14
  • 打赏
  • 举报
回复
这是由于你配置不对造成的
-晴天 2011-01-08
  • 打赏
  • 举报
回复
1.你的数据库服务器访问量不大吧,弄多个复杂的查询试试?
2.这个时间是DBMS管的,用户不需要关心它吧?
3.你不是用了内存映射了么?
4.貌似不行,数据库都到内存里了,要是突然断电,你的数据不就杯具了?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧