admin 管理员组

文章数量: 1184232


2024年3月8日发(作者:驽马十驾十架的意思)

维普资讯

第24卷第6期 计算机应用与软件 Vo1.24 No.6 2007年6月 Computer Applications and Software Jun.2o07 PostgreSQL数据库运行状态数据的统计收集机制分析 阮宏一 彭智勇 夏汇川 (湖北教育学院计算机科学系 湖北武汉430205) (武汉大学计算机学院,武汉大学软件工程国家重点实验室湖北武汉430072) (华中师范大学计算机科学与技术系湖北武汉430079) 摘要 对象关系数据库是新一代的数据库管理系统,它将关系数据库系统与面向对象数据库系统两方面的特征相结合,不仅能 很好地支持对象管理和规则管理,而且能更好地支持原有的关系数据管理。要维护一个对象关系数据库管理系统长期正常有效地 运行,其中一个不可忽略的机制就是数据库的清理机制。PostgreSQL是一个面向公众的、开放源代码的对象关系数据库管理系统, 受到了人们的普遍认可和欢迎。对该系统数据清理机制的一个重要组成部分——数据库运行状态的数据统计收集机制进行了全面 分析,给出了统计收集信息的种类、主要函数、数据结构和实现算法,这将有助于维护和完善该数据库系统。 关键词 统计收集机制 数据库清理PostgreSQL对象关系数据库 ANALYSIS OF DATABASE STATISTICS COLLECTOR MECHANISMS IN POSTGRESQL Ruan Hongyi Peng Zhiyong Xia Huichuan (Department ofComputer Science,HubeiInstituteofEducation,Wuhan 430205,Hubei,China) (School foComputer,State Key Laboratory foSotfware Engineering,Wuhan University,Wuhan430072,Hubei,China) (Departemnt ofComputer Sciecne and Technology,Central ChianNormal Unievrsity,Wuhan 430079,Hubei,China) Abstract The object relational database is a new database management sysiem,which has the properties of both the relational database system and the object・oriented datbaase system.It can be used to store and manage not only objects and rules but laso relational data.In order to suppotr the object relational datbaase management system to run for long time,datbaase vacuum is very necessary.PostgreSQL is an open source object relational database management system.Its statistics collector which is na importnat component of the database vacuum mecha‘ nism is analyzed,and the kinds of statistics information it can collect,main functions,data structures,and implementation algorithms are g v. en,which are helpful for maintaining and improving the database system. Keywords Statistics collector mechanism Database vacuum PostgreSQL Object relational datbaase 函数算法和数据结构等等。 0引 言 1 PostgreS ̄L运行状态数据统计收集机制分析 要维持一个数据库系统的正常运行,一个好的数据库清理 机制…是必不可少的。数据库清理机制的主要任务是不定期 在对象关系数据库系统的运行过程中,DBMS会随时记载 地收集系统中所有废弃对象,回收物理空间,以保证数据库系统 并处理后端进程的各种返回信息要求,并将各种收集统计的信 高速、有效地运行。数据库的清理工作又是建立在数据库运行 息写入到系统的一个状态文件中。DBMS不定期地执行统计收 状态收集机制的基础之上的。所谓数据库运行状态收集,其主 集进程,并随时记载最新的数据库运行状态的相关数据,为系统 要任务是不定期地记录数据库运行过程中各对象的状态信息, 管理员或信息收集者提供相应对象数据的最新状态报告,并为 例如:DBMS会随时记载并处理后端进程的各种返回信息要求、 后台数据库清理做准备工作。在PostgreSQL系统中,数据的统 用户数据库的状态信息等,为数据库清理操作提供状态报告。 新一代数据库管理系统之一:对象关系数据库系统 Post— 计收集主要由两个重要的函数完成,其一是读系统状态文件函 greSQL_3 除了具有一般关系数据库的SQL功能外,还包含了面 数,其二是写系统状态文件函数,后面将重点分析。 向对象的技术特性,主要包括类和继承,使得它能够有效处理大 对象以及其它复杂的数据类型。本文对该系统清理机制的一个 收稿日期:2006—04—05。基金项目:国家863数据库重大专项课 重要组成部分——数据库运行状态的数据统计收集机制进行了 题资助(项目号:2002AA4Z3450)。阮宏一,副教授,主研领域:数据库技 研究和分析,包括收集信息的种类、统计收集执行流程、及主要 术与应用,计算机网络与应用,控制理论。 

维普资讯

