SQL_Server_2008_R2_CPU_和_内存_最大优化_分配

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server 2008 R2 CPU 和内存最大优化分配
微软SQL Server 2008 R2中的资源分配方式与SQL Server 2005中的方式相比是一种完全不同的过程。

利用资源控制器,在SQL Server 2008 R2中解决方案供应商有切实可用的方法管理CPU和内存。

资源消耗是长期以来困扰使用SQL Server的解决方案供应商的基本问题之一。

任何服务器,不管它是物理的还是虚拟的,供处置的CPU和内存池都是有限的。

过去,这一简单的事实给SQL Server带来许多麻烦,因为它通常是资源非常敏感的应用。

如果服务器上只托管了唯一一个数据库的话,那么SQL Server资源消耗并不是个严重的问题。

但是如果有多个数据库在用着,那就真的变成一个问题了,因为各种数据库都会竞争同样一组CPU和内存资源。

在SQL Server 2005中,对这个问题可以接受的解决方案通常是为每个数据库创建独立的SQL Server实例,利用处理器亲和度为每个数据库实例分配资源。

这种技术的问题是一旦资源被分配给SQL Server实例,他们对其他SQL Server实例就不可用了。

结果,如果一个数据库的负载特别重,它也不可能从其他SQL实例暂借服务器的CPU资源,虽然这个实例上的资源此时可能什么都没做。

一些解决方案供应商也曾尝试利用服务器虚拟化作为给个别SQL Server数据库分配资源的一种途径。

在这种模型中,每台虚拟机只托管一个SQL Server数据库。

这种方法也可行,但是虚拟机和他们的操作系统也消耗了一些本该用于SQL Server的服务器资源。

此外,还依赖于你使用的虚拟化软件,以按需分配为基础的资源动态分配可能有些困难或者不可能实现。

微软最终针对SQL Server 2008 R2中的资源分配问题创建了一套可行的解决方案,引入了叫做资源控制器的新组件。

这个资源控制器是可以通过微软SQL Server Management Studio 访问的,它可以定义资源池,每个资源池都包含负载工作组,如下图所示:
你可以在图中看到,SQL Server 2008 R2默认定义了两个资源池:一个系统资源池,一个默认资源池。

顾名思义,资源池是服务器资源的集合,这些资源在池内对工作组是可用的。

每个资源池被配置了CPU资源和内存资源的最小值和最大值。

这些值按百分比表示,100%表示服务器的整个硬件资源。

池的最小值用CPU或者内存资源的百分比表示,表示这部分资源是专门分配给池的,而且对于该池是一直可用的。

在配置了多个资源池的情况下,分配给所有池最小值的总和不能超过100%。

任何没有声明最小值的资源可以自由地跨所有资源池使用资源。

要防止SQL Server 2008 R2数据库消耗掉不受最小值保护的所有系统资源,解决方案供应商可以设置最大值。

最大值表示该池可以使用CPU或者内存资源的最大百分比。

但是,很重要的一点是,解决方案供应商要意识到尽管他们可以设置任何最大值,池也有可能触发简短的CPU百分之百高峰。

这些高峰不会带来问题,被认为是正常行为。

你可能注意到了上图,默认情况下,SQL Server 2008 R2包含两个资源池,每个资源池都包含一个工作负载组。

资源控制器分类处理请求,并根据请求的特性把请求分配给合适的工作负载组。

这意味着你不再限制在每个数据库级别上分配资源了。

你确实可以给各类型的数据库请求分配不同的资源池。

例如,解决方案供应商可能分配更多的CPU时间给数据库查询函数,而不是分配给写数据库操作的函数。

SQL Server 2008 R2资源控制器的一个大缺点是:它不是一个解决方案供应商可以启用或者通过点几下鼠标就可以配置的管理工具。

分类处理请求,然后把请求转发给合适的负载工作组需要编写大量脚本。

幸运的是,微软提供了一系列MSDN文章,告诉你如何创建必要的脚本。

请限制sql server 可使用的最大内存数
目前发现有部分专享自由型主机由于sqlserver数据库占用的内存过大,造成服务器可用内存资源过少,导致服务器运行缓慢甚至宕机。

您可以通过以下方法限制sqlserver占用的最大内存,从而保证服务器有足够的内存可以使用:
1、登录服务器->打开企业管理器
2、打开SQL Server组
3、右键点击(local)本地实例->选择“属性”
4、点击“内存”项,在其中“最大值”项中可以设定当前sqlserver可占用的最大内存。

SQL server 2008 标准版与企业版主要区别:
标准版支持1-4个物理cpu,不支持双机功能
企业版支持1-8个物理cpu,支持双机功能
你的数据库即使开64核,你的操作系统并发,依然被锁在垄断集团的、独裁帝国主义控制的默认出厂10个并发。

64个核等待10个操作系统的并发,与32个核等待10个操作系统并发。

从windows 7\8 windows 2005/2008操作系统默认都被锁在10个并发,原来XP,2003没有补丁XP PACK3和R2,可以通过第三防软件开放到2000个并发数,WINDOWS 7/8 、server 2005/2008系统内部,锁死256个并发,即使第3方软件也只能开放到256个并发,想想看64核进程,可以从256个大门进入,与64核排队等待10个大门进入,肯定更卡了。

有疑问可以联系QQ:530055784 本帅是DIY服务器+系统+数据库+独立研发数据结构和算法的玩家,可以自己的模拟机器语言编写数据库,SQL、ORACLE、MYSQL,核心都是通过C、C++、汇编编写的,不通过高级语言,语言越高运行效率越低。

前天设定数据库选项,打开所有CPU给SQL Server使用,然后检查了一下SQL code
?
1 2 3SELECT top5 *
FROM sys.dm_os_wait_stats order by wait_time_ms desc
CXPACKET 一项高居第一,于是将MaxDOP设定为16,CPU占用所改善。

谁知昨天业务繁忙时段下面有客户端连接不上服务器。

再查微软资料:
SQL code
?
--当您配置MAXDOP 值时,请遵循以下准则:
-- 对于使用八个以上的处理器的服务器使用以下配置:MAXDOP = 8。

-- 服务器的有八个或更少的处理器,使用下列配置其中N 等于处理器数:MAXDOP = 0 到N。

-- 对于具有NUMA 配置的服务器,MAXDOP 不应超过分配给每个NUMA 节点的cpu 数。

-- 超线程已启用的服务器的MAXDOP 值不应超过物理处理器的数量。

怀疑和超线程有关系,再上网查了下我的服务器志强E7 4820 果然是超线程CPU,物理核是8个。

根据微软MaxDOP第一条和第四条原则,调整MaxDOP到8,目前为止CPU 占用不高,LAZYWRITER_SLEEP是第一个wait_stats,运行似乎还稳定。

散分结贴。

相关文档
最新文档