DB2数据库故障处理及其优化研究

时间:2022-04-30 04:06:56

DB2数据库故障处理及其优化研究

摘 要:随着信息技术的发展,信息的规模和传递速度正在发生着日新月异的变化,面对如此多的数据,如何管理变得至关重要。而大数据量数据的存取和管理目前主要是由数据库来完成的。本文着重介绍了DB2数据库出现的故障与处理技术,及其技术优化研究,对相关领域的研究者有这一定的指导意义和实践价值。

关键词:DB2;数据库;故障;优化

中图分类号:G250.74 文献标识码:A1 概述

DB2数据库是IBM公司研制的一种关系(E-R)型数据库。DB2数据库提供了很好的数据可利用性、数据安全性、数据可恢复性、数据完整性,并且具有很高的数据存取速度。DB2主要应用于大型的服务器系统,具有很好的伸缩性,既可以运行在大型机上,也可以运行在个人PC机上。DB2数据库具有跨平台执行的能力和从小规模数据到大规模数据的执行功能。DB2数据库的设计使用了数据分级技术,可以很方便地将大型机数据库的数据同步下载到本地的数据库服务器,可以使用客户机/服务器的模式和基于LAN的程序访问大型机服务器数据,并实现了本地数据库及远程大型数据库的透明化连接。它拥有一个非常高效的查询优化器,大大地提高了查询性能,并支持多个任务的并发查询。DB2具有强大的网络功能,一个DB2数据库系统可以同时激活上千个活动进程,支持同时连接十几万个远程的分布用户,非常适用于大型的分布式应用系统。

2 数据库实例的问题

数据库实例问题可以分为两种情况

2.1 实例无法启动,运行db2start后,直接返回错误码,如SQL1042C。

如果根据错误码信息无法解决,可以尝试如下方案:

重新更新该实例,以root身份登录,cd/usr/opt/db2_08_01/instance/

./db2iupdt<inst_name>

Tip:常见的产生实例无法启动的原因

数据库安装了新的补丁后没有运行db2iupdt

数据库文件的权限被改成了777,数据库文件的权限是有要求的,所以不能将所有的文件都改成777的权限数据库实例文件被删除或损坏主机名与db2nodes.cfg里记录的不一致。

2.2 运行db2start时,hang在那里,既不报错,也无法启动实例

这种情况一般是由于实例没有正常的停止造成的,一般运行下列命令可以解决:

su-<inst_owner>

db2_kill

ipclean

su- root

(将所有的与该实例有关的db2进程杀死kill-9<pid>)然后重新启动实例。

2.3 数据库实例崩溃问题

遇到实例崩溃的问题,首先查看db2diag.log,根据里面的信息来分析数据库宕机的原因。再看db2dump目录中是否有trap文件。可以根据这些信息来分析原因,一般这类问题都需要IBM工程师协助解决。

宕机的原因可以分为两类,一类是数据库的BUG,即数据库的缺陷引起的,一般如果遇到了数据库的缺陷,都有临时的解决方案,或者通过安装最新的补丁来解决,对某些问题IBM也提供临时的修订来解决(需要付费)。另一类是操作系统,误操作等非产品问题导致的,对非产品问题导致的宕机尽量要避免。

Tip:常见的数据库宕机原因

系统的交换空间(paging space)用尽数据库的某个进程被kill

3 数据库问题

3.1 数据连接问题

无法连接数据库,常见的错误有代码页错误,通讯协议错误,数据库状态错误等。

对代码页类错误,可以通过设置db2codepage,db2country来解决,这两个变量需要用db2set设置成与数据库一致的值。

当发生通讯类错误时,首先要要检查环境变量DB2COMM=TCPIP是否已经设置,然后要检查dbm cfg的SVCENAME,该变量可以直接设置成端口号,或者设置成服务名,该服务名要在services文件中设置成对应的端口号。要检查该端口号是否已经被其他服务占用。在启动数据库后,可以运行netstat- an|grep<port>,来查看该端口处于的状态。

TCP 0.0.0.0:50000 0.0.0.0:0 LISTENING

还有一种情况,当连接数据库时,数据库处于backup pending状态,无法连接。这是只要对数据库做一个备份就可以了。

