SYBASE数据库数据的存储及优化

时间:2022-10-04 12:27:50

SYBASE数据库数据的存储及优化

【摘要】随着企业的不断发展,对数据的管理由最初的文档管理到如今的专门的数据库管理软件,我们对数据的要求越来越高,不但要保证数据的安全,还要提高数据访问的速度,数据库中数据的存储直接影响到系统的性能,所以理解数据的存储对提高数据的访问速度及数据的检查是有益的。

1、SYBASE数据库中数据的存储

下面介绍SYBASE数据库中数据的分配。数据的分配按照物理存储空间被划分为以下几个层次:设备、段、分配单元、区间和页,在这里我们回想一下数据库是如何创建的,首先创建数据库设备,并将设备的信息记录到masters数据库的sysdevices系统表中。数据库段:在create database 时引用一个设备,将会导致把该设备上的一部分空间分配为一个数据库段。分配单元、区间和页:每个数据库段被分为若干个0.5M的分配单元,每个分配单元被分为32个区间,一个区间只能与一个数据库对象关联,即数据库对象是以区间为单位分配的;每个区间被分为8页,页分为数据页、索引页、分配页、对象分配映射页(OAM)、全局分配映射页(GAM),数据页存储表中的数据,索引页存储索引项,分配页是记录分配单元内哪些区间已被对象使用,哪些页实际存有数据,OAM页记录一个对象所拥有的那些区间的分配页,GAM页记录数据库中哪些分配单元还拥有可以存储对象的区间。

2、如何优化数据的存储,提高数据访问的速度

数据的存储及维护直接影响到应用的性能,在日常的维护工作中,我们要根据应用的使用情况对重要表通过表分区及重建索引等方面提高系统性能,根据以上的有关数据存储的知识,下面从几个方面讨论如何提高数据的查询、更改等的速度。

2.1建立用户段单独存放数据库对象

创建好数据库后,数据库中默认有三个段,default、system和syslog段,通常我们把syslog段单独放在一个数据库设备上,将数据和日志分离,表和索引等数据信息存放在default默认段上,我们可以创建更多的数据库设备,自定义用户段标识这些数据库设备,将某些数据库对象单独存放,提高数据的访问速度,减少系统的I/O,通过此方式可以控制数据的增长,可以将大表分在几个磁盘上,把频繁访问的对象放在单独的磁盘上,提高系统性能。

2.2数据库和对象存储分配的检查及如何优化数据的存储

首先我们回顾一下一个新对象的分配步骤:在sysobjects sysindexes syscolumns 中添加新条目;指派空间;创建第一个OAM页,并在sysindexes中记录它的逻辑页号;紧接着第一个OAM页后初始化第一个数据(索引页),并在其页头设置objid;如果所指派的空间为所指派的分配单元的最后一个可用区间,更新GAM页。如果想查表ARC的数据存储分配情况,首先在sysobjects 表中得到id,通过此id号查找sysindexes表中indid=0或indid=1的记录,通过first得知数据页的首页,通过dbcc page(dbid,first)得到此页的详细信息,以下详细介绍如何检查及清除页碎片、区间碎片和跨区间碎片,提高数据访问速度:

页碎片:

数据所占用的页超过了实际的需要,按实际情况每页上的数据量假如能存储3行的数据,而实际上只存储了1行,那么将降低了查询的效率,与数据更紧凑存储的情况相比,服务器将不得不进行更多得I/O。可以使用dbcc checktable,sp_spaceused,dbcc listoam或optdiag确定表的当前密度,并将它与由表模式计算出来的最大密度相比较,

消除页碎片的方法:删除并重新创建聚簇索引;使用bcp将数据导出,清空表后再将数据导入;使用select into命令将数据导入一个新表,然后删除原来的表。对于DOL表还可使用reorg rebuild tablename重新压缩DOL数据页

区间碎片:

区间碎片是指一个区间内存在空页,存在过多的区间碎片导致I/O速度缓慢,降低系统性能,区间碎片由于从表中删除数据及在聚簇索引中更新了键值导致。使用sp_spaceused,dbcc tablealloc或dbcc listoam确定对象拥有多少已分配但未被使用的页消除区间碎片的方法同消除页碎片的方法。

跨区间碎片

由于索引页面拆分或者从页面上删除了所有的行引起,数据访问时在区间之间跳转,当区间跳转次数增加时,扫描的性能和大I/O的效率降低了,使用dbcc pglinkage命令检查页链,查找其页号的间隔及前向和后向的跳转,消除跨区间碎片的方法同消除页碎片的方法。

2.3对表进行分区

对一个表进行分区就是为该表创建多个数据页链,一个数据页链就是一个分区,对表进行分区有以下几个方面的优点:可以增加并行度来执行并行查询处理,可以对一个表装载数据时使用并向的块拷贝,分区使得一个表I/O分布到多个数据库设备上,对于堆表的插入数据操作,分区提供了多个插入点,对于修改和删除操作,分区不会影响性能。

3、对数据库进行DBCC检查

DBCC(Database consistency checker)用于检查和修正数据库中的不一致性,比如:

服务器记录一个页已经分配给一个对象,但该页不是那个对象页链的一部分,或者反之;页在页链中没有正确地指向前一页或下一页等问题。数据不一致可能由于硬件错误、电源不稳定等原因导致。

结束语

通过以上内容,我们了解了sybase数据库中数据是如何存储分配的,对经常访问的数据库对象我们通过对表的检查发现问题,定期对某些表通过重建索引及bcp数据等方法消除碎片,通过系统的定时功能,编写脚本定期对数据库对象进行DBCC检查。在平时的工作中,要对经常锁的用户表的页进行分析,如果经常锁索引页,可以通过更改锁模式等提高性能,了解数据的存储对分析某些问题提供了很大帮助。

上一篇:浅谈小学语文教学课外拓展 下一篇:浅究公路工程施工管理中的几个相关问题