对于SQL Server,我需要多少内存
经常被问到的一个问题:对于SQL Server,我需要多少内存?这个问题还是有同样的典型的“看情况而定”答案。在今天的文章里,我们来详细看下“看情况而定的”的不同方面。
全新SQL Server安装
首先,对于全新的SQL Server安装,我想谈下你如何估计你需要的内存大小。然后我会详细谈下你如何验证现存的SQL Server有足够的可用内存。
对于全新的SQL Server安装,估计下需要多少内存,是个很有挑战的工作,因为:
- 你必须知道在你的内存里(你的工作区)要保持多少数据
- 你必须知道你的索引策略是怎样
- 你必须知道你是否要使用SQL Server的标准版,还是企业版本。
从这个清单里你可以看到,问题的答案主要取决于你。我们再谈下清单里的每个项目。
你查询的数据越多,你需要更多的内存。假设,你的大多数数据是用户不常查询的归档数据。在这个情况下,你的数据留在你的存储系统里,且从不加载到内存。就想下你的日志和审计表:对于这些特定的表,你真的要查询多少数据?
更好的索引策略是,你需要的内存更少!如果你有一个真的不好的索引策略(甚至你没有索引策略!),你会需要大量的内存来支持你的工作负荷。假设你有100GB数据的表,你在表里查询特定行。如果你在查询谓语上没有支持的索引。SQL Server会扫描你的整个堆表或聚集表。这就是说SQL Server需要加载你的“整个”表到内存里,只返回1条记录!有了支持的索引,SQL Server可以进行高效的查找操作,只需要读几个页就可以返回请求的记录。这个会是天差地别——相信我!
对于你的SQL Server安装,SQL Server的版本也会影响你可以有的内存大小。使用标准版本,你会限制只能用到128G的内存。这听起来是很多内存,胆实际上是啥也不是!如果你的数据库包含几个TB的数据,且你用标准版本的SQL Server(预算限制)。在这个情况下,对于每个单独的提交到SQL Server的查询,你要非常小心,而且你要确保你要有完全一致的索引策略。使用企业版本就不需要考虑这么多,因为SQL Server支持系统的最大内存(Window Server 2016目前支持12TB的内存)。
现存的SQL Server安装
对于现存的SQL Server安装,对于的工作负荷,很容易找出你是否有足够的内存。我们都知道,SQL Server在缓存池里存储所有从存储子系统里获得的页。而且缓存池为你提供一个名为PAGE LIFE EXPANCTANCY的计数器。这个计数器告诉你在缓存池里SQL Server在每个8K页的存储时间。
现在你的PAGE LIFE EXPANCTANCY计数器至少有一些几千秒。内存越大,这个数字越高。如果你的PAGE LIFE EXPANCTANCY低于那个阈值,你会有很严重的问题,因为SQL Server不能在缓存池里保持你的数据太长时间。作为副作用,你会引入更多的物理I/O,整个服务器性能会下降。再提一下,你可以在索引策略上下功夫,确保从存储子系统里读取的数据都是你查询逻辑请求的数据。
小结
对于你的SQL Server你应该有多少内存,真的是个“看情况而定”的问题。如果你使用标准版的SQL Server,你应该至少有这个版本给你支持的最大内存。越多越好。而对于企业版的SQL Server,你应该有尽可能多的内存。内存相比企业版的授权,现在已经越来越便宜了。因此不要在错误的地方省钱啦!
感谢关注!
原文链接
https://www.sqlpassion.at/archive/2016/09/19/how-much-ram-do-i-need-for-sql-server/
对于SQL Server,我需要多少内存的更多相关文章
- 显示SQL Server分配的全部内存
1.在sqlserver 中建立查询 2.执行 DBCC MEMORYSTATUS 在Windows Server 2000/2003任务管理器中,“内存使用”这个字段是显示工作区分配的内存.一个进程 ...
- 如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
https://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完 ...
- 《Troubleshooting SQL Server》读书笔记-内存管理
自调整的数据库引擎(Self-tuning Database Engine) 长期以来,微软都致力于自调整(Self-Tuning)的SQL Server数据库引擎,用以降低产品的总拥有成本.从SQL ...
- ms sql server缓存清除与内存释放
Sql Server系统内 存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...
- SQL Server没有足够的内存继续执行程序 (mscorlib)的解决办法
在Microsoft SQL Server Management Studio 中执行较大的sql脚本时,会报没有足够的内存继续执行程序(mscorlib)的错误.如下图所示 解决方法: 使用sqlc ...
- SQL Server 缓存清除与内存释放
Sql Server系统内存管理在没有配置内存最大值,很多时候我们会发现运行SqlServer的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系统峰 ...
- SQL Server 2008 R2占用内存越来越大两种解决方法
SQL Server 2008 R2运行越久,占用内存会越来越大. 第一种:有了上边的分析结果,解决方法就简单了,定期重启下SQL Server 2008 R2数据库服务即可,使用任务计划定期执行下边 ...
- 疑难杂症--SQL SERVER 2012下数据库内存异常回收
--=================================================================== --背景: 在一台SQL SERVER 2012 SP1(1 ...
- SQL Server 2008 R2占用内存越来越大解决方法
最近开发sql server数据库项目的过程中发现了这么一个问题,后台网站内存占用95%,通过任务管理器查看占内存的进程sqlserver.exe,是因为SQL Server 2008 R2运行越久, ...
- SQL Server Sleeping会话占用内存资源浅析?
在SQL Server中,会话的状态有运行(Running).睡眠(Sleeping).休眠(Dormant).Preconnect 等状态,有时候你会在数据库中看到很多会话处于睡眠(Sleepi ...
随机推荐
- SQLServer存储过程事务用法
更多资源:http://denghejun.github.io IF object_id('InsertAntennaProcedure') IS NOT NULL DROP PROCEDURE In ...
- IRP完成例程返回值理解
第一,完成例程里面直接返回STATUS_SUCCESS,这时候IRP已经继续向上回卷,失去了对IRP的控制. 第二,完成例程里面返回STATUS_MORE_PROCESSING_REQUIRED,仍具 ...
- Android Support Library
title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...
- 安装dubbo管理中心
从http://pan.baidu.com/s/1dDlI7aL下载dubbo-admin-2.5.4.war包 将下载的包放在tomcat的webapps目录,启动tomcat自动解压该war包,然 ...
- 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)
1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...
- HTML5- Canvas入门(二)
上篇文章我们了解了canvas的定义.获取和基础的绘图操作,其中的绘图功能我们讲解了线段绘制.上色.描边等方面知识点. 今天我们来讲讲矩形(Rectangle)和多边形的绘制. 矩形的绘制一共有两个口 ...
- Windows环境安装Linux系统及JDK部署
前言 由于我的笔记本有点问题,所以这周系统包括所有硬盘全部重装了,原来的Linux虚拟机都没了,因此才有了这篇文章和各位朋友们分享. 由于Linux环境的优越性(开源.低成本.安全性好.网络功能强大) ...
- gulp使用小结(二)
接上篇文章接Gulp使用小结(一) 内容如下: 首先,偶在gulp-demos上已经提交了个较通用的栗子...俺琢磨半天,原准备分阶段搞些 Gulp 套路,但是写完介个栗子之后,觉得已经能覆盖绝大多数 ...
- 前nginx后Apache+Node反向代理
前几天一直在被一个问题困扰,机器上跑的站点太多了,Apache上面有十几个,NodeJS的也有一堆,记端口号都要烦死,于是萌生了使用反向代理的想法.出发点貌似太low了,完全不是出于负载均衡.高并发什 ...
- 剖析twemproxy前言
又是喜闻乐见的新坑,前面的mysql协议,当我在解读go-mysql包的时候,会重新讲到,至于Leetcode的更新会与go语言同步.关于这个redis的新坑,目前打算通过剖析twemproxy源码来 ...