`
evget
  • 浏览: 141346 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

SQL Server数据库内存增加的问题分析

阅读更多
文章关键字:|SQL Server|数据库|内存|增加|分析|引擎|I/O|

  当 SQL Server 数据库引擎在 Microsoft  Windows NT或 Windows 2000 上运行时,其默认内存管理行为并不是获取特定的内存量,而是在不产生多余换页 I/O 的情况下获取尽可能多的内存。为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防操作系统交换内存。

  SQL Server 实例在启动时通常获取 8 到 12 MB 的内存以完成初始化过程。当实例完成初始化后,就不会再获取更多的内存,直到用户连接到该实例并开始产生工作负荷。这时,该实例根据需要不停地获取内存以支持工作负荷。随着更多的用户连接并运行查询,SQL Server 将获取支持需求所需的额外内存。该实例将继续获取内存直到达到自身的内存分配目标,并且直到达到该目标的下限才会释放任何内存。

  为了在不产生多余换页 I/O 的情况下获取尽可能多的内存,SQL Server 的每个实例都设置一个内存获取目标,直到计算机的可用物理内存在 4 MB 到 10 MB 的范围内。之所以选择该范围是因为测试表明 Windows NT 和 Windows 2000 都有最小内存交换,直到内存分配等于可用物理内存减去 4 MB。工作负荷处理任务重的 SQL Server 实例保留的可用物理内存为范围的较低端 (4 MB);工作负荷处理任务轻的实例保留的可用物理内存为范围的较高端 (10 MB)。

  SQL Server 实例的目标随工作负荷的改变而变化。当更多的用户连接并产生更多的工作时,该实例倾向于获取更多的内存以使可用的内存保持在 4 MB 的限制以下。当工作负荷减轻时,该实例将其目标调整为 10 MB 的可用空间,并释放内存给操作系统。将可用空间量保持在 10 MB 与 4 MB 之间可防止 Windows NT 或 Windows 2000 过多执行换页操作,同时使 SQL Server 得以获得尽可能最大的高速缓冲存储器而不至引起额外的交换。

  实例的目标内存设置与数据库缓冲池的页相对于可用池大小的需求有关。在任何即时点,缓冲区页的总需求取决于满足所有当前执行的查询所需的数据页数。如果相对于高速缓冲存储器内的页数,数据页的需求很大,则当前在缓冲区内的每一页很可能在相对较短的时间内由新页替换。这可由"缓冲区管理器"对象的"页生命期"性能计数器来度量。对于相对较小的缓冲区有较高需求的情况将生成短生命期,而纯粹的影响就是使 I/O 增加,因为在页可由多个逻辑读取引用之前往往要被重写。为减轻这个问题,数据库引擎可以获取更多的内存以增加高速缓冲存储器的大小。当页生命期长时,数据库引擎将可用内存定位于目标的高端 (10 MB);而当页生命期短时,数据库引擎定位于目标范围的低端 (4 MB)。

  随着其它应用程序在运行 SQL Server 实例的计算机上启动,它们消耗内存致使可用物理内存量降到 SQL Server 的目标以下。SQL Server 实例于是从其地址空间释放足够内存,以使可用内存量回到 SQL Server 的目标。如果有其它应用程序停止运行而使可用内存增多,SQL Server 实例将增加其内存分配大小。SQL Server 可以每秒释放并获取几 MB 字节的内存,这使它得以根据内存分配变化作出快速调整。

  你可以通过设置允许sql server可以使用的最大内存来做限制:最小和最大服务器内存的影响

  min server memory 和 max server memory 配置选项建立由 SQL Server 数据库引擎使用的内存量的上限和下限。数据库引擎并不立即获取 min server memory 中指定的内存量。数据库引擎启动时只使用初始化所需的内存。随着数据库引擎工作负荷的增加,它将继续获取支持工作负荷所需的内存。数据库引擎直到到达 min server memory 中指定的内存量才会释放任何所需的内存。一旦到达 min server memory,数据库引擎将使用标准算法(使操作系统的可用内存保持在 4 MB 到 10 MB 之间)获取和释放所需内存。唯一的区别是数据库引擎从不将内存分配降到 min server memory 所指定的水平下,也从不获取超过max server memory 所指定水平的内存。

  数据库引擎获取的内存量完全取决于放置在实例上的工作负荷。不处理很多请求的 SQL Server 实例可能永远达不到 min server memory。

  如果为 min server memory 和 max server memory 指定相同的值,则一旦分配给数据库引擎的内存达到该值,数据库引擎将停止动态释放和获取内存。

  如果在运行 SQL Server 实例的计算机上频繁启动或停止其它应用程序,启动这些应用程序所需的时间可能会因 SQL Server 实例分配和释放内存而延长。另外,如果 SQL Server 是几个在一台计算机上运行的服务器应用程序中的一个,系统管理员可能需要控制分配给 SQL Server 的内存量。在这些情况下,可以使用 min server memory 和 max server memory 选项控制 SQL Server 可以使用的内存量。

  何设置固定的内存量(企业管理器)

  设置固定的内存量

  展开一个服务器组。

  右击一个服务器,再单击"属性"。

  单击"内存"选项卡。

  单击"使用固定的内存大小 (MB)",然后将固定内存滑块放在适当的位置。

  说明:

  如果使用默认设置,则 Microsoft? SQL Server? 将动态配置内存。这是由sql server的内存管理机制决定的。



原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9266
分享到:
评论

相关推荐

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

    ### SQL Server数据库占用过多内存的解决方法 #### 内存使用概述 在SQL Server数据库运行过程中,内存管理是一项至关重要的任务。SQL Server会利用内存来提高数据访问速度和查询性能。其中,数据缓存占据内存的...

    优化SQL Server数据库服务器内存配置

    【SQL Server数据库服务器内存优化】 在SQL Server数据库服务器的运行中,内存配置是至关重要的,因为它直接影响着系统性能和响应速度。本文主要探讨了如何针对Windows NT 4.0平台上的SQL Server数据库服务器进行...

    优化Microsoft SQL Server数据库内存配置

    【优化Microsoft SQL Server数据库内存配置】是提升数据库性能的关键步骤。SQL Server在安装时会根据服务器的物理内存自动配置默认的可用内存,如对于32MB物理内存的机器配置16MB,16MB物理内存则配置4MB。但这个...

    sql server数据库查看器

    SQL Server数据库查看器是一款专为SQL Server设计的强大而便捷的数据库管理工具,它提供了一种直观的方式来浏览、管理和操作数据库中的数据。对于SQL Server初学者和经验丰富的DBA(数据库管理员)来说,这款软件都...

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

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

    sql server 数据库巡检

    包括检查数据库的磁盘空间使用信息、日志文件大小及使用情况、表的磁盘空间使用信息、磁盘读写情况、I/O 工作情况、锁与等待、死锁、用户和进程信息、活动用户和进程的信息、SQL Server 的实际内存占用、所有数据库...

    SQL Server的内存为何不断增加

    标题提到的问题——"SQL Server的内存为何不断增加",实际上反映了数据库引擎在应对工作负荷时的内存优化策略。在Microsoft Windows NT或Windows 2000环境下,SQL Server默认的行为是尽可能多地获取内存,但又不导致...

    C++使用ADO连接SQL Server数据库源代码

    当需要在C++程序中与SQL Server数据库交互时,通常会采用ActiveX Data Objects(简称ADO)技术。以下将详细讲解如何使用C++通过ADO连接到SQL Server数据库,并基于提供的"ConnDatabase"源代码进行学习。 1. ADO简介...

    sql server 数据库案例+C#sql server 数据库案例+C#

    在C#中,我们可以使用ADO.NET框架来连接和操作SQL Server数据库。ADO.NET提供了DataSet、DataTable、DataAdapter等组件,使得在.NET环境中与数据库进行交互变得简单。 1. 数据库连接:C#通过SqlConnection类建立与...

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

    在SQL Server数据库管理系统中,内存管理是至关重要的一个环节,特别是在处理大数据量或者高并发的业务场景下。SQL Server会尽可能地使用内存来缓存数据和执行计划,以提高查询性能。然而,当系统内存被过度占用时,...

    SQLServer数据库优化之50种方法

    本文将根据给定的信息,详细阐述部分重要的SQL Server数据库优化方法,并对这些方法进行深入解读。 #### 1. 避免不必要的查询 - **概述**:避免执行那些实际上并不需要的查询操作,比如在编写存储过程或触发器时,...

    通过Linq操作Sql Server数据库

    **Linq操作Sql Server数据库详解** Linq(Language Integrated Query,语言集成查询)是.NET Framework 3.5引入的一种强大的数据查询技术,它允许开发者使用C#或Visual Basic等编程语言的语法直接对各种数据源进行...

    学习PB与SQL Server数据库的连接

    ### 学习PB与SQL Server数据库的连接 #### 实验目的 本次实验旨在通过实践操作,使学习者能够深入理解并掌握以下几点: 1. **掌握PowerBuilder (PB) 环境及其基本语句的使用**:了解PB开发环境的基本配置与设置,...

    SQL Server数据库管理精品电子书

    《SQL Server数据库管理精品电子书...通过阅读《SQL Server数据库管理精品电子书》,读者将能够全面掌握SQL Server数据库的管理知识,提升数据库运维水平,解决实际工作中的各种问题,实现高效、稳定的数据库系统管理。

    浅谈优化SQL Server数据库服务器内存配置的.pdf

    最后,介绍了微软SQL Server数据库内存配置的优化方法。 一、物理内存的重要性 物理内存是计算机系统中最重要的资源之一。它直接影响着计算机系统的性能和稳定性。在SQL Server数据库服务器中,物理内存的大小直接...

    sqlserver内存释放

    SQL Server 是一款高性能的关系型数据库管理系统,在处理大量数据时能够实现高效的查询响应时间。为了提高性能,SQL Server 会尽可能地利用系统可用内存来进行数据缓存。这种内存管理策略虽然有助于提升查询效率,但...

    SQL Server 数据库基础

    【SQL Server 数据库基础】 SQL Server 是由微软公司开发的关系型数据库管理系统,它在IT行业中扮演着重要角色,尤其在企业级数据存储和管理中。本章主要介绍SQL Server的基础知识,包括其简介、安装过程以及一些...

    java连接sql server数据库增删改查

    在Java编程中,连接SQL Server数据库进行数据的增删改查是常见的操作。这涉及到Java的JDBC(Java Database Connectivity)技术,它提供了一种标准的API,使得Java程序能够与各种类型的数据库进行交互。本篇文章将...

    sqlserver数据库课件

    【SQL Server 2000】是微软公司推出的一款企业级关系型数据库管理系统,它具有丰富的特性和功能,广泛应用于各种规模的企业。本课件主要介绍了SQL Server 2000的基本概念、安装要求和主要系统数据库。 首先,SQL ...

Global site tag (gtag.js) - Google Analytics