第6期 阮宏一等:Postgre SQL数据库运行状态数据的统计收集机制分析 1nt procpid: 21 1-1 PostgreSQL运行状态统计收集信息的种类 在系统运行期间,数据统计收集机制会周期性地统计收集 各类数据,并不断地更改系统状态文件,使该文件总是保存最新 的数据库运行状态数据。其收集的数据类型有以下4种: (1)每一个用户数据库(DB)的相关数据 PostgreSQL系统具有能够同时支持多个用户、多个数据库 并行的资源共享功能。对每一个用户数据库,数据统计收集机 char activity[PGSTAT_ACTIVITY—SIZE]; }PgStat—StatBeEntry; 其中包括:与客户端对应的数据库的Oid、用户Oid、对应进 程的标识符(pid)及描述信息字符串。 (4)每一个已结束的后台进程的相关数据 对应的数据结构为: typedef stmct PgStatStatBeDead 制需要不定期地收集统计其相关的信息,其对应的数据结构为: typedef struct PgStat—StatDBEntry { 0id databaseid; HTAB tables: mt n_backends; Pg5【a【_Counter nconnects; _PgStat Counter nxactcommit; _—PgStatnxact_Counter _—rollback; PgStatn—Counter  blocksfetched;PgStatCounter n_blcoks—hit; mt destroy; f PgStat_StatDBEntry; 其中包括:用户数据库的惟一标识符(Oid)、该数据库所含 表的对应hash表的入口地址、与该数据库相关联的后台进程的 个数、连接到该数据库的对象的个数、与之相关联的事物提交或 滚回的个数及该数据库的销毁延时等信息。 (2)每一个用户数据库所含表的相关数数据 PostgreSQL系统为了能够很好地管理一个数据库及其所含 表的状态信息,将一个数据库所含的表的相关数据组织在一个 hash表中,便于管理。在数据库运行期间,数据统计收集机制 要随时记载每一个表的状态信息,其对应的数据结构为: typedef struct PgStat—StatTabEntry { Oid tableid; PgStatCounter numscans; PgStatCounttuples_retumed; —er PgStatetched;_Counter tuplesf PgStat—Counter tuples—inserted; PgStatCounter tuples—updated; —PgStat_Counter tuples_deleted; PgStatCounter blcoks_fetched; —PgStat_Counter blcoks_hit; lnt destory; }PgStat_StatTabEntry; 其中包括:每一个表的惟一标识符(Oid)、表被访问扫描的 次数、表中元组的插 删除/修改次数及该表的销毁延时等 信息。 (3)每一个未结束的后台进程的相关数据 PostgreSQL系统环境由三个主要部分组成:客户端、服务器 端及底层数据库端。当合法用户提出对数据库的操作请求之 后,由服务器端派生相应的后台进程建立用户与数据库的联接。 在数据库运行期间,数据统计收集机制要随时记载每一个未结 束的后台进程的状态信息,其对应的数据结构为: typedef stmct PgStatStatBeEntry _{ Oid databaseid; Oid userid; { int prcopid; int backendid; int destroy; }PgStat_StatBeDead; 其中包括:后台进程标识符(id)、处理进程的标识符(pid) 及该进程的销毁延时(destroy)信息。 1.2 Postg reSQL系统统计收集初始准备工作 在PostgreSQL系统运行期间,数据的统计收集工作不定期 地反复执行。当要进行新一轮 的数据统计收集时,由系统主 进程Postmaster调用系统状态 初始化函数pgstst_init()进行 初始准备工作,主要是建立收 集过程所需要的系统资源:如 图1 PostgreSQL系统数据 建立UDP工作栈(socket)用以 统计收集执行流程 发送和取回收集的信息,建立 管道(Pipe)通信用以接收和控制信息等。然后由Postmaster调 用开始函数pgstst_start()来激活一个新的统计收集的执行。 该函数需要检查UDP工作栈是否存在、更新系统缓冲区、关闭 所有由Postmaster打开的其它工作栈,开始一个新的进程,并由 其调用主函数pgstst_main()开始数据的统计收集。数据的统 计收集执行流程如图1所示。 1.3 PostgreSQL系统统计收集的过程 该系统运行状态数据的统计收集工作,由系统状态收集主 函数pgstst_main()完成,它是系统子进程postmaster的主体。 该函数的主要功能有以下3点: (1)调用读状态函数pgstst—read—statsifle(),读进上一次 收集统计建立的状态文件。 (2)循环获取管道信息,根据返回的管道信息类型进行相 应的处理,直至buffer Pipe信息为空或bufer Pipe由子进程 postmaster关闭退出。 管道信息类型定义如下: #define PGSTAT_MTYPE—DUMMY 0 #define PGSTAT_MTYPE—BESTART 1 #define PGSTAT MTYPEBETERM 2 —#define PGSTATMTYPEACTIVITY 3 _—#define PGSTATMTYPETABSTAT 4 _#define PGSTAT_MTYPETABPURGE 5 —#define PGSTAT—MTYPEDROPDB 6 —划efine PGSTATMTYPERESETCOUNTER 7 _—其中: 0表示返回的是假信息,什么也不做。 1 表示返回一个新开始进程的信息,将其复制到状态文件 中的系统进程表。 f下转第25页】 

维普资讯

第6期 任洪敏等:开放源码软件综述 值destroy==0(销毁延时计数),则删除其所含表的hash表且 从DB hash表中删除该DB状态记录,否则在系统状态文件中写 The Linux Project First Monday,2001,6(1 1).http://firstmondav. org/issaes/issue6.】1/dafermos/index.htm1. [13]Raymond,Eric S.The Cathedral&the BoTaa ̄.Musings on Linux and Open Source by an AccidentalRevolutionary.O’Reilly&ASSociates Inc.1999. 入数据库开始标志:字符D,然后将该DB记录复制到系统状态 文件中。 [14]Raymond,Eric S.Homesteading The Noosphere.http://www.free. soft,org/literature/papers/esr/homesteading/. ②依次扫描该数据库的表的hash表,对每一个数据库表 (table)的状态记录,若属性值destroy==0(销毁延时计数),则 从tblae的hash表中删除该表的状态记录,否则在系统状态文 [15]Raymond,Eric S.The MMc Cauldron.at:http://www.sfu.ca/lidc/LMSSCi documents/other%20rclated%20d ̄uments/maoc-cauldron.r ̄tf. 件中写入表的开始标志:字符T,然后将该表记录复制到系统状 态文件中。直至扫描结束,在状态文件中写入DB结束标志:字 [1 6]Firms Open Source Activities:Motivations and Policy Implication.at: http://www,infonomics.nl/FLOSS/repert/repertPart2fimrsossac. 一—tivities—.motivationsand—.Policy_Implications.htm. [1 7]Open Source Software in the Public Sector:Policy within the European Union.at:http://www,infonomics.nl/FLOS S/report/Final-2b.htm. (上接第21页) 2 表示返回一个终止后台进程信息,将其从状态文件中的 系统进程表中移去。 3表示返回的是一个进程的执行结果信息,将该信息复制 到状态文件中该进程对应的数据结构中。 4表示返回DB的表的信息,将其复制到状态文件中所在 数据库的表的hash表中。 5表示返回的是一个DB的无效表的信息,将对该表做销 毁延时标记。 6表示返回的是一个无效DB的信息, pgstst_main() 将对该DB做销毁延时标记。 ● 7表示返回的是一个重置DB命令,将 初始化工作 删除该DB原有表的hash表,重建。 ◆ (3)调用写状态函数pgstat—write~stats— 统计收集处理 ifle()建立新的DB状态文件,供下一次数 据的统计收集使用。 图2 pgstst_main() 函数pgstst—main()的执行流程如图2函数的执行流程 所示,其中初始化工作如图3所示,统计收集处理如图4所示。 图3初始化工作 图4统计收集处理 1.4 PostgreSQL写状态文件函数pgstat—write—stats・ ifle() 写状态函数是在读状态函数收集信息的基础之上,完成建 立新的系统状态文件的功能,以供下一次数据统计收集使用。 写状态文件函数将返回的各种信息分类写入到系统状态文件 中。处理过程如下: (1)有关数据库及其表的信息 ①顺序扫描DB的hash表,对每一个DB状态记录,若属性 符d。 ③转①,对下一个数据库及其表做同样处理,直至对DB 的hash表扫描结束。数据流形如:D..T..T..T……T..d D.. T..T..T……T..d……d。 (2)有关后台进程的信息 续前,在系统状态文件中写入后台进程的开始标志:字符 M、最大进程数I,然后依次将后台进程表中的每一个进程的状 态数据复制到字符标志B之后。数据流形如:M I B..B..B..B …---B..。 (3)写入系统状态文件结束标志字符E。 (4)处理后台已停止进程的信息,不写入系统状态文件 1.5 PostgreSQL读状态文件函数pgstst—read—stats- me【】 读状态文件函数的功能是读进最后一次写入的系统状态文 件。处理过程如下: (1)新建一个DB的hash表。 (2)从磁盘上读进最后一次写入的系统状态文件:pg..stats— ifle.C。 ①读入DB及表的状态信息 将字符D之后的某数据库状态信息复制到新建的DB的 hash表中,对被请求需要收集信息的DB,建其表的hash表,然 后依次从系统状态文件中将该数据库表的信息复制到其表的 hash表中。对没有被请求收集信息的DB,暂时不读进其所含 表的状态信息。 ②读入后台进程信息 按照读进的最大进程个数I,建立一个由1个数组元素构成 的后台进程状态表,然后依次将读入的后台进程信息复制到该 表中,直至文件信息结束符号E。 (3)关闭系统状态文件pg_statsifle.c。 2结语 本文比较全面地介绍了PostgreSQL数据库系统运行期间, DBMS的数据清理机制中的一个重要环节——系统数据统计收 集机制的实施过程。虽然目前流行的各种数据库管理系统的底 层数据清理机制不尽相同,但触类旁通,大同小异,它对数据库 维护技术的研究是有实际意义的。 参考文献 [1]杨冬青,唐世渭,徐其钧,等译.数据库系统实现.机械工业出版社, 20o1. 『2]李建中.日新月异的数据库研究领域——数据库技术的回顾与展 望.计算机应用与软件,2003(11). [3]彭晓明.PostgreSQL对象关系数据库开发.人民邮电出版社,2001・ 


本文标签: 状态 数据库 信息 收集 统计