大内存SQLServer数据库的加速剂

大内存SQLServer数据库的加速剂,第1张

数据库配置比较大的内存 可以有效提高数据库性能 因为数据库在运行过程中 会在内存中划出一块区域来作为数据缓存 通常情况下 用户访问数据库时 数据先会被读取到这个数据缓存中 当下次用户还需要访问这个数据时 就会从这个数据缓存中读取 因为在数据缓存中读取数据要比在硬盘上读取数据快几百倍 所以扩大数据库服务器内存 可以有效提高数据库性能 特别是 *** 作大型数据库时效果更加明显

但是 现在企业中普遍采用的数据库服务器都是 位的 *** 作系统 而这个 位的 *** 作系统却有最大内存的使用限制 通常情况下 标准的 位地址最多可以采用 GB的内存 若数据库管理员想让数据库系统采用更多的内存来提高数据库的性能 则就需要进行额外的配置 下面笔者就介绍两种常用的配置方式 让SQLServer数据库服务器支持大内存 让其成为数据库的加速剂

一 让数据库应用程序支持 GB的内存空间

虽然 *** 作系统支持 GB内存 可是 这并不会全部给数据库等应用程序使用 默认情况下 在 位 *** 作系统中 将有 GB的内存空间是为 *** 作系统所保留的 即使没有用完 其他应用程序也是不能够染指的 而包含SQL Server数据库在内的所有应用程序 只能过采用剩余的 GB内存空间

但是 在实际应用中 *** 作系统往往用不着多大 G的内存 根据笔者的经验 一般只要为 *** 作系统保留 G的内存已经足够其使用 只要没有病毒等不良因素作怪 这个内存不会被完全适用 如此的话 应用程序可以采用的内存空间就会多达 G 比原先整整多出一个G来

要实现这个转变 其实很简单 在Windows *** 作系统中 有一个BOOT启动配置文件 为了让数据库服务器支持 GB的用户模式进程空间 必须在这个配置文件中 加入一个/ gb的参数 然后重新启动 *** 作系统即可 这么设置之后 应用程序就可以寻址 GB的进程地址空间 而为 *** 作系统保留 GB的内存空间

有时候 这个小小的配置可以在很大程度上提高数据库的性能 记得有一次 笔者为一家企业优化数据库性能 笔者查看了用户的数据库环境之后 就建议用户增大数据库服务器的内存 从 G增加到 G 可是 效果并没有很大的改善 正当笔者束手无措的时候 就想到了改变 *** 作系统与应用程序的内存分配方式 为此 笔者就更改了BOOT启动配置文件 只给 *** 作系统保留 G的内存空间 重新启动后 数据库性能得到了很大的改善

二 为SQLServer启用更高的内存支持

如果数据库应用程序内存寻址空间达到 GB后 数据库管理员还不满足的话 则就需要通过增加物理内存的方式 来提高应用程序的性能 若需要服务器 *** 作系统突破其默认 GB内存空间的限制 支持 GB以上的内存空间 也不是不可能的 只是需要进行额外的配置 并且 其维护的工作量也比较大

若想要SQLServer数据库支持 GB以上的内存寻址空间 则往往需要进行如下配置

第一步 锁定内存页

默认情况下 内存大小与 *** 作系统的虚拟内存之间有一个正比例关系 在这里 数据库管理员只想增大服务器的物理内存 而不想对虚拟内存有什么影响 故需要锁定内存页 锁定内存页的主要作用就是确定哪些帐户可以使用进程将数据保留在物理内存中 从而阻止系统将数据分页到磁盘的虚拟内存中 默认情况下 这个选项的只为OFF 也就是说 在必要的时候 系统会将数据分页到硬盘的虚拟空间中 为了最大程度发挥内存的效用 就需要把这个选项开启 不过这数据库管理员往往需要寻求系统管理员的帮助 因为只有具有系统管理员权限的用户 才能够给更改这个选项

第二步 启用Awe Enable选项

