none
sqlserver运行查询内存不足的问题! RRS feed

  • 问题

  • 情况是这样的,我们现在有一个应用系统,使用的是sqlserver2005的版本,在运行应用系统的时候报"内存不足以支持次查询",但是在应用系统没有重新启动和数据库没有重新启动的条件下,只做了一次自动的完整备份数据库的动作,数据库所占用的内存就降下来了.

           我想了解下,执行完整数据库备份是否会释放sqlserver所占用的内存?还是在什么情况下他会释放?

    • 已移动 Sheng Jiang 蒋晟 2012年10月24日 3:10 (发件人:一般性问题讨论区)
    2012年10月24日 2:25

答案

  • Backup db will not release memory. Here are some questions: is it 32 or 64-bit server? Is it dedicated sql server? How much memory on the machine? How much memory allocated to sql? Did you set max memory in sql?
    2012年10月24日 3:16
  • 正如rmiao大侠所说,备份数据库是不会释放内存的,怀疑是你机器的内存不够

    可以看一下建议:

    --各个版本Windows上支持的最大内存数
    --配置                                                                  应用虚拟地址空间大小        最大物理内存数         是否支持AWE/locked pages support 
    --32位SQLSERVER                                                         2GB                         64GB                         YES
    --32位SQLSERVER    + /3GB boot.ini参数                       3GB                         16GB                          YES
    --32位SQLSERVER   应用在x64位操作系统(WOW)         4GB                         64GB                          YES
    --32位SQLSERVER   应用在IA64操作系统(WOW)          2GB                           2GB                            NO
    --64位SQLSERVER   应用在x64操作系统                          8TB                            2TB TERABYTES          YES
    --64位SQLSERVER   应用在IA64操作系统                         7TB                             2TB                           YES


    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:03
  • --(1)开启lock page in memory功能
    --SQL2005/2008 企业版才有,使用启动帐户使用具有lock page in memory的权限
    --组策略-》计算机配置-》Windows设置-》安全设置-》本地策略-》用户权限分配-》锁定内存页
    --锁定内存页默认有system 和administrator 启动帐户是local system
    --只是锁住用户态,如果Windows内存不够,增加核心态内存,也会挤掉用户态内存


    --(2)sp_configure 设置max server memory

    --(3)升级Windows2003到SP2,或者使用Windows2008 ,这些版本Windows管理内存机制有了调整


    --(4)升级硬件驱动程序,或者联系微软技术服务,帮忙检查是不是硬件方面问题引起

    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:04
  • --(1)如果服务器支持64位操作系统,没有特殊理由的话,请安装64位系统。这样SQL能够有效地使用
    --大于2GB的内存。如果一定要用32位系统,务必将AWE打开。但是不要用/3GB这个开关

    --(2)尽量使服务器专门供数据库使用,不要将其他服务(例如IIS,中间层应用服务等)安装在同一台
    --机器上。多个生产应用服务在同一台机器上运行,会大大增加维护成本

    --(3)建议设置SQLSERVER max server memory,以确保Windows有足够的内存供系统本身使用。
    --一台4GB机器,建议预留1GB,设置SQLSERVER max server memory为2.8GB
    --一台8GB机器,建议预留2GB,设置SQLSERVER max server memory为6GB
    --一台大于8GB的64位机器,建议预留3GB~4GB。
    --如果一台服务器上还有其他应用使用内存,也要扣除他们的内存使用数

    --一般设置SQLSERVER min server memory意义不大

    --(4)如果是企业版SQLSERVER,建议赋给SQL启动帐号lock page in memory的权限

    --(5)“set working set size” 这个SQL参数在现在的Windows上不能起到固定SQL物理内存的作用,
    --所以请永远不要使用

    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:05
  • 还有一些性能计数器也可以诊断内存问题:

    性能监视器  perfmon
    --添加-》可用计数器-》Memory-》添加available MBytes和pages/sec

    --数据收集器集-》用户定义-》新建-》数据收集器集-》名称:SQLSERVER内存使用-》手动创建-》性能计数器-》
    --添加下面的性能计数器-》时间间隔15秒-》保存路径:C:\Users\Administrator\Desktop\SQLSERVER内存使用-》
    --保存并关闭-》选中刚才创建的数据收集器-》启动-》变成datacollector01   -》在用户定义下面 SQLSERVER内存使用 右键-》停止
    --或者在空白的地方-》右键-》停止

    --可以右键-》在用户定义下面 SQLSERVER内存使用-》属性-》更改数据收集器保存路径



    --committed bytes:整个Windows系统,包括Windows自身以及所有用户进程使用的内存总数

    --commit limit:整个Windows系统能够申请的最大内存数,其值等于物理内存加上文件缓存大小

    --available MBytes(重要):现在系统空闲的物理内存数。这个指标能够直接反映出Windows层面上有没有内存压力
    --跑在Windows2000上会把空闲内存用完知道剩下4MB~10MB。跑在Windows2003或以上就会留给Windows多一点的物理内存

    更多的资料LZ可以在网上查找


    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:07

