SQL SERVER 占用内存不断变大,有没有办法解决或知道问题所在

假以辞色 2003-12-11 10:11:30
SQL SERVER 7.0,NT 4.0 SERVER,在SQL SERVER 使用几天后,内存占用很大,有5\6百兆大,我看了一下,是缓存大.我平时一直使用SQL SERVER,数据量比较大,但数据量没有这么大. 有没有办法知道问题出在那里,如何解决.
还是我开的数据库的临时库变的很大,有没有办法变小.
...全文
593 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2003-12-12
  • 打赏
  • 举报
回复
固定内存

加大内存.
prcgolf 2003-12-12
  • 打赏
  • 举报
回复
happydreamer(卖女孩的小火柴)
-------^^^^^^
嘿嘿!!
俺要打110了!!
zhaoloudy 2003-12-11
  • 打赏
  • 举报
回复
设置MSSQL的最大内存使用。
happydreamer 2003-12-11
  • 打赏
  • 举报
回复
SQL Server 缓冲存储器

一 工作原理

SQL Server为每个实例建立一个列表,包括供该实例使用的页地址. 这些页构成了缓冲存储器.
第一次启动SQL Server时缓存的所有页面都是空闲的. 随着处理的开始,调度进程将陆续从磁盘调入
页面保存在缓冲存储器的中。如果其他进程需要读入或修改页面,就可以在缓冲存储器中进行,不需
要执行对磁盘的I/O操作. 通过访问内存中的页面, 缓冲存储器将加速读写操作,占用更少的资源.

缓冲页面头信息包含了一个访问计数器和脏页面指示器. 脏页面表示该页面在缓冲中被修改了但还没有写回磁盘. 缓冲中页面每被访问一次,计数器将自动加1. SQL Server 会定期扫描缓冲存储器,并将计数器除4取整. 如果除法的结果为0,就表示在最后一次扫描后,该页面的访问次数少于3次,系统将检查脏页面指示器:

如果该页面被修改,其修改结果将被写回磁盘,脏页面指示器被置位,然后把这个页面加入空闲列表中
如果该页面只被访问过,系统将释放该页面,不需要写回磁盘

SQL Server在Win NT或2000中运行时,将由一个扫描工作线程在排定一个异步读操作和该操作完成的时间间隔之间完成扫描缓冲存储器。扫描线程也会将脏页面写回磁盘中并将该页面添加到空闲列表中。这些写操作也是异步的,不会影响线程完成异步读操作。

系统还有一个叫Lazy Writer惰性写线程的线程,负责定期检查空闲缓冲列表中可供使用的空闲缓冲页数是否已经降到了特定大小。如果空闲列表的空闲缓冲页数已经少于特定的大小,Lazy Writer线程将扫描缓存,回收没有被使用的页面并且释放脏页面。在Win NT或2000系统中,Lazy Writer线程并没有太多的工作,绝大多数的工作都是由以上所介绍的扫描线程完成的,只是在I/O密集的系统中,将需要Lazy Writer线程帮助维护空闲列表,由于在Win98不支持异步写操作,Lazy Writer必须完成释放缓冲页面和将脏页面写回磁盘,扫描线程将帮助回写修改过的缓冲页面,但不会释放这些页面.



二 如何监视SQL Server缓冲存储器

通过Win2000管理工具的性能监视器可以查看以下对象

1) SQL Server Buffer Manager Object,Buffer Cache Hit Ratio counter
(缓冲管理器对象,缓冲存储器命中率计数器)
一个良好的系统具有90%或者更高的缓冲区缓存命中率,如果你的缓冲区缓冲命中率很低,可以给SQLServer 分配更多的内存

2) SQL Server Buffer Manager Object, Free Pages 空闲页计数器
看这个数值是否持续低于5MB,即640个页(SQL Server以8KB为一页),如果不能维持在这个值左右,说明需要为SQL Server分配更多的内存

3) SQL Server Buffer Manager Object, Procedure cache pages (过程缓存页)
用于存储以编译过的存储过程的页数目

happydreamer 2003-12-11
  • 打赏
  • 举报
回复

下述公式 常用于计算最小内存


