Analysis Memory In Sqlserver

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 内存是数据库一个非常大的主题,可是说是影响数据库性能的关键因素之一,

数据库内存浅析

内存是数据库一个非常大的主题,可是说是影响数据库性能的关键因素之一,

这几天研究了下,不是很深,与大家分享下。

初识数据库内存

内存存在的意义在于协调高速的CPU和低速的磁盘之间的读写差距,对数据库而言,

内存中的数据越多意味着读写更快、性能更好。当然,在服务器上不可能给你无限制的内存,

这就需要我们合理配置数据库内存,以达到最佳性能。

在SQL Server数据库中,通过数据库的SSMS管理界面可以看到数据库有个内存设置选项,如图:

clip_image001

下面将详细分析数据库的内存:

最小内存

上图可以看到数据库有个最小内存选项,默认是0,当然也可以设置成其他值,

当设置成某个具体值时,比如2G,,每次数据库引擎启动时并不会马上达到数据库的最小内存,

如果没有负载,可能永远达不到,如果没有任何负载,sqlserver 2008 r2的内存占用100M不到。如下图:

clip_image002

既然这样,那设置最小内存是不是没有意义了呢,

其实不然,一旦数据库负载达到最低内存后,就不会再低于这个值,就算操作系统向其索要也不会释放(重启除外)。

我们试想没有这个机制,当没有业务时数据库的内存非常低,一旦负载起来,数据库就向操作系统申请内存,这种情况会反复出现,

对性能有影响,更重要的是,当数据库申请时不见得操作系统有多余的内存分配给数据库,这时数据库就只能歇菜了。

因此合理设置数据库的最低内存也是十分重要的。下图是微软建议的最小内存值,应该是服务器总内存减去1-2G。

clip_image003

引用于:http://msdn.microsoft.com/en-us/library/ms178067.aspx

最大内存

如果没有设置最大内存,数据库采用自动分配内存的方式,当负荷加重时,会不断向操作系统申请可用内存,

直到操作系统为自身保留内存的最小内存为止,

需要注意的是:在32位的环境中,操作系统能直接寻址的内存只有4G,

默认情况下操作系统将预留2G,剩下2G分配给应用程序。

也就是说,即使设置了最大内存,数据库也无法使用超过2G的内存。

这种方式肯定无法在很多生产环境中使用,于是微软为32位系统提供了临时解决方案,

也就是通过启用3G开关(在启动文件中设置),这样可以值给操作系统预留1G内存,使得应用程序使用3G的内存。

但这也不是长久之计。这对一个数据库而言肯定不够,一般数据库使用的内存在4G、8G甚至更大,

那如何能让操作系统支持大于4G的内存呢,如何又使得数据库支持更大的内存呢?

如果要实现数据库支持大于2G的内存甚至达到4G、8G更大内存时,从上文的分析中也可以看到,需要解决两个问题:

1)、在32位系统如何支持大于4G的内存

2)、如何使得数据库使用大于4G的内存

对于第一个问题,微软为企业版的操作系统提供了一个类似/3G开关的机制,也就是/PAE(也是在启动文件中设置)

这种方式可以使得32位企业版的操作系统支持到64G的内存,

需要注意的是这没有改变只能直接寻址4G内存的事实,只是将现有的4G内存分区,

将一部分空间指向到大于4G的内存区域,类似C语言的指针机制。

这样第一个问题解决了,那第二个问题呢,如何使得32位的数据库使用大于4G的内存?

如下图:

clip_image004

勾选AWE(地址窗口扩展),这就运行数据库使用大于2G的内存了。

需要注意的是:当同时开启/pae和数据库awe时,操作系统只能识别到16G的最大内存。

上文讨论了32位系统,那64位系统怎么办呢,

很显然,64位系统根本就不需要考虑这个问题,因为64已经可以支持直接寻址2T的内存,

当然,64位的SQL Server也完全没有开启AWE(你可以开启,数据库会忽略该选项)

那么是不是64位系统就不需要做任何设置了呢?

其实不然,为了保证数据库能够使用windows特性来将数据保持在物理内存中:需要将数据库启动的用户锁定内存页面,

从而防止操作系统将数据分页到磁盘上的虚拟内存中。通常建议在64位的环境启用该策略。

如下图:

clip_image005

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5月前
|
SQL 机器学习/深度学习 算法
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
SQL SERVER ANALYSIS SERVICES决策树、聚类、关联规则挖掘分析电商购物网站的用户行为数据
|
5月前
|
SQL 机器学习/深度学习 数据挖掘
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据
SQL Server Analysis Services数据挖掘聚类分析职业、地区、餐饮消费水平数据
|
SQL 算法 数据挖掘
微软Sql server analysis service数据挖掘技术
原文:微软Sql server analysis service数据挖掘技术 最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解。
1339 0
|
SQL 安全 BI
使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程
原文 http://www.cnblogs.com/biwork/archive/2013/05/22/3093896.html BI Work 使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 图文教程 以 下内容为我个...
1546 0
|
SQL
创建并管理SQL Server Analysis Services分区
创建并管理SQL Server Analysis Services分区(一) 创建并管理SQL Server Analysis Services分区(二) 创建并管理SQL Server Analysis Services分区(三)
641 0
|
25天前
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
88 12
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
20天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
26 4
|
1月前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
43 11