全部回复

  • Backup db will not release memory. Here are some questions: is it 32 or 64-bit server? Is it dedicated sql server? How much memory on the machine? How much memory allocated to sql? Did you set max memory in sql?
    2012年10月24日 3:16
  • 正如rmiao大侠所说,备份数据库是不会释放内存的,怀疑是你机器的内存不够

    可以看一下建议:

    --各个版本Windows上支持的最大内存数
    --配置                                                                  应用虚拟地址空间大小        最大物理内存数         是否支持AWE/locked pages support 
    --32位SQLSERVER                                                         2GB                         64GB                         YES
    --32位SQLSERVER    + /3GB boot.ini参数                       3GB                         16GB                          YES
    --32位SQLSERVER   应用在x64位操作系统(WOW)         4GB                         64GB                          YES
    --32位SQLSERVER   应用在IA64操作系统(WOW)          2GB                           2GB                            NO
    --64位SQLSERVER   应用在x64操作系统                          8TB                            2TB TERABYTES          YES
    --64位SQLSERVER   应用在IA64操作系统                         7TB                             2TB                           YES


    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:03
  • --(1)开启lock page in memory功能
    --SQL2005/2008 企业版才有,使用启动帐户使用具有lock page in memory的权限
    --组策略-》计算机配置-》Windows设置-》安全设置-》本地策略-》用户权限分配-》锁定内存页
    --锁定内存页默认有system 和administrator 启动帐户是local system
    --只是锁住用户态,如果Windows内存不够,增加核心态内存,也会挤掉用户态内存


    --(2)sp_configure 设置max server memory

    --(3)升级Windows2003到SP2,或者使用Windows2008 ,这些版本Windows管理内存机制有了调整


    --(4)升级硬件驱动程序,或者联系微软技术服务,帮忙检查是不是硬件方面问题引起

    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:04
  • --(1)如果服务器支持64位操作系统,没有特殊理由的话,请安装64位系统。这样SQL能够有效地使用
    --大于2GB的内存。如果一定要用32位系统,务必将AWE打开。但是不要用/3GB这个开关

    --(2)尽量使服务器专门供数据库使用,不要将其他服务(例如IIS,中间层应用服务等)安装在同一台
    --机器上。多个生产应用服务在同一台机器上运行,会大大增加维护成本

    --(3)建议设置SQLSERVER max server memory,以确保Windows有足够的内存供系统本身使用。
    --一台4GB机器,建议预留1GB,设置SQLSERVER max server memory为2.8GB
    --一台8GB机器,建议预留2GB,设置SQLSERVER max server memory为6GB
    --一台大于8GB的64位机器,建议预留3GB~4GB。
    --如果一台服务器上还有其他应用使用内存,也要扣除他们的内存使用数

    --一般设置SQLSERVER min server memory意义不大

    --(4)如果是企业版SQLSERVER,建议赋给SQL启动帐号lock page in memory的权限

    --(5)“set working set size” 这个SQL参数在现在的Windows上不能起到固定SQL物理内存的作用,
    --所以请永远不要使用

    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:05
  • 还有一些性能计数器也可以诊断内存问题:

    性能监视器  perfmon
    --添加-》可用计数器-》Memory-》添加available MBytes和pages/sec

    --数据收集器集-》用户定义-》新建-》数据收集器集-》名称:SQLSERVER内存使用-》手动创建-》性能计数器-》
    --添加下面的性能计数器-》时间间隔15秒-》保存路径:C:\Users\Administrator\Desktop\SQLSERVER内存使用-》
    --保存并关闭-》选中刚才创建的数据收集器-》启动-》变成datacollector01   -》在用户定义下面 SQLSERVER内存使用 右键-》停止
    --或者在空白的地方-》右键-》停止

    --可以右键-》在用户定义下面 SQLSERVER内存使用-》属性-》更改数据收集器保存路径



    --committed bytes:整个Windows系统,包括Windows自身以及所有用户进程使用的内存总数

    --commit limit:整个Windows系统能够申请的最大内存数,其值等于物理内存加上文件缓存大小

    --available MBytes(重要):现在系统空闲的物理内存数。这个指标能够直接反映出Windows层面上有没有内存压力
    --跑在Windows2000上会把空闲内存用完知道剩下4MB~10MB。跑在Windows2003或以上就会留给Windows多一点的物理内存

    更多的资料LZ可以在网上查找


    给我写信: QQ我:点击这里给我发消息

    2012年10月24日 15:07