3.2 数据库损坏

数据库最严重的问题莫过于数据库损坏,那么当数据库损坏时,最好的办法是从备份恢复数据库。

如果无法从备份恢复,可以根据损坏的原因尝试相应的解决方案。

由于存储问题导致部分数据文件损坏,但是数据库还可以连接,这种情况可以采用导出数据库的表结果和数据的方法来恢复数据库。

当然对损坏的表,导出是无法完成的,这是可以使用db2dart的导出数据功能来导出这些损坏的表的数据。

如果数据库损坏到已经无法连接的程度,那么除了从备份恢复,唯一的办法是使用db2dart来导出所有的数据了。

Tip:如何使用db2dart来导出数据运行命令db2dart<dbname>/DDEL

#Table object data formatting start.

#Please enter

#Table ID or name,tablespace ID,first page,num of pages:

#(suffic page number withˊpˊfor pool relative),按照提示输入表名,表空间id,起始页数,需要导出的页数。

4 数据库优化研究

4.1 逻辑数据库和表的优化

在DB2数据库的逻辑设计阶段,从整体上考虑数据表之间的关系,研究尽可能合理的设计方法,是从整体上优化数据库性能的关键之一,可以为进一步优化数据库打下良好的基础。

在数据库的逻辑设计阶段,尽可能用一些数据列少一些、但数量多一些的窄表来代替包含很多列的长数据表,也就是可以将很多列的长数据表拆分成有相互关系的列数较少的多个数据表。但并不是将长表拆分成短表就可以了,而是如果一个长表中包含了多个逻辑关系才拆分,否则反而会降低性能。

这样设计数据库的优点包括:由于数据列少,可以更迅速地进行排序和建立索引;由于相互关联的表比较多,而且关系清晰,所以很多情况下可以建立多簇索引;表的列数少,建立的索引可以更窄更紧凑;因为表的列数少,每个表的索引就会相应减少,这样可以提高存储和删除数据的速度。

4.2 数据库的碎片整理

过多的数据库碎片也会影响数据库的运行效率;它对数据库的影响主要表现为三方面:一是降低性能,过多的碎片导致在数据库访问时需要更多的磁盘I/O,增加数据库读的数量和磁盘查找时间。二是浪费存储空间,碎片带来很多无效的空间使用,导致这些空间不能存储实际的数据。三是影响系统的稳定性,如应用在创建新的存储对象或分配新的存储空间时,因找不到足够大的连续空间而终止。DB2提供了两个实用工具RUNSTATS、RE-ORG完成此功能。REORG清除表和索引中的碎片,并且可选择根据索引的次序排列表行。当性能随时间下降时(当数据的插入、更新和删除造成群集或空间利用下降时),就使用REORG。RUN-STATS实用程序更新系统目录表中的统计信息以帮助查询优化处理。数据库管理器通过这些统计信息可以做出决策以提高SQL语句的性能。大量更改数据之后,或运行REORG之后,使用该实用程序。

4.3 SQL语句的优化

应用程序对数据库数据的存取基本上是通过SQL语句来完成的,因此,SQL语句的实际和优化是至关重要的。DB2数据库的优化器可以自动分析查询语句,对查询语句进行优化并找到最有效率的查询方案。DB2数据库可以对SQL语句中的一些子句做优化,并对它们选择有效的索引。最后在优化出的方案中选择一种最有效率的方案执行。

SQL语句的设计也是可以遵照一些规则来进行的。如在执行查询时,可以使用where等作为过滤条件,提高查询速度;在返回查询结果时,只返回有用的数据列和数据记录,尽量避免使用select*这种查询语句;在查询的过程中,选择合适的索引列;尽量调用数据库中已经提供的功能或者是存储过程。

参考文献

[1]史嘉权.数据库系统概论[M].清华大学出版社.2008.

[2]刘宇明.基于DB2的大型数据库性能优化方法研究[J].科学技术与工程,2007.

[3]庄济诚.DB2数据库管理与应用教程[M].清华大学出版社,2010.

上一篇:成都北路北延线工程规则方案分析 下一篇:浅谈梁式转换层施工技术