作业帮 > 作文素材 > 教育资讯

sql2008内存自动释放

来源:学生作业帮助网 编辑:作业帮 时间:2024/09/25 06:32:24 作文素材
sql2008内存自动释放作文素材

篇一:SQL Server 2008中的sqlserver内存释放

sqlserver内存释放

由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),

Sql Server才会释放一点点内存。所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下。

这些内存一般都是Sql Server运行时候用作缓存的,例如你运行一个select语句, 那么Sql Server会将相关的数据页(Sql Server操作的数据都是以页为单位的)加载到内存中来,

(转 载 于:wWW.smHAida.cOM 海达范文网:sql2008内存自动释放)

下一次如果再次请求此页的数据的时候,就无需读取磁盘了,大大提高了速度。这类的缓存叫做数据缓存。

还有一些其他类型的缓存,如执行存储过程时,Sql Server需要先编译再运行,编译后的结果也会缓存起来,

下一次就无需再次编译了。如果这些缓存已经不需要了,那么我们可以调用以下几个DBCC管理命令来清理这些缓存:

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

这几个命令分别用来清除存储过程相关的缓存、会话缓存、系统缓存以及所有所有缓存

但是需要注意的是,这几个命令虽然会清除掉现有缓存,为新的缓存腾地方, 但是Sql server并不会因此释放掉已经占用的内存。无奈的是,Sql Server 并没有提供任何命令允许我们释放不用到的内存。因此我们只能通过动态调整 Sql Server可用的物理内存设置来强迫它释放内存。

我们也可以通过Sql Server Management企业管理器进行动态控制。 连接到企业管理器之后打开Sql Server实例的属性面板,

找到内存设置,改变其中的最大服务器内存使用即可

--内存使用情况

SELECT * FROM sys.dm_os_performance_counters

WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')

-- 内存状态

DBCC MemoryStatus

--查看最小最大内存

SELECT

cfg.name AS [Name],

cfg.configuration_id AS [Number],

cfg.minimum AS [Minimum],

cfg.maximum AS [Maximum],

cfg.is_dynamic AS [Dynamic],

cfg.is_advanced AS [Advanced],

cfg.value AS [ConfigValue],

cfg.value_in_use AS [RunValue],

cfg.description AS [Description]

FROM

sys.configurations AS cfg

--设置最小最大内存

sp_configure 'show advanced options', 1

go

sp_configure 'min server memory', 0

RECONFIGURE

GO

sp_configure 'max server memory', 2147483647

RECONFIGURE

GO

sp_configure 'max server memory', 256

RECONFIGURE

GO sp_configure 'show advanced options', 0

-----------------------------------------------------------------------------------------------

CREATE proc [dbo].reclaimmemory --强制释放内存

as

begin

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

exec sp_configure 'max server memory', 256

EXEC ('RECONFIGURE' )

WAITFOR DELAY '00:00:05'

EXEC sp_configure 'max server memory', 2147483647

EXEC ('RECONFIGURE' )

GO

end

--使用示例

/*

reclaimmemory

*/

篇二:sqlserver内存释放

sqlserver内存释放

SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少。SQLserver会把所有处理过的SQL操作缓存在内存里,这样就不用总去读硬盘了。但是如果长时间运行SQL Server, 系统内存被用的差不多,再开启其他程序就有可能会报内存不足。这时候就需要释放内存缓存啦。一般我用以下两种办法:

1. 很简单,打开SQL Server configuration Manager,然后把SQL Server(MSSQLSERVER)重启一下,一般默认的instance 就是MSSQLServer,当然你如果装了其他的instance(实例)就选择相应的,例如MSSQLServer(SQLServLatin1),

MSSQLServer(ARABIC)。

这种方法最简单有效,但是只能临时的清除SQLServer缓存所占的内存空间,时间长了SQLServer还会把内存占满。而且很重要的是这种方法不能在SQLserver有连接的情况下使用,那样会让正在使用SQLServer的用户暂时无法连接SQLServer,甚至导致程序处错误。而你作为管理员就……

2. 第二种方法比较复杂,我也不是SQLServer高手,只是从网上学习得来的一些query: DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

以上一段一般能释放缓存,(注意引号有的时候因为word文档里打不出英文的引号,最好拷到记事本里编辑一下)但是有的时候不是很管用。因为SQLserver不会因为Cache(缓存)释放了而释放内存,占了茅坑不一定XX。此命令只会让SQLServer不会继续占领新的内存,定期执行一下还可以。关键是还要释放一下内存。 通过以下Query 可以看出当前服务器所占内存情况