默认情况下 即使服务器 *** 作系统支持 GB以上的内存空间 可是数据库应用程序并不一定支持 为了让SQLServer应用程序也支持这个 就必须更改数据库的配置参数 也就是说 需要将这个选项的值设置为 然后重新启动数据库系统 这个配置比较简单 只需要利用命令sp_configure awe enabled 即可 不过在进行这个配置之前 需要注意两个细节方面的内容 一是数据库用户需要这个 *** 作的权限 二是这里有一个BUG 即在SQL Server数据库中会有一个错误信息 数据库管理员可以忽略这个信息

第三步 限制文件系统缓存

若增加的内存给 *** 作系统或者其他应用程序用了 那么数据库管理员不是白忙一场吗为此 数据库管理员还需要优化数据库系统内存的使用情况 如需要限制系统用于文件缓存的内存量 如要这么处理的话 只需要简单的三个步骤即可

首先 数据库管理员在 *** 作系统中 找到控制面板 并双击网络连接 然后选中本地连接 其次 双击本地连接 在d出的对话框中 找到常规选项卡 单击属性 选中网络文件与打印机共享 并单击属性 最后 在d出的对话框中 去掉 最大化网络应用程序数据吞吐量 复选框 一路按确认即可 这个简单的步骤 就可以优化数据库内存的使用率

三 大内存维护管理几个关键点

在通常情况下 往往不需要启用 GB以上的内存 但是 若在服务器上 同时启用了其他的应用程序服务 如在一台服务器上同时有数据库应用程序 邮件应用程序 文件服务器等多个应用服务的话 则可能原有的 GB内存无法满足 系统管理员不得不对内存进行升级 但是 对内存升级之后 数据库管理员需要手工对内存的分配进行干预 以免SQLServer应用程序占用比较多的内存空间 而影响其他应用程序的性能

配置max server memory选项 虽然说这个选项并不是必须要修改的 但是笔者仍强烈建议数据库管理员要修改这个选项 特别是数据库应用程序与其他应用程序共享同一台服务器时 因为启动SQLServer对大内存的支持后(将Awe Enabled设置为 ) 而且可用物理内存大于用户模式进程空间 则当启动数据库服务器时 运行的SQLServer实例将会占用几乎所有的可用内存(不管需不需要使用 数据库服务器程序会先锁定这些内存 这就叫占著茅坑不拉屎) 而这个max server memory选项就是用来配置其最大可以占用的内存数量 数据库管理员需要预先估算出一个合理的数值 然后进行配置 让数据库应用程序与其他应用服务能够共同改善 至少不能够对其他应用程序的性呢产生不良影响 在比较极端的情况下 可以在升级内存之前 先关闭数据库应用程序;然后启用其他应用程序服务 观测一段时间 看看他们所需要用到多少的内存 然后升级内存 并为其他应用程序至少保留以前所需要的内存空间 否则的话 就会对其他应用程序产生不良影响 牺牲其他应用程序的性能来提高数据库的性能 这是拆西墙补东墙的做法 不值得取

lishixinzhi/Article/program/SQL/201311/16351

使用两个服务器内存选项 min server memory 和 max server memory 重新配置缓冲池中 Microsoft® SQL Server™ 实例所使用的内存量(以 MB 为单位)。

默认情况下,SQL Server 能够可用系统资源动态改变它的内存需求。min server memory 的默认设置为 0,max server memory 的默认设置为 2147483647。可以为 max server memory 指定的最小内存量为 4 MB。

当 SQL Server 动态使用内存时,它要求系统定期地检测可用的物理内存数量。SQL Server 根据服务器活动增大或收缩高速缓冲存储器,以使可用物理内存保持在 4 MB 到 10 MB 之间。这就避免了 Microsoft Windows NT® 40 或 Windows® 2000 换页。如果有较少可用内存,则 SQL Server 将内存释放给 Windows NT 或 Windows 2000,后者通常继续使用可用列表。如果有更多可用内存,则 SQL Server 将内存再提交到高速缓冲存储器。SQL Server 仅在其工作负荷需要更多的内存时才增加高速缓冲存储器的内存;处于休眠状态的服务器不增大其高速缓冲存储器。

