`
pcajax
  • 浏览: 2173356 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL Server 2008内存性能监控

阅读更多

以下均是针对Window 32位系统环境下,64位的不在下面描述情况下。

  用户模式和内核模式(user mode& kernel mode)

  为了防止用户程序访问并篡改操作系统 的关键部分,Windows使用了2种处理器存取模式:用户模式和内核模式。顾名思义,内核模式是给操作系统 核心代码和基本驱动用的,用户模式给用户应用程序。在内核模式下程序可以访问所有的内存 和硬件,并使用所有的处理器指令。操作系统程序比用户程序有更高的权限,使得系统设计者可以确保用户程序不会意外的破坏系统的稳定性。

  物理内存(Physical Memory)

  即实际购买的内存的大小,内存条上的容量。CPU 的地址线可以直接进行寻址的内存空间大小,在32位操作系统平台上,CPU 的最大寻址空间为4GB,也即可以支持最大4G的物理内存空间。在32位操作系统上即便你购买的是64G内存,也只能说拥有4GB的物理内存空间

  虚拟内存(Virtual Memory)

  如果计算机缺少运行程序或操作所需的随机存储内存,则Windows使用虚拟内存进行补偿。虚拟内存将计算机的RAM和硬盘 上的临时空间组合在一起,当RAM不足时,虚拟内存将数据从RAM移动到称为“分页文件”的空间中,将数据移入与移出分页文件可以释放RAM,以便完成工作。

  虚拟地址空间(Virtual Address Space,简称VAS)

  在Windows系统中,任何一个进程都被赋予了其自己的虚拟地址空间,该虚拟地址空间覆盖了一个相当大的范围,对于32位系统的虚拟地址空间范围从 0x00000000~0xffffffff(4GB)。Windows采用分页机制,将4G的地址空间分成固定大小的页,并且将虚拟地址中的每一页映射到物理内存中。

  在缺省的情况下虚拟地址空间中的低2G,即0x0000000~0x7FFFFFFFF是用户地址空间,而4G虚拟地址空间中的高2G即0x8000000~0xFFFFFFFF是分配给内核模式。实际上用户进程拥有的虚拟地址空间只有2GB。

  虚拟内存管理器(Virtual Memory Manager)

  虚拟内存管理器负责虚拟地址空间和物理内存的地址映射,如果缺乏足够内存,则需要使用到page file文件来保持临时数据也即虚拟内存,同时使用page table entry(PTE)来跟踪每一个地址映射关系。

  到这里为止,64G的内存有60G都无法访问,岂不是浪费了,那怎么办?

  /3GB和increaseUserVA

  通过/3GB的方式,可以减少内核模式占用地址空间,从而增加SQL Server进程的地址空间。默认情况下,用户模式和内核模式各自占用2G寻址空间,3G选项可以使得SQL Server获得多1G的虚拟地址空间。

  /3GB开关用法:

  在Boot.ini文件中修改其中的段落即可:

 

  或者使用bootcfg命令

 

  在Windows Server 2008中可以运行BCDEdit命令,加以调整。

 

  物理地址扩展PAE(Physical Address Extension)

  物理地址扩展(PAE)是32位Intel CPU的一种扩展,这样可以在32位系统上支持最大64G的物理内存,即4GB以上物理内存允许将更多物理内存映射为应用程序的虚拟地址空间。

  使用方式,在Boot.ini文件中修改其中的段落即可:

 

  在Windows Server 2008操作系统下也可以通过以下命令执行

 

  /PAE和/3GB

  两者的目标是不同的,又可以在同样的地方进行配置,所以难免产生疑惑,简单的来说就是如果计算机可用物理内存超过16GB,就需要确保boot.ini文件中没有/3gb参数即可。

  地址窗口化扩展插件AWE(Address Windowing Extensions)

  AWE是Windows的内存管理功能的一组扩展,它能够使应用程序使用的内存量超过通过标准32位寻址可使用的2~3G内存。AWE允许应用程序获取物理内存,然后将非分页内存的视图映射到32位地址空间。虽然32位地址空间限制为4GB,但是非分页内存却可以远远大于4GB。

  在SQL Server 2008下,可以登录SQL Server Management Studio,找到相应的数据库实例,点击右键选择属性,然后在“选择页”中点击内存,在服务器内存 选项中,复选使用AWE分配内存即可。

 

SQLServer的内存 管理

 

  SQL Server 主要的内存 组件是缓冲池。其中高速数据缓冲区用以把数据从磁盘加载到内存中,实现数据的高速读写。而过程高速缓冲区则用来存储相应的执行计划,减少编译过程,也是高速缓冲仓库的主要构成部分。用户仓库高速缓冲是用户仓库的主要组成本部分。对象仓库则仅仅是内存块组成的内存池,不需要进行LRU或成本计算例如SQL Server网络接口(SNI)利用对象存储仓库作为网络缓冲池。

  SQL Server 内存管理器由一个三层的层次结构组成。该层次结构的底层为内存节点。下一层由内存 Clerk、内存缓存和内存池组成。最后一层由内存对象组成。这些对象通常用于在 SQL Server 实例中分配内存。

  内存节点(sys.dm_os_memory_nodes)提供低级分配器 的界面和实现。在NUMA中内存节点和CPU 节点可以对应起来的,在 SQL Server 中,只有内存 Clerk 可访问内存节点。

  内存 Clerk(sys.dm_os_memory_clerks) 访问内存节点界面以分配内存。内存节点还会跟踪 Clerk 分配的内存以进行诊断。分配大量内存的每个组件,都必须使用 Clerk 界面来创建其自己的内存 Clerk 并分配其全部内存。各组件会在 SQL Server 启动时创建其相应的 Clerk。

  内存对象(sys.dm_os_memory_objects)是指多个堆。它们所提供的分配的粒度比内存 Clerk 所提供的分配的粒度更精细。SQL Server 组件使用内存对象,而不使用内存 Clerk。内存对象使用内存 Clerk 的页分配器 接口来分配页。内存对象不使用虚拟内存接口或共享内存接口。根据分配模式的不同,组件可以创建不同的内存对象类型来分配任意大小的区域。

  SQL Server的缓冲池只提供8KB的内存块;大于8KB的大内存块需求是被单独管理的,且一般是直接从操作系统 或者说是从缓冲池外获取到的,此外只有数据高速缓冲页面才能使用AWE内存,并且需要单独跟踪。

  SQLServer的内存方面的系统视图

 

  sys.dm_os_memory_cache_clock_hands 返回特定缓存时钟的每个指针的状态。提供给用户关于每个缓存存储区和用户存储区的时钟指针信息——指针是否正在转动、圈数、被移除的条目数量等。此视图对于查找当前时钟指针的状态以及时钟指针的移动历史非常有用。

  sys.dm_os_memory_cache_counters 返回缓存运行状况的快照。提供有关已分配的缓存条目、缓存条目的使用情况以及内存源的运行时信息。提供给用户每个存储区的总结信息——使用的内存数量、条目数、正在使用的条目数。用户可以使用该视图找到缓存的内存使用,以及一个缓存中的条目数量。

   sys.dm_os_memory_cache_hash_tables 针对 SQL Server 实例中的每个活动缓存返回一行。即用户关于缓存存储区的散列表信息——最大、最小、平均桶长等。此视图对于查找缓存存储区中每个缓存表的每个散列桶的条目分布非常有用。

  sys.dm_os_memory_cache_entries 返回有关缓存中所有条目的信息。使用此视图可对缓存条目进行跟踪,直至它们的关联对象。还可使用此视图获取有关缓存条目的统计信息。

  sys.dm_os_sys_info返回一组有关计算机和有关 SQL Server 可用资源及其已占用资源的有用杂项信息。

  sys.dm_os_sys_memory 从操作系统 返回内存信息。SQL Server 受操作系统级别的外部内存条件和基础硬件物理限制的约束并对其有所响应。确定整个系统的状态是评估 SQL Server 内存使用量的重要方面。

  sys.dm_os_virtual_address_dump则返回有关调用进程的虚拟地址空间中的页范围的信息。

  DBCC MemoryStatus命令提供了SQL Server的当前内存状态的快照,也可以作为我们分析内存瓶颈的重要依据。

  内存压力

 

  对于SQL Server占用内存资源的监控主要集中在页面吞吐能力、页面错误和可用内存上上,对虚拟内存的监控,则重点在于分页文件的使用率上。下面提供了几种对象、计数器和相应的阈值及描述。

 

  SQL Server提供的sys.dm_os_performance_counters计数器视图,主要对缓冲区管理器和内存管理器的一些计数器进行监控,比如页面的生存周期、检查点、惰性写入器和缓冲命中率等指标。

 

  以下为缓冲池内数据库缓冲池中各个数据库的分布情况。

 

  以下为返回当前数据库中每个对象的缓存页计数,加以适当的修改我们也可以得到数据缓冲池中对象数据页和索引页的分布情况。

 

  以下为缓冲池中前十位消耗内存最大的内存组件。

 

  我们需要重点关注的内存组件为以下:

  sys.dm_exec_cached_plans针对 SQL Server 为了加快查询执行而缓存的每个查询计划返回一行。可以用此动态管理视图来查找缓存的查询计划、缓存的查询文本、缓存计划占用的内存量,以及重新使用缓存计划的计数。同样我们还可以和sys.dm_exec_sql_text联合起来进一步加工获取到缓冲最大的前10条SQL。

  CACHESTORE_SQLCP—SQL执行计划(临时缓存计划、自动参数化计划和预编译计划)

  CACHESTORE_OBJCP—对象计划(存储过程、函数、触发器等执行计划)

  CACHESTORE_PHDR—Bound Trees是在SQL Server中代数化的结构过程,被用于视图、约束和默认值。

  CACHESTORE_XPRO是预定义的系统存储过程,这里仅包含实现过程的函数名称和DLL名称。

  以下SQL用来确认在缓冲区外进行分配了内存的内部组件(即通过多页分配器请求内存),借以了解内存是否存在压力。

 

  sys.dm_exec_cached_plans针对 SQL Server 为了加快查询执行而缓存的每个查询计划返回一行。可以用此动态管理视图来查找缓存的查询计划、缓存的查询文本、缓存计划占用的内存量,以及重新使用缓存计划的计数。同样我们还可以和sys.dm_exec_sql_text联合起来进一步加工获取到缓冲最大的前10条SQL。

 

分享到:
评论

相关推荐

    SQL Server 2008内存及IO性能监控

    在SQL Server 2008中,内存管理和IO性能监控是数据库管理员进行系统优化和问题排查的关键环节。本文将深入探讨这两个方面的监控方法,帮助你更好地理解和管理SQL Server的资源利用。 一、内存管理 1. **内存架构**...

    SQLServer性能监控指标说明

    SQL Server 性能监控指标说明 SQL Server 的性能监控指标是数据库管理员和开发者对数据库性能进行监控和优化的重要依据。以下是 SQL Server 性能监控指标的说明: 配置硬件 在 SQL Server 中,配置硬件是性能监控...

    SQLServer性能监控指标说明.docx

    内存性能监控指标 内存是SQL Server性能的关键组件,了解内存的使用情况可以帮助我们更好地优化SQL Server的性能。以下是一些重要的内存性能监控指标: * 物理地址空间:物理地址空间是SQL Server可以使用的最大...

    sqlserver内存释放

    为了提高性能,SQL Server 会尽可能地利用系统可用内存来进行数据缓存。这种内存管理策略虽然有助于提升查询效率,但也可能导致运行 SQL Server 的服务器内存占用过高,从而影响到其他服务或应用的正常运行。 #### ...

    自动释放sql server 进程内存的程序,附源代码

    "sqlserver"标签直接指明了程序的应用对象。"释放进程内存"和"自动释放"标签则明确了程序的主要功能,即自动进行内存释放操作。 压缩包内的“WindowsFormsApp1”很可能是一个基于.NET Framework的Windows桌面应用,...

    深入解析sqlserver 2008 Microsoft SQL Server 2008 Internals

    5. **性能调优**:性能优化是数据库管理员的日常工作,本书介绍了性能监控工具(如动态管理视图和性能计数器)、索引设计原则、查询优化技巧以及资源管理策略。 6. **复制与高可用性**:SQL Server 2008提供了多种...

    SQL_Server_2008查询性能优化

    在SQL Server 2008查询性能优化的主题中,我们主要关注如何提高SQL查询的速度,减少资源消耗,以及提升数据库的整体效率。对于那些已经具备基本SQL语法知识,并期望提升其代码执行性能的开发者来说,这是一个至关...

    SQL SERVER 2008安装包.rar

    它允许用户编写、调试和执行SQL脚本,以及进行数据库设计、性能监控和配置服务器。 6. **备份与恢复**: SQL Server 2008支持多种备份类型,如完整备份、差异备份、事务日志备份,以及备份到云存储。恢复模型包括...

    64位系统SQL SERVER 2008

    8. **维护与监控**:通过SQL Server Management Studio (SSMS),管理员可以对64位SQL Server 2008进行监控和性能调优,检查系统性能计数器,使用动态管理视图等工具。 9. **升级与迁移**:如果从32位迁移到64位SQL ...

    sqlserver内存释放工具(个人感觉还不错)

    此时,"sqlserver内存释放工具"就显得很有价值。 标题中的“sqlserver内存释放工具”暗示了这是一个针对SQL Server内存优化的实用程序,可能是由开发者或社区成员为了帮助用户解决内存问题而创建的。这类工具通常...

    SQL Server 2008查询性能优化 源代码

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应速度和整体效率。"SQL Server 2008查询性能优化源代码"这一资源提供了一种深入学习和实践的方法,帮助我们理解并提升SQL...

    如何解决SQL Server内存不断增加问题

    总之,解决SQL Server内存不断增加的问题需要深入了解其内存管理机制,结合实际工作负荷和系统资源状况,通过调整配置参数和优化数据库设计来实现资源的最佳利用。同时,持续监控和分析系统性能,及时做出调整,是...

    SQL Server数据库占用过多内存的解决方法

    通过对SQL Server内存使用机制的理解,我们可以采取多种措施来优化内存管理和查询性能。合理配置最大内存使用量、优化查询策略、合理使用索引等方法可以帮助我们有效控制SQL Server的内存占用,并提高整体系统的性能...

    SQL Server 2005内存调优

    通过对SQL Server 2005 的内存调优,不仅可以提高数据库系统的整体性能,还可以减少由于内存管理不当带来的稳定性问题。合理的内存配置和调优策略是实现这一目标的关键。希望本文所提供的技术和方法能够为DBA们在...

    通过内存配置来优化SQL Server的性能

    在SQL Server 2000中,内存管理是性能优化的关键方面。系统自动管理内存分配,但通过调整一些服务器配置选项,我们可以进一步优化SQL Server的性能。以下是一些关键的内存配置选项及其作用: 1. **min server ...

    sqlserver内存清理

    总之,SQL Server内存清理涉及多个层面,包括配置调整、缓存清理、工作集管理、数据库维护和监控。通过深入了解这些概念和实践技巧,我们可以有效地清理SQL Server占用的内存,保持服务器运行流畅,确保整体系统的...

    SQL Server 2008设置最大连接数

    - 开始时保持默认设置,根据实际使用情况和性能监控结果进行微调。 - 在高峰期进行压力测试,确定最佳的最大连接数。 总结,SQL Server 2008设置最大连接数是一项涉及服务器性能和稳定性的关键配置。需要综合考虑...

    SQL SERVER 内存配置

    在SQL Server内存配置方面,确保数据库系统的高效运行是至关重要的。很多情况下,SQL Server的安装并未得到适当的内存配置,导致性能受到影响。特别是对于32位系统,由于限制,SQL Server可能无法充分利用全部物理...

    sqlserver内存释放心得

    本文将深入探讨SQL Server内存释放的相关知识点,基于“sqlserver内存释放心得”这一主题,结合《SQL-Server-2005-内存管理规则探秘.doc》文档内容,我们将详细了解SQL Server内存结构、内存分配策略以及如何有效...

Global site tag (gtag.js) - Google Analytics