SELECT * FROM sys.dm_os_performance_counters

WHERE counter_name IN ('Target Server Memory (KB)','Total Server Memory (KB)')

Target Server Memory(KB)和 Total Server Memory(KB)字面意思所得就是目标和当前SQL Server所占的内存大小。

EXEC sp_configure 'show advanced options', 1

GO

EXEC sp_configure 'max server memory', 256

EXEC ('RECONFIGURE' )

WAITFOR DELAY '00:00:05'

EXEC sp_configure 'max server memory', 2147483647

EXEC ('RECONFIGURE' )

GO

EXEC sp_configure 'show advanced options', 0

GO

其实我用这几句也不是很奏效,时间一长还是可能会有内存不够的情况。

******

总的来说我的管理办法是:

1. 装好了SQLServer之后立刻设置最大使用内存

EXEC sp_configure 'show advanced options', 1 -- 这句是打开advanced options GO

EXEC sp_configure 'max server memory', 9216 -- 设置最大内存为9G,我们server 内存是16G的,留下7G足够了

EXEC ('RECONFIGURE' )

GO

EXEC sp_configure 'show advanced options', 0 --记得用完了把advanced options关掉

GO

2. 过一段时间觉得不行了就执行一下

DBCC FREEPROCCACHE

DBCC FREESESSIONCACHE

DBCC FREESYSTEMCACHE('All')

DBCC DROPCLEANBUFFERS

这个清缓存也很头疼,不知道什么时候合适,就这样吧,管他呢,我又不是专家,出了问题大不了来机器不行。或者写个Procedure,用job定期执行。

没办法,SQLServer太霸道了,以上方法不是万全之策,建议还是把SQLServer放到一边单独用吧。

篇三:SQL_Server_2008_R2_CPU_和_内存_最大优化_分配

SQL Server 2008 R2 CPU 和 内存 最大优化 分配

微软SQL Server 2008 R2中的资源分配方式与SQL Server 2005中的方式相比是一种完全不同的过程。利用资源控制器,在SQL Server 2008 R2中解决方案供应商有切实可用的方法管理CPU和内存。

资源消耗是长期以来困扰使用SQL Server的解决方案供应商的基本问题之一。任何服务器,不管它是物理的还是虚拟的,供处置的CPU和内存池都是有限的。过去,这一简单的事实给SQL Server带来许多麻烦,因为它通常是资源非常敏感的应用。

如果服务器上只托管了唯一一个数据库的话,那么SQL Server资源消耗并不是个严重的问题。但是如果有多个数据库在用着,那就真的变成一个问题了,因为各种数据库都会竞争同样一组CPU和内存资源。

在SQL Server 2005中,对这个问题可以接受的解决方案通常是为每个数据库创建独立的SQL Server实例,利用处理器亲和度为每个数据库实例分配资源。这种技术的问题是一旦资源被分配给SQL Server实例,他们对其他SQL Server实例就不可用了。结果,如果一个数据库的负载特别重,它也不可能从其他SQL实例暂借服务器的CPU资源,虽然这个实例上的资源此时可能什么都没做。

一些解决方案供应商也曾尝试利用服务器虚拟化作为给个别SQL Server数据库分配资源的一种途径。在这种模型中,每台虚拟机只托管一个SQL Server数据库。这种方法也可行,但是虚拟机和他们的操作系统也消耗了一些本该用于SQL Server的服务器资源。此外,还依赖于你使用的虚拟化软件,以按需分配为基础的资源动态分配可能有些困难或者不可能实现。

微软最终针对SQL Server 2008 R2中的资源分配问题创建了一套可行的解决方案,引入了叫做资源控制器的新组件。这个资源控制器是可以通过微软SQL Server Management Studio访问的,它可以定义资源池,每个资源池都包含负载工作组,如下图所示:

你可以在图中看到,SQL Server 2008 R2默认定义了两个资源池:一个系统资源池,一个默认资源池。顾名思义,资源池是服务器资源的集合,这些资源在池内对工作组是可用的。 每个资源池被配置了CPU资源和内存资源的最小值和最大值。这些值按百分比表示,100%表示服务器的整个硬件资源。

池的最小值用CPU或者内存资源的百分比表示,表示这部分资源是专门分配给池的,而且对于该池是一直可用的。在配置了多个资源池的情况下,分配给所有池最小值的总和不能超过100%。任何没有声明最小值的资源可以自由地跨所有资源池使用资源。