允许 SQL Server 动态使用内存是推荐使用的配置;然而,可以手工设置内存选项并且可以禁止 SQL Server 动态使用内存的能力。在设置 SQL Server 使用的内存量之前,应确定适当的内存设置,方法是从全部物理内存中减去 Windows NT 40 或 Windows 2000 以及 SQL Server 的任何其它实例所需要的内存(以及其它系统使用的内存,如果该计算机不为 SQL Server 专用)。这就是可以分配给 SQL Server 使用的最大内存量。
说明 如果您已经安装并且运行了全文检索支持功能(Microsoft 检索服务,亦即 MSSearch),那么您必须手工设置 max server memory 选项,为 MSSearch 服务运行预留足够的内存。max server memory 设置必须与 Windows NT 40 虚拟内存大小一起进行调整,以便使得保留给全文检索的虚拟内存是物理内存的 15 倍(不包括计算机中其它服务所需的虚拟内存)。应这样配置 SQL Server max server memory 选项,使得留有足够的虚拟内存满足全文检索内存需求。全部虚拟内存 -(SQL Server 最大虚拟内存 + 其它服务需要的虚拟内存)>= 15 倍物理内存。
手工设置内存选项
手工设置 SQL Server 内存选项有两种主要方法:

第一种方法,设置 min server memory 和 max server memory 为同一数值。该数值与分配给 SQL Server 的固定内存量相对应。
第二种方法,把 min server memory 和 max server memory 数量设置到一个范围段内。这种方法在系统或数据库管理员希望配置 SQL Server 实例,使其适应在同一台计算机上运行的其它应用程序的内存需求时很有用。
min server memory 保证了 SQL Server 实例使用的最小内存量。SQL Server 启动时不立即分配 min server memory 中所指定的内存量。但是,当内存使用由于客户端负荷而达到该值后,SQL Server 将无法从已分配的缓冲池中释放内存,除非减少 min server memory 值。
说明 不保证 SQL Server 分配 min server memory 中所指定的内存量。如果服务器上的负荷从不需要分配 min server memory 中所指定的内存量,则 SQL Server 将以较少的内存运行。
max server memory 则可防止 SQL Server 使用多于指定数量的内存,这样剩余的可用内存可以快速运行其它应用程序。SQL Server 启动时不立即分配 max server memory 中所指定的内存。内存使用随 SQL Server 的需要而增长,直到达到 max server memory 中所指定的值。SQL Server 无法超过该内存使用值,除非增加 max server memory 值。
重要 服务器启动时,在地址窗口扩展 (AWE) 内存模式下运行的 SQL Server 实例确实分配 max server memory 中所指定的全部内存量。有关 AWE 内存的更多信息,请参见管理 AWE 内存。
在应用程序启动和 SQL Server 释放内存之间将有一个较短的时间延迟,使用 max server memory 可以避免该延迟,从而可以提高其它应用程序的性能。仅当与 SQL Server 共享同一台服务器的新应用程序在启动时显示有问题时,才设置 min server memory。最好让 SQL Server 使用全部可用的内存。

如果手工设置内存选项,应确保适当地设置用于复制的服务器。如果服务器是一个远程分发者或者是一个出版者/分发者的组合,则必须为它分配至少 16 MB 的内存。

理想情况下,在不引起系统交换页面到磁盘的前提下,应尽可能多地分配内存给 SQL Server。该值因系统不同而有很大差别。例如,在一个 32 MB 系统中,分配 16 MB 给 SQL Server可能是合适的;在一个 64 MB 系统中,则可能适合分配 48 MB。
说明 当增大 SQL Server 内存数量时,应确保有足够的磁盘空间来容纳 *** 作系统虚拟内存的支持文件(Pagefilesys)。有关虚拟内存支持文件的更多信息,请参见 Windows NT 40 和 Windows 2000 文档。
指定的内存数量必需满足 SQL Server 的静态内存(核心开销、打开的对象、锁等等)以及数据缓存(亦称高速缓存)的需要。

