微软数据库MS sql server设置使用最大内存限制

场景

金蝶应用服务器和数据库服务器在同一台服务器,如何设置数据库sqlserver最大服务器内存?保证其无法超额占用内存。

解决方案

首先确认数据库服务器和云星空服务器是否部署在一起,
1、若数据库服务器单独部署,并且没有部署其他程序需要消耗内存,只有操作系统和数据库软件,可以不必做最大内存限制也不会撑爆操作系统的内存,默认数据库软件最大内存使用率即可,具体可以参考后面的数据库内存使用规则;

2、若数据库服务器和云星空服务器部署在一起,需要确保数据库软件不会把整个服务器的内存资源占用完,从而导致云星空的服务出现资源瓶颈,此时需要对数据库软件做最大内存限制,一般建议按照数据库实际的物理内存划分60%~80%给数据库使用;可以具体根据物理内存的大小进行配置;

若本身是物理内存不够,肯定还是需要进行扩展服务器的物理内存,或者把数据库分开部署。此方案并不能解决实际物理内存不足导致的资源紧张。

具体操作步骤如下:

以数据库管理员用户登录数据库客户端(Microsoft SQL Server Management Studio),在实例名(树形菜单根节点,显示登录名那栏)上右键,选择【属性】–》”;内存,设置“最大服务器内存”,单位为MB,可根据实际内存调整。

可参考任务栏管理器中内存占用值设置最大内存占用。

请勿设置最大内存值过小,导致数据库无法正常启动,比如设置小于100MB会让数据库无法正常启动。

查询当前内存分配

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_usedby_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,  
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;

数据库使用内存的规则:

由于SQL Server对系统内存的管理原则是:按需分配,且贪婪(用完不还)。它不会自动释放内存,因此执行结果集大的sql语句时,数据取出后,会一直占用内存,直到占满机器内存(并不会撑满,还是有个最大限制,比机器内存稍小),在重启服务前,sqlserver不会释放该内存,也没有任何办法可人为释放。

但是可以通过使用两个内存选项(最小服务器内存最大服务器内存)重新配置;最小服务器内存的默认设置为 0,最大服务器内存的默认设置为 2147483647 MB。 默认情况下,SQL Server 可以根据可用系统资源动态更改其内存需求。

详细参数介绍参考微软官方解释

数据库服务器内存配置选项

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

本站提供金蝶、钉钉等开发实施相关技术文章的发布和转载。如有侵权,联系立删(info@zjgkd.cn) 。
苏公网安备32058202011935 · 苏ICP备13058196号-11
Powered by WordPress