要防止SQL Server 2008 R2数据库消耗掉不受最小值保护的所有系统资源,解决方案供应商可以设置最大值。最大值表示该池可以使用CPU或者内存资源的最大百分比。但是,很重要的一点是,解决方案供应商要意识到尽管他们可以设置任何最大值,池也有可能触发简短的CPU百分之百高峰。这些高峰不会带来问题,被认为是正常行为。

你可能注意到了上图,默认情况下,SQL Server 2008 R2包含两个资源池,每个资源池都包含一个工作负载组。资源控制器分类处理请求,并根据请求的特性把请求分配给合适的工作负载组。这意味着你不再限制在每个数据库级别上分配资源了。你确实可以给各类型的数据库请求分配不同的资源池。例如,解决方案供应商可能分配更多的CPU时间给数据库查询函数,而不是分配给写数据库操作的函数。

SQL Server 2008 R2资源控制器的一个大缺点是:它不是一个解决方案供应商可以启用或者通过点几下鼠标就可以配置的管理工具。分类处理请求,然后把请求转发给合适的负载工作组需要编写大量脚本。幸运的是,微软提供了一系列MSDN文章,告诉你如何创建必要的脚本。

请限制sql server 可使用的最大内存数

目前发现有部分专享自由型主机由于sqlserver数据库占用的内存过大,造成服务器可用内存资源过少,导致服务器运行缓慢甚至宕机。您可以通过以下方法限制sqlserver占用的最大内存,从而保证服务器有足够的内存可以使用:

1、登录服务器->打开企业管理器

2、打开SQL Server组

3、右键点击 (local)本地实例->选择“属性”

4、点击“内存”项,在其中“最大值”项中可以设定当前sqlserver可占用的最大内存。 SQL server 2008 标准版与企业版主要区别:

标准版 支持1-4个物理cpu,不支持双机功能

企业版 支持1-8个物理cpu,支持双机功能

你的数据库即使开64核,你的操作系统并发,依然被锁在垄断集团的、独裁帝国主义控制的默认出厂10个并发。64个核等待10个操作系统的并发,与32个核等待10个操作系统并发。从windows 7\8 windows 2005/2008操作系统默认都被锁在10个并发,原来XP,2003没有补丁XP PACK3和R2,可以通过第三防软件开放到2000个并发数,WINDOWS 7/8 、server 2005/2008系统内部,锁死256个并发,即使第3方软件也只能开放到256个并发,想想看64核进程,可以从256个大门进入,与64核排队等待10个大门进入,肯定更卡了。有疑问可以联系 QQ:530055784 本帅是DIY服务器+系统+数据库+独立研发数据结构和算法的玩家,可以自己的模拟机器语言编写数据库,SQL、ORACLE、MYSQL,核心都是通过C、C++、汇编编写的,不通过高级语言,语言越高运行效率越低。

前天设定数据库选项,打开所有CPU给SQL Server使用,然后检查了一下

SQL code

?

1 SELECT top 5 *

2 FROM sys.dm_os_wait_stats

3 order by wait_time_ms desc

CXPACKET 一项高居第一,于是将MaxDOP设定为16,CPU占用所改善。谁知昨天业务繁忙时段下面有客户端连接不上服务器。

再查微软资料:

SQL code

?

--当您配置 MAXDOP 值时,请遵循以下准则:

-- 对于使用八个以上的处理器的服务器使用以下配置: MAXDOP = 8。

-- 服务器的有八个或更少的处理器,使用下列配置其中 N 等于处理器数: MAXDOP = 0 到 N。

-- 对于具有 NUMA 配置的服务器,MAXDOP 不应超过分配给每个 NUMA 节点的 cpu 数。

-- 超线程已启用的服务器的 MAXDOP 值不应超过物理处理器的数量。

怀疑和超线程有关系,再上网查了下我的服务器志强E7 4820 果然是超线程CPU,物理核是8个。根据微软MaxDOP第一条和第四条原则,调整MaxDOP到8,目前为止CPU占用不高,LAZYWRITER_SLEEP是第一个wait_stats,运行似乎还稳定。

散分结贴。

篇四:32位突破2G内存限制 SQL2008 AWE应用测试

突破2G内存限制 SQL2008 AWE应用测试

我们采用了评测中心的一台DELL 2950服务器,配置了双路Intel 45nm Xeon E5430处理器,频率为2.66GHz,并能支持SSE4.1指令集。服务器还使用了Intel 5000X芯片组,提供24MB的Snoop Filter缓存,这可以提升高负荷时的内存/处理器性能。磁盘系统则是3块15000RPM的Cheetah 15K.5,并通过一块PCIe x8的LSI MegaRAID SAS 8708ELP来组建RAID 5阵列。

