首页 > 范文大全 > 正文

数据库服务器内存管理

开篇:润墨网以专业的文秘视角,为您筛选了一篇数据库服务器内存管理范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【 摘 要 】 本文介绍数据库服务器内存管理方法。

【 关键词 】 服务器;内存;管理

The Database Server Memory Management

Yan Zhuo

(The people's Bank of China, Changsha Branch HunanChangsha 410005)

【 Abstract 】 This Paper Introduces the Database Server Memory Management Method.

【 Keywords 】 server; memory; manage

1 引言

现有大型应用系统都离不开数据库服务器,一旦因为数据库内存不足,就会引起登陆失败或死机现象,导致业务系统无法正常运行。因此掌握数据库服务器内存管理是现有IT维护工作的重要一环。目前服务器使用数据库管理软件种类很多,但其基本原理与特点都很类似。本文以ASE服务器为例,以数据库内存管理中常用的最大用户连接数,打开数据库、索引、目标数,数据库设备数等各类事件,来简单介绍如何对数据库服务器内存进行有效管理,保障业务应用的正常运行。为了掌握数据库服务器内存管理,我们必须先了解一些基本概念,以便掌握分配和估算内存使用的一般方法。下文的说明是以数据库服务器ASE为依据给出的。

2 服务器内存分配的构成

如图1所示,物理内存(Physical Memory)是指安装ASE服务器的服务器物理内存。为了查看服务器的物理内存,在操作系统提示符后用top命令(如果使用Unix操作系统,在操作系统提示符后用top命令,在Windows系统平台时用mem命令)可显示服务器的物理内存。最大内存(Max Memory)是指物理内存中用于ASE服务器的最大内存,即最大内存为能被ASE服务器使用的最大共享内存。最大内存越大服务器运转得越好。Adaptive服务器操作系统(ASE Executable)内存被用于运行服务器的操作系统。这块内存是不可配置的,其余内存则为内部结构内存和存储器内存。核心结构内存(Kernel Structure)用于在ASE服务器运行期间存储内部信息。服务结构内存(Server structure)用于存储关于用户连接数、在用数据库、有效的数据库锁定等信息。内存对象池(Memory Object pool)是一个从中可以动态地选择分配较小的存储段的存储块。数据存储器(Data Cache)是存放当前在用的数据页、索引页和日志页的ASE服务器内存块,如图2所示。当数据页、索引页和日志页在用时,它们被存放在数据存储器中,而没被ASE使用的数据页、索引页和日志页则存放在硬盘上。我们可以使用sp_cacheconfig过程来配置数据存储器的大小,例如:

1> sp_configure "default data cache", “1000M”

2> go

过程存储器(procedure cache)是ASE存放当前在用查询方案(query plan)的内存块(见图3), 我们可以使用sp_configure过程来配置数据存储器的大小,例如:

1> sp_configure "procedure cache size",3500

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

----------------- ----------- ----------- ------------

----------- -------------------- ----------

procedure cache size 3271 7376 3500

3500 memory pages(2k) dynamic

3 设置数据存储器和过程存储器能减少读写硬盘的频率

为了认清数据存储器和过程存储器的作用,我们先分别了解数据页、索引页和日志页 (以下简称数据页)是如何通过数据存储器以及查询方案如何通过过程存储器。数据页通过数据存储器的过程如图4所示,当一个修改数据的语句被执行时,服务器首先把要被修改的相关页拷贝到数据存储器中(如果此页已经在数据存储器中,则服务器不需要访问硬盘及拷贝数据页)。其次,数据存储器中的数据页按需要作,如修改等。当数据存储器没有足够的空间存放新的数据页时,其中的某些旧的数据页就会被从中去掉,即数据存储器的数据页过期。当数据存储器中的一个数据页过期(从数据存储器中去掉)前,其中的改变内容会被保存到硬盘。如此的数据读取存盘机制降低服务器对硬盘的访问频率。查询方案如何通过过程存储器的过程如图5所示,当一个存储过程语句被执行时,服务器首先从系统表sysprocedures中生成查询方案并存放到过程存储器中(如果此查询方案已经存在于过程存储器中,则省略此步骤)。其次,过程存储器中的查询反方案被使用。当没有足够的空间容纳新的查询方案时,过程存储器中一些查询方案会过期,被从过程存储器中去掉。从数据页通过数据存储器的过程不难看出,数据存储器的使用减少了对硬盘的读写操作。从查询方案通过过程存储器的过程不难看出,过程存储器的使用减少了生成查询方案的操作。可见,数据存储器和过程存储器的使用优化了服务器的运行。

4 使用内存的估算

判断内存占用情况,包括判读哪一方面内存占用较多,这些内存占用是否合理,是否影响了服务器的正常运行。从以上的简要介绍我们可以了解服务器物理内存的分配情况(见图1)。很明显,有一部分内存占用是不可改变的,如操作系统和其他程序占用、Adaptive服务器操作系统占用,因此,我们主要考虑其他可以变动的占用。为了能清楚地估计服务器内存占用,我们有必要介绍服务器内存占用的几个典型的方面,包括最大用户连接数,打开的数据库、索引、锁的数目,数据库设备数,数据存储器和过程存储器等。以下将对这些方面具体介绍并举例说明如何估计其占用内存的大小。

我们知道,每一用户连接都要耗费内存,因此定义最大的用户连接数对内存有影响。我们可以使用number of user connections 参数来配置用户的连接数,例如:

1> sp_configure "number of user connections",50

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

-------------------- ----------- ----------- ------------

----------- -------------------- ----------

number of user connections 25 12742 50

50 number dynamic

其中,配置的用户连接数(Run Value)为50,对应此用户连接数耗费的内存(Memory Used)为12742(以2K为单位)。

为了更好地管理内存,服务器提供用于提供估计耗费值的语句,格式为:

sp_helpconfig "参数","值"

其中“值“可以是参数值,也可以是内存值。当“值”为参数值时执行结果能显示该参数值耗费的内存,当“值”为内存值时可以返回使用这些内存要使用多大的参数配置值。例如:

1> sp_helpconfig "number of user connections","50M"

2> go

number of user connections sets the maximum number of user connections that can

be connected to SQL Server at one time.

Minimum Value Maximum Value Default Value Current Value Memory Used

Unit Type

------------- ------------- ------------ ------------- -----------

-------------------- ----------

5 2147483647 25 50 12742

number dynamic

这表示要使用“50M“内存,应该配置的用户连接数为200个用户连接。

当服务器打开数据库、索引、目标时,它需要从对应的系统表中获得信息。这些信息被复制到内存的存储器中,这样可以避免对硬盘的频繁访问。我们可用对应的过程使用来配置或者查看参数和内存,以下具体举例说明。

配置打开数据库数目的情况:

1> sp_configure "number of open database", 12

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

----------------------------- ----------- ----------- ------------

----------- -------------------- ----------

number of open databases 12 1490 12

12 number dynamic

此配置将打开数据库的数目为12,这时耗费的内存为1490(以2K单位)。

配置打开索引数目的情况:

1> sp_configure "number of open indexes",10000

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

---------------------------- ----------- ----------- ------------

----------- ------------------- ----------

number of open indexes 500 12030 10000

10000 number dynamic

此配置将打开索引的数目配置为10000,这时耗费的内存为12030(以2K单位)。

配置打开目标数目的情况:

1> sp_configure "number of open objects",10000

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

---------------------------- ----------- ----------- ------------

----------- -------------------- ----------

number of open objects 500 14437 10000

10000 number dynamic

此配置将打开索引的数目配置为10000,这时耗费的内存为14437(以2K单位)。

配置使用锁数目的情况:

1> sp_configure "number of locks",100000

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

----------------------------- ----------- ----------- ------------

----------- -------------------- ----------

number of locks 5000 14862 100000

100000 number dynamic

此配置将使用锁的数目为100000,这时耗费的内存为14862(以2K单位)。

配置使用数据库设备数量的情况:

1> sp_configure "number of devices",50

2> go

Parameter Name Default Memory Used Config Value

Run Value Unit Type

---------------------------- ----------- ----------- ------------

----------- -------------------- ----------

number of devices 10 #28 50

50 number dynamic

此配置将使用数据库设备数量为50,这时耗费的内存为#28(以2K单位)。其中的#代表此内存是包含在另一个参数内存中的。

5 分配服务器内存的步骤

有了以上对内存使用的认识,我们就可以进一步规划服务器的内存。给定一台服务器作为数据库服务器,我们如何为其配置内存的分配呢?服务器内存的总体分配如图1所示,分配过程可按以下步骤进行:首先要确定最大内存,确定最大内存是通过物理内存减去操作系统和其他应用程序(此服务器可能使用其它应用程序)所占内存得到的,而物理内存可用top(对于Unix系统)得到。其次要确定服务结构所占内存,此内存是通过估计用户连接数、打开数据库数、打开索引数、打开目标数、锁数目、建立数据库设备数等占用内存的和得到的。在设计完成并使用后也可根据错误日志的指示重新调整配置参数。第三,确定数据存储器和过程存储器的大小。第四,配置完成后启动服务器。在启动时,服务器先检查是否有足够的内存支持配置,没有足够内存则失败,需根据错误日志指示重新配置,有足够内存则依次分配服务器操作系统内存、核心结构内存、服务结构内存、数据存储器和过程存储器内存。在启动过程中,分配内存的日志会被写到错误日志中。第五,根据错误日志的情况确定该修改或调整哪些日志。

6 结束语

以上介绍了如何管理数据库服务器内存,包括服务器内存的分配构成、数据存储器和过程存储器、几个主要配置参数占用的内存等。为了判断内存的使用情况,我们还可从错误日志中获得内存的分配和使用信息,并根据对应的内存使用情况调整对应的参数。有了对内存的掌握,我们就可从容处理应用程序中涉及服务器的内存故障,保证业务系统正常运行。

作者简介:

阎焯(1977-),男,中南民族大学, 大学本科,主任科员,主要从事外汇信息化管理工作多年,承担过多项外汇管理应用系统的推广、维护工作;关注领域:数据库服务器的优化与管理。