zoukankan      html  css  js  c++  java
  • SQL Server进程占用内存的一点认识

            最近在做数据处理的东东,唉,总是遇到系统的内存溢出的情况,实在是受不了了,本身机器的内存也只有768M。开的东西也多,又要处理海量的数据,能不溢出才怪呢?

            没办法啊,想看看SQL Server 的占用内存到底是怎么一回事,便翻了大量的资料。变做起了测试:

    1、当开启Sql Server 进程时,内存:
    2、执行一些操作:


    看着sqlserver.exe进程始终都不把内存释放掉,心里面难过啊:(

    天啊,sql server 执行后内存是不是放的,具体原因是:

    在你启动 SQL Server 之后,SQL Server 内存使用量将会持续稳定上升,即使当服务器上活动很少时也不会下降。另外,任务管理器和性能监视器将显示计算机上可用的物理内存稳定下降,直到可用内存降到 4 至 10 MB 为止。仅仅出现这种状态并不表示内存泄漏。此状态是正常的,并且是 SQL Server 缓冲池的预期状态。默认情况下,SQL Server 根据操作系统报告的物理内存加载来动态增大和收缩其缓冲池(缓存)的大小。只要有足够的内存可用于防止分页(在 4 至 10 MB 之间),SQL Server 缓冲池就会继续增大。像在与 SQL Server 分配内存位于相同计算机上的其他进程一样,SQL Server 缓冲区管理器将在需要的时候释放内存。SQL Server 每秒可以释放和获取几兆字节的内存,从而使它可以快速适应内存分配更改。

    最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。 其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销的。所以用于关联和排序的列上一般需要有索引。再其次就是对执行计划、系统数据的存储,这些都是比较小的。

    2、就是说:服务器不是很好的,也就是内存不够大的计算机在运行程序时,隔一段时间就需要重启一下SQL服务。这个还真有点烦。
    3、于是乎,我又开始寻找解决的办法。终于有了个不错的办法。

    第一步,打开记事本,输入下列2行命令:
    net stop mssqlserver
    net start mssqlserver
    将其存为一个.bat的文件。

    第二步,在Windows的“任务计划”功能里,添加一条新的任务计划,让系统在每天的03:00执行一次这个.bat 这个批处理文件即可。

    4、又是一个比较弱智的问题,大家看了不要 骂我啊!呵呵。。。。
  • 相关阅读:
    CentOS中怎样卸载旧版本Git并安装高版本Git
    下载抖音无水印视频工具 python webdriver 2020.09.02
    axel-2.17.9 aria2c-1.35.0 wget-1.20.3 curl-7.72.0 最新CLI下载工具在win10环境测试下载速度
    wget-1.20.3 static for win32
    undefined reference to `inet_pton' under MSYS
    undefined reference to `gnutls_protocol_set_priority'
    wget2 for windows 2020.08.28
    Unicode转义(uXXXX)的编码和解码 go-nascii 类似于 native2ascii
    正则表达式零宽断言 grep sift ripgrep(rg)
    编译 jq git版本
  • 原文地址:https://www.cnblogs.com/stonespawn/p/1318865.html
Copyright © 2011-2022 走看看