为了使用AWE,应用程序必须:

1. 使用Win32的AllocateUserPhisycalPages API函数分配扩展物理内存。该函数需要调用者具有将内存页锁定的权限。

2. 使用VirtualAlloc API函数在进程的地址空间中创建一个区域,作为与扩展物理内存进行映射的一个窗口。

3. 使用MapUserPhysicalPages或者MapUserPhysicalPagesScatter API函数,将扩展物理内存映射到这个虚拟内存窗口中。

在数据库使用AWE功能之前,必须对操作系统和SQL数据库分别进行设置。

内存锁定页面

首先应用程序要满足第一条要求,它必须能具备内存锁定页面功能,这需要在组策略中进行设置,如图所示启用SQL程序运行帐号的内存锁定页面功能。通常基于安全性的考虑会给数据库一个独立的运行帐号,这时就需要将其添加入内存锁定页面选项页。一些其他需要AWE功能的程序,也需要这样设置。

SQL2005的AWE设置很方便

随后要进入SQL2005的管理界面,将AWE选项打开。和SQL2000必须通过控制台命令打开不同,SQL2005可以在图形界面下设置,很方便。设置完毕需要重新启动SQL服务。

我们在被测服务器上安装了Microsoft SQL 2005,按照测试要求建立了数据库。BF在测试之前会在数据库中生成9个表,其中包括4个500万行的表格,每行包括100字节的数据,因此每个表格容量大约是476MB,整个数据库容量为1.86GB。我们用60个客户端模拟了总共1600个用户,在这个数据库中进行查询、添加、删除、修改等操作。在测试期间,数据的吞吐量很小,因此网络吞吐量不会成为瓶颈。

这里可以看出,我们的配置使用了AWE功能之后,数据库在中等用户数量下的性能得到了较大的提升,幅度可以达到25%左右,而在大量用户数量下,使用AWE功能会导致性能下降10~20%左右。

IT168评测中心观点

测试结果看上去有些奇怪,不过分析之下应该可以理解。我们的测试机器只具有4GB内存(和2~4GB虚拟内存),在中等用户数量条件下,AWE功能让数据库突破了2GB的限制,从而可以达到3GB左右,因此吞吐量得到了提升。而在重负荷的情况下,系统内存已经耗尽(操作系统、文件系统缓存本身也要占用一定的内存),因此AWE锁定内存页面反而降低了可以用于分页的内存,因此性能会有降低。从这点来看,3GB~4GB的重负荷数据库服务器使用AWE的必要性不是很大。

然而再往上就不同了,AWE可以让系统内存得到充分的利用,而现下内存价格已经不是特别贵了,大内存的服务器也变得较为常见,因此我们建议使用SQL数据库的时候尽量开启AWE功能。

AWE可以让32位Windows突破2GB进程内存限制

篇五:sqlserver从2000升级到2008速度慢的内存优化

我们公司的服务器冲sqlserver2000升级成2008,用友U8的数据导入后,再使用用友,悲剧发生了,所有使用人员都在想我狂喊慢慢慢!耳朵都被电话塞满了,心里着急的不行。

看看服务器的具体情况吧,从服务器资源监视器中可以看到,只要客户端一有连接操作,服务器的硬盘占用时间一直是100%。怀疑是sql2000升级到2008后数据碎片过多。利用sql2008自带的数据库维护工具,进行了索引重建、信息统计,使用者反映,稍微快了点,但是没有特别大的改观。

在观察到服务器,尽管硬盘占用时间一直是100%,但是同时cpu使用效率很低,内存使用始终维持在一半。应该是sql没有设置好内存使用。按照下面的步骤设置 了内存。

我的服务器是 windows2008标准版32为,物理内存为4g,

按照网上找的这篇教程设置完成,重启后,录入人员都说简直太快了。世界清静了,感谢写这篇教程的人

Windows2008 32位开启服务器PAE大内存支持及SQLServer使用3G以上内存教程

1、(重要)开启Windows2008PAE内存支持:

点击“开始”菜单,展开“程序”菜单,在程序菜单下展开“附件”菜单,找到“命令提示符”右键选择“以管理员身份运行,于弹出的“管理员:命令提示符”的光标处输入:BCDEdit /set PAE forceenable,回车执行命令,提示:“操作成功完成”,则表示Windows已成功开启PAE内存扩展。如下图所示:

作文素材