最小内存=系统+用户内存+数据库处理区

其中
系统=操作系统+SQL Server数据库
用户内存=并发用户数量*每个用户的内存
数据库处理区=日志区+数据库高速缓存的大小
数据库高速缓存的大小=数据库高速缓存块大小(就是SQL server的块大小 8192)*数据库块单元
数据库块单元是在高速缓存中的块的数量



查询内存分配
check the memory allocate in master sysperinfo table.loke below:
SELECT 'Procedure Cache Allocated',
CONVERT(int,((CONVERT(numeric(10,2),cntr_value) * 8192)/1024)/1024)
as 'MBs'
from master.dbo.sysperfinfo where object_name = 'SQLServer:Buffer Manager' and
counter_name = 'Procedure cache pages'
UNION
SELECT 'Buffer Cache database pages',
CONVERT(int,((CONVERT(numeric(10,2),cntr_value)* 8192)/1024)/1024)
as 'MBs'
from master.dbo.sysperfinfo where object_name = 'SQLServer:Buffer Manager' and
counter_name = 'Database pages'
UNION
SELECT 'Free pages',
CONVERT(int,((CONVERT(numeric(10,2), cntr_value)* 8192)/1024)/1024)
as 'MBs'
from master.dbo.sysperfinfo where object_name = 'SQLServer:Buffer Manager' and
counter_name = 'Free pages'
CrazyFor 2003-12-11
  • 打赏
  • 举报
回复
关于MSSQL占用过多内存的问题

摘:

经常看见有人问,MSSQL占用了太多的内存,而且还不断的增长;或者说已经设置了使用内存,可是它没有用到那么多,这是怎么一回事儿呢?
首先,我们来看看MSSQL是怎样使用内存的。
最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。
其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销的。
所以用于关联和排序的列上一般需要有索引。
再其次就是对执行计划、系统数据的存储,这些都是比较小的。

我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存,数据缓存一般是越多越好,甚至有些时候我们会强行把一些数据pin在高速缓存中。但是如果有其它应用程序,虽然在需要的时候MSSQL会释放内存,但是线程切换、IO等待这些工作也是需要时间的,所以就会造成性能的降低。这样我们就必须设置MSSQL的最大内存使用。可以在SQL Server 属性(内存选项卡)中找到配置最大使用内存的地方,或者也可以使用sp_configure来完成。如果没有其它应用程序,那么就不要限制MSSQL对内存的使用。

然后来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引。
本课程根据讲师十多年在世界500强外企的生产环境中的SQL Serer数据库管理和项目实施经验倾心打造。课程系统性强,知识体系完整,覆盖90%以上的企业环境下SQL Server高可用场景,课程中不仅演示详细的操作步骤,更加突出最常见的故障和问题,让学员少走“弯路”,不只是让学员学会“操作”更能让学员“操作”的规范,满满的干货分享,一些课程资料(架构图、部署规划表格等)不仅可以帮助学员掌握技能,也可以作为学员在企业生产环境中实施SQL Server高可用的配置文档、操作手册等。课程的实验环境介绍:1)全部基于微软域环境和企业版SQL Server AOAG - 95%以上的企业环境都是在域环境中,不介绍非域环境和标准版的SQL Server高可用性组,这的配置在企业中较罕见,没有实践意义,不浪费学员时间。2)相应域环境已提前部署和配置好 - 学员导入虚拟机即可开始实验,无需从零开始搭建域环境,所有实验中SQL Server均已加域,直入主题,节省大量时间。3)最新的Windows Server故障转移集群(WS2016、WS2019)和最新版本的SQL ServerSQL2017、SQL2019) -  WS2016-SQL2017与WS2019-SQL2019是目前大多数企业SQL Server高可用的主要平台,基于微软产品生命周期现在一些企业也在讲早期的AOAG向这两个版本迁移,掌握这两种组合不仅让学员学会,更能学有所用。本课程为后续SQL Server进阶课程铺垫,是通向SQL Server DBA 专家的必经之路,讲师每周答疑两次。所有课程资料包括:课程PPT、架构图、部署规划表格、各类脚本学员均可下载。     

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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