SQL server 强制释放内存

news/2024/11/16 22:45:12/

由于在日常的业务系统、BI服务器中进行了大量复杂的数据处理、查询等(特别是ETL过程),可能造成服务器内存占用比较多,此时导致其他查询或使用是效率极低。微软初始的目的是好的让更多更常用的数据驻留内存,但是这样对于BI的查询服务器与数据处理服务器为同一实体时却是一种弊端。当数据抽取(ETL)、模型处理(CUBE)处理完成后往往内存已经被占用殆尽(一般服务器),所以当用户进行查询时就显得效率很低。为了释放被占用的内存可采用如下2种方法。

 

测试环境:window 2008 r2、win7;sql2008 r2

1、使用SQL语句释放内存

语句如下:此处用到sql数据库管理的高级配置项,所以要开启高级配置项管理

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

CREATE procedure ReleaseMemory   
as  
begin 
--清除所有缓存(可选其他内存:清除系统缓存  DBCC FREESYSTEMCACHE('All') ;清除会话缓存 DBCC

FREESESSIONCACHE;清除存储过程缓存 DBCC FREEPROCCACHE )
 
DBCC DROPCLEANBUFFERS
 
--打开高级配置 
EXEC ('RECONFIGURE') 
exec sp_configure 'show advanced options', 1 

EXEC ('RECONFIGURE') 
--设置最大内存值(收缩用),清除现有缓存空间 
exec sp_configure 'max server memory', 256 

EXEC ('RECONFIGURE') 
--设置等待时间(循环收缩)  此处可设置释放内存持续时间以控制释放多少内存
WAITFOR DELAY '00:00:05'
 
EXEC ('RECONFIGURE') 
--重新设置最大内存值(还原sql最大内存) 
EXEC  sp_configure 'max server memory', 2147483647
 
EXEC ('RECONFIGURE') 
--关闭高级配置 
exec sp_configure 'show advanced options',0 

EXEC ('RECONFIGURE') 
end

 

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

以上需要注意地方为:WAITFOR DELAY '00:00:05'  设置释放内存的执行持续时间

将以上存储过程放到SQL 的JOB里调用,执行时间及频率可自由设定

 

2、重启sql服务命令方法,可将sql重启,需要添加系统任务计划,将命令存放在bat文件中,代码如下:

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

rem 停止数据库代理服务
net stop sqlserveragent

rem 停止数据库服务
net stop mssqlserver

rem 启动数据库服务
net start mssqlserver

rem 启动数据库代理服务
net start sqlserveragent

 

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

以上命令如需自动执行需要进行系统计划配置,步骤如下:

 

1 开始->控制面板->管理工具->任务计划程序

2 任务计划程序库->创建任务(界面右侧栏)

3 (1)名称:任务名称 (2)“安全选项”->运行任务时,请选择如下用户:可设置执行用户 (配置)选择所用系统

4 触发器(什么时间执行任务):(1)新建:设置触发器什么时候执行(开机、登录、关机等,一把选用“制定计划时”);设置平率(每天、每周、每月、每年);延迟时间间隔(X小时)

5 操作(需要执行的脚本、程序):(1)新建:启用程序、发送邮件、显示消息  (2)设置:设置需要启动的程序、脚本等 (3)可配置 参数(程序、脚本使用)

6 条件(与触发器一起判断何时执行任务)

7 设置其他参数

 

完成以上设置即可完成自动重启SQL SERVER服务

 

 

备注:由于涉及到企业数据库服务器,除非数据库服务器是独立的(无其他系统使用),否则不要使用,收缩内存时一定要在服务器空闲时,否则造成其他应用系统报错、崩溃。

 

 


http://www.ppmy.cn/news/272073.html

相关文章

释放SQL Server占用的内存

由于Sql Server对于系统内存的管理策略是有多少占多少,除非系统内存不够用了(大约到剩余内存为4M左右),Sql Server才会释放一点点内存。所以很多时候,我们会发现运行Sql Server的系统内存往往居高不下。 这些内存一般都…

如何手动释放Linux内存的方法

当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题。 /proc…

使用moveToThread时的内存释放以及注意事项

在Qt中,使用线程主要有两种方式。 1、自定义线程类,继承自QThread,并重写run方法即可。该方法就不再阐述了。 2、就是推荐使用的方法。 示例代码如下: 1、自定义Worker类,将线程中的逻辑在该类中以槽函数的方式实现…

内存的申请和释放

一直一来我都浅显的认为指针是一个地址,指向了一块内存区域,但是最近突然想到几个问题: 1 malloc申请内存的时候传入和内存的大小参数,但是调用free释放内存的时候并没有传入内存快的大小,操作系统是如何知道要释放多…

内存的申请与释放

首先我们有两个问题 malloc()申请1G的内存能否成功&#xff1f;判断依据是什么&#xff1f;申请了一块空间没有free,进程就结束了&#xff0c;那么空间被回收了吗&#xff1f; 我们写一段代码来申请1G空间试一试 #include<stdio.h> #include<stdlib.h> #include…

如何释放linux的内存

你们知道怎么释放linux的内存吗不知道的话跟着学习啦小编一起来学习怎么释放linux的内存。 释放linux的内存的步骤 Linux下操作频繁时&#xff0c;物理内存会被快速用完&#xff0c;当操作结束后&#xff0c;物理内存没有被正常的释放&#xff0c;而一直当作caching&#xff…

AI实战营第二期 笔记5——MMPretrain代码课

文章目录 摘要MMPreTrain实战安装推理 OR 使用API数据集训练与测试微调 摘要 MMPretrain 是一个全新升级的预训练开源算法框架&#xff0c;旨在提供各种强大的预训练主干网络&#xff0c; 并支持了不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和 MMSel…

qemu+buildroot+linux arm64虚拟化-宿主系统wsl2

文章目录 1.qemu2.buildroot配置编译 3.linux kernel下载交叉编译工具链 linux kernel 5.16配置内核config_kernel.shbuild_kernel.sh 4.启动虚拟机start_qemu.sh参数解释运行 环境&#xff1a; wls2、qemu8.2、buildroot、linuxkernel 1.qemu https://buildroot.org/download…