SQL Server资源管理之内存管理篇(下)

发表于:2011-3-01 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hjq19851202    来源:51Testing软件测试网采编

  在上篇文章SQL Server资源管理之内存管理篇(上),介绍了SQL Server的内存管理的一些理论知识,这篇利用这些知识来解决现实中常见的一些问题。

  一、数据页缓存压力的调优

  前篇我们说过,如果用户访问的数据页面都缓存在内存里,这样的相应速度是最快的。但是现实中,数据库的大小都是大于物理内存的,SQL Server不可能将用户需要的所有数据都缓存在内存中,当用户需要的数据不在内存中,将会发生Paging动作从硬盘中读取需要的数据,偶尔的Paging不会从整体上影响SQL Server的性能,但如果Paging动作经常发生将会严重影响SQL Server整体性能。

  当我们进行数据页缓存的调优时,第一步先是确定是否有数据页缓存的压力,第二步是确定数据页缓存页的压力是由哪里引起的,主要可以分成外部压力和内部压力。

  1、是否有数据页缓存压力

  确定是否有数据页缓存压力,主要可以从下面的一些内存性能计数器和sys.sysProcesses来确认。

  SQL Server:Buffer Manager-Lazy Writes/Sec的值经常发生。

  SQL Server:Buffer Manager-Page Life Expectancy的经常反复变化,始终升不上去。

  SQL Server:Buffer Manager-Page Reads/Sec的值经常不为0。

  从sys.sysprocesses这一系统视图的wait_type中能看到ASYNC_IO_COMPLETION值,这一值代表的意思是“等待I/O操作的完成”,这通常代表内存不足发生了硬盘读写,也可能有人会说这是硬盘的速度太慢导致的,只要换上速度快的硬盘就能解决这个问题了。确实换上速度快的硬盘能使SQL Server的响应速度提高一些,但是如果上面那三个计数器的值经常,那硬盘的问题就不是主要问题,它只是内存不够(因)导致的硬盘读写(果),根本原因还是在内存上。

  从上面的分析中,可以确认系统中存在数据页缓存压力,现在就来分析这一压力的来源,是外部压力还是内部压力。

  2、压力的来源

  1)外部压力

  SQL Server:Buffer Manager-Total Server Memory的值是否变小了。如果变小了那就说明是,SQL Server的能使用的内存被系统或者外部程序给压缩了。这就是外部压力。

  2)内部压力

  SQL Server:Buffer Manager-Total Server Memory的值没什么变化,但是和SQL Server:Buffer Manager-Target Server Memory的大小基本相等。这就是SQL Server的数据页的内存需求已经等于了系统能提供的内存大小了。说明是数据库内部压力。

  3、解决办法

  1)外部压力

  发生外部压力的大多数情形都是由于系统中还运行了其他的服务器软件,在它需要内存的时候抢掉了SQL Server的内存。因此解决方案也就是将SQL Server运行在专门的服务器上。还有一种情形会导致外部压力的发生,那就是操作系统在占用大量内存的操作(比如备份),解决方案就是将这些操作方到SQL Server运行压力小的时候(比如凌晨1、2点的时候)。

  2)内部压力

  a、找出读取数据页面最多的语句,对它进行调优。找出这些语句可以通过sys.dm_exec_query_status动态视图和sys.dm_exec_sql_text动态函数的关联查询。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号