如有必要,在系统监视器(在 Windows NT 40 中为性能监视器)中使用统计功能帮助调整内存值。应该只有在您添加或减少内存,或者改变系统使用方式时改变这些值。

虚拟内存管理器
Windows NT 40 和 Windows 2000 随时提供一个 4 GB 的虚拟地址空间,其中较低的 2 GB 地址空间对于每个进程是专用的,并可由应用程序使用。较高的 2 GB 地址由系统保留使用。Windows NT Server 企业版为每个 Microsoft Win32® 应用程序提供 4 GB 的虚拟地址空间,其中较低的 3 GB 地址空间是每个进程专用的,并可由应用程序使用。较高的 1 GB 地址由系统保留使用。

4-GB 的地址空间由 Windows NT V虚拟内存管理器(VMM)映射到可用的物理内存空间。取决于硬件平台的支持,可用的物理内存可以高达 4 GB。

Win32 应用程序(如 SQL Server)只能识别虚拟(或称逻辑)地址,而不是物理地址。在给定的某一时刻一个应用程序使用多少物理内存由可用的物理内存和 VMM所决定。应用程序不能直接控制物理内存。

象 Windows NT 40 或 Windows 2000 这样的虚拟地址系统允许过度提交物理内存,这使虚拟内存和物理内存的比率大于 1:1。因此,较大的程序可以运行在具有不同物理内存配置的计算机上。然而应用比组合平均工作集大得多的虚拟内存可能导致较差的性能。

SQL Server 可以将内存锁定为工作集。因为内存被锁定了,当运行其它应用程序时可能出现内存不足的错误。如果出现内存不足的错误,则可能是分配给 SQL Server 的内存太多。set working set size选项(通过 sp_configure 或 SQL Server 企业管理器设置) 可以使锁定内存为工作集功能失效。默认情况下,set working set size 选项处于禁用状态。

手工配置给 SQL Server 多于物理内存数量的虚拟内存会导致性能较低。而且,必须考虑 Windows NT 40 或 Windows 2000 *** 作系统的内存需求(大约 12 MB,因应用程序的开销而略有不同)。当 SQL Server 的配置参数上调时,系统的开销可能也会增长,因为 Windows NT 40 或 Windows 2000 需要更多的常驻内存来支持附加的线程、页表等。允许 SQL Server to 动态使用内存可以避免内存相关的性能问题。

min server memory 和 max server memory 是高级选项。如果要使用 sp_configure 系统存储过程改变该选项,必须把 show advanced options 设置为 1,该选项立即生效(无需停止并重新启动服务器)。

数据库运行应该一段时间内,内存会随着时间的增长而变长,但不会无限增长,根据数据库的大小应该在一定的水平范围里,如果持续增长,可以考虑读写数据库的程序是不是有内存溢出的情况,或者根本是表设计不合理,造成业务读取表时消耗内存过大

可以设定SQL Server的,内存占用。
具体的参看:>

我们需要准备的材料分别是:电脑。

1、在我的电脑中,搜索访问sql占用内存,在右侧的管理服务器中选择重新启动,重启一下IIS。

2、查看一下,sql服务仍然占用大量的内存,内存占用基本没有改变。

3、然后重启sql服务。

4、然后再重启一下sql代理。

5、最后再看一下任务管理器,就会发现内存占用量降低了。

修改mysql配置文件,优化缓存大小和连接数连接方式,优化sql语句 ,记得mysql好像是有工具可以查看最占用资源的sql语句,找到他,优化他。
安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-hugecnf my-mediumcnf my-largecnf my-smallcnf,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。
一般的情况下,my-mediumcnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到/etc/mycnf 只需要修改这个配置文件就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的参数,有3个配置参数是最重要的,即key_buffer_size,query_cache_size,table_cache。
key_buffer_size只对MyISAM表起作用,
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例 key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:
这个服务器已经运行了20天
key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112
比例接近1:8000 健康状况非常好


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13164032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-14
下一篇 2023-06-14

发表评论

登录后才能评论

评论列表(0条)

保存