“军卫一号”数据库“瘦身”方法设计

2014-03-08 18:48王兴强刘长兴刘国伟
医疗卫生装备 2014年8期
关键词:历史数据数据量瘦身

王兴强,刘长兴,刘国伟

“军卫一号”数据库“瘦身”方法设计

王兴强,刘长兴,刘国伟

目的:实现“军卫一号”数据库“瘦身”,提高整个系统的运行速度。方法:离线式整理表空间,降低高水位线,或在线式重建表空间,缩减数据文件。结果:2种方法都可成功实现数据库的“瘦身”,且能使系统平稳运行。结论:2种方法都具有可行性,且可操作性强,可提高整个“军卫一号”系统的运行效率。

“军卫一号”;数据库“瘦身”;离线;在线

0 引言

随着“军卫一号”系统的深入应用,医院信息系统(hospital in formation system,HIS)及其子系统不断增加,影像归档和通信系统(picture archiving and communication system,PACS)、实验室信息管理系统(laboratory informationmanagement,LIS)等向HIS数据回填,以及就诊人次的不断增加,造成“军卫一号”数据库的数据量快速增长。一方面,使数据库的运行速度变慢;另一方面,对数据库服务器的配置要求也变高,其根本原因在于数据库体积庞大,数据库表空间增长过快[1-5]。因此,最有效合理的解决方案就是剔除“军卫一号”数据库中不必要的历史数据,实现数据库“瘦身”,提高整个系统的运行速度[6]。

1 需求分析与方案设计

“军卫一号”系统自带了一个历史数据转储工具。其实现模式是先将需要备份的历史数据储存到TSP_BACK表空间下(主要是针对医嘱、费用、药品、检验等大数据量的几个表),然后再在其相应用户下将这些数据DELETE掉,最后导出TSP_BACK表空间下的数据。我院每年都定期进行历史数据转储工作,部分大数据量的表仅保留1 a的数据,然而数据库并没有因为转储并删除历史数据而变小,反而越来越大,反应越来越慢。

在Oracle中,使用高水位线(high water mark,HWM)标志数据的存储位置。数据库表刚建立时没有数据,这时水位线是空的,也就是说HWM为最低值。插入数据以后,HWM就会上涨。采用DELETE语句删除数据时,虽然数据被删除了,但是HWM却没有降低,还是处于删除数据以前的状态。也就是说,HWM在日常的增删操作中只会上涨,不会下跌。DELETE数据不会重置HWM,也不会释放自由的空间,也就是说DELETE空出来的空间只能给对象本身将来的INSERT/UPDATE使用,不能给其他对象使用。对SELECT语句进行全表扫描时,会扫描HWM以下的存储空间。如果插入了一千万条数据,然后再用DELETE语句删除这一千万条数据,在进行SELECT时所需的时间和删除前是相同的。

结合上述分析,对数据转储后的“军卫一号”Oracle数据库进行“瘦身”,即对表空间进行“瘦身”,本文提出了离线式和在线式2种方案:(1)离线式指的是数据库处于没有用户连接的状态,可以采用整理表空间、降低HWM、更改表空间数据文件的大小,从而实现“瘦身”。(2)在线式指的是数据库处于用户连接使用的状态,可以采用移动表和索引到新的表空间的方式来实现“瘦身”。

TSP_INPBILL、TSP_ORDADM、TSP_OUTPADM、TSP_OUTPBILL、TSP_LAB、TSP_PHARMACY等是“军卫一号”数据库最大的几个表空间,而进行数据转储也是针对以上几个表空间。下面以表空间TSP_INPBILL为例介绍上述2种方法。

2 离线式方案

采用离线式方案的前提条件为数据库没有用户连接。因为表空间TSP_INPBILL的数据量较大,整理需要数个小时,因此,在此期间需要保证其他用户不能连接数据库,不能对需要处理的表进行插入操作,使数据库处于脱网状态,否则将无法实现。

(1)更改表的ROW属性,使行可移动:

alter table INPBILL.INP_BILL_DETAIL enable rowmovement;

(2)回缩表与HWM:

alter table INPBILL.INP_BILL_DETAIL shrink space;

(3)对于表空间中其他进行历史数据转储的表重复步骤(1)和(2);

(4)查看表空间的数据文件信息:

selectd.file_name, //表空间文件名

d.file_id, //文件序号

round(max(d.bytes)/1024/1024/1024,2)||"Gb"size_ file, //文件大小

round(sum(f.Bytes)/1024/1024,0)||"M"free_file, //文件剩余空间

round((max(d.bytes)-sum(f.bytes))*100/max(d. bytes),2)||'%'used_per //文件使用率

from DBA_FREE_SPACE f,DBA_DATA_FILESd

where f.tablespace_name(+)=d.tablespace_name and

f.file_id(+)=d.file_id and

d.tablespace_name="TSP_INPBILL"

group by d.file_name,d.file_id;

(5)根据文件序号和文件使用率改变文件大小:

alterdatabase datafile*resize200M;

其中,“*”表示文件序号,“200M”指文件大小,可根据实际情况进行修改,如过小,则报错“ORA-03297: file contains used data beyond requested RESIZE value”,原因在于HWM超过了所指定文件大小的位置。

3 在线式方案

采用在线式方案,允许用户连接数据库,可以对表进行读写操作。

(1)创建新的表空间TSP_INPBILL_NEW:

create tablespace tsp_inpbill_new datafile

"…apinpbill1.dbf"size 1048M autoextend on next 10Mmaxsizeunlimited,

"…apinpbill2.dbf"size 1048M autoextend on next 10Mmaxsize unlimited

logging

online

permanent

extent management local autoallocate

blocksize 8K

segment space management auto

flashback on;

(2)取出表空间所有的表和索引,输出到文件中:

spoold:log.txt

select distinct"alter table"||owner||"."||segment_name||"move tablespace tsp_inpbill_new;" from dba_extents where ta blespace_name=" tsp_inpbill"and segment_type="table";

selectdistinct"alter index"||owner||"."||segment_ name||"rebuild tablespace tsp_inpbill_new;"from dba_extentswhere tablespace_name="tsp_inpbill"and segment_type="index";

spooloff;

(3)执行步骤(2)的输出结果,更改表空间,并重建索引:

alter table inpbill.inp_settle_master move tablespace tsp_inpbill_new;

alter table inpbill.inp_bill_detailmove tablespace tsp_inpbill_new;

……

alter index inpbill.pk_inp_bill_detail rebuild tablespace tsp_inpbill_new;

alter index inpbill.pk_inp_settle_master rebuild tablespace tsp_inpbill_new;

……

(4)重复执行步骤(4)和(5),直到旧的表空间中不存在表和索引;

(5)删除旧的表空间:

drop tablespace TSP_INPBILL including contents;

(6)表空间改名:

alter tablespace TSP_INPBILL_NEW rename to TSP_INPBILL;

(7)删除旧的表空间文件。

4 方案比较及结论

我院“军卫一号”数据库已增至近70 GB,分别在备用服务器上采用在线式和离线式2种方案进行测试,比较如下:(1)在线式方案“瘦身”后的数据库小于离线式方案“瘦身”后的数据库,分别为43和51 GB;(2)在线式方案的执行过程耗时略长于离线式方案;(3)在线式方案的操作对象是表空间,

(▶▶▶▶)(◀◀◀◀)而离线式方案针对的是表和数据文件。我院采用了本文提出的在线式方案进行“军卫一号”数据库“瘦身”,其特点在于数据库无需宕机,不影响正常工作。“瘦身”后的数据库较小,且直接操作表空间,安全性高,数据库运行速度可提高5倍以上。

本文提出的在线式和离线式方案都具有可行性,都能够实现数据库“瘦身”的目的,提升数据库的运行速度,提高整个“军卫一号”系统的运行效率。“瘦身”后的数据库经严密测试,系统运行平稳。如果对主服务器数据库进行“瘦身”,为缩短数据库脱网的时间,建议采用在线式方案,且可分时段对各个表空间进行操作。

[1] 刘志敏.“军卫一号”数据库临时表空间的管理与维护[J].数据库技术与应用,2010,19(3):70-72.

[2] 任旭升.Oracle表空间日间增量查询的实现[J].计算机光盘软件与应用,2010,8(4):4.

[3] 谭红斌.Oracle临时表空间不足和批处理缓慢问题探讨[J].天中学刊,2012,27(2):36-38.

[4] 闫军玲,李楠,杜小加,等.利用Toad解决Oracle数据库表空间错误问题[J].中国数字医学,2012,7(11):68-69.

[5] 陈忠,殷春燕.如何解决Oracle8i数据库临时表空间满的问题[J].医学信息学,2011,24(11):5.

[6] 杜大洲,骆亚军,李冬明,等.医院数据库访问速度缓慢原因分析及解决方案[J].医疗卫生装备,2011,32(3):128-129.

(收稿:2013-07-29 修回:2013-11-01)

Simplifying database of No.1 Military Medical Project

WANGXing-qiang,LIU Chang-xing,LIU Guo-wei
(Department of in formation,General Hospital of Jinan Military Area Command,Jinan 250031,China)

Objective To simplify the database of No.1 Military Medical Project to enhance the system running speed. Methods Off-line sorting of table space was performed to reduce the high water mark,or online rebuilding of the table space was carried out for shrinking data files.Results The twomeasures above could both simplify the database successfully and ensure the stability of the system.Conclusion The two measures are both feasible and operable,and can enhance the running speed of No.1 Military Medical Project system.[Chinese Medical Equipment Journal,2014,35(8):67-68,111]

No.1Military Medical Project;database simplification;off line;on line

R318;TP311.13

A

1003-8868(2014)08-0067-03

10.7687/J.ISSN1003-8868.2014.08.067

王兴强(1979—),男,主管技师,主要从事医院信息化、数据库方面的研究工作,E-mail:xingqiangwang@163.com。

250031济南,济南军区总医院信息科(王兴强,刘长兴,刘国伟)

猜你喜欢
历史数据数据量瘦身
给自己的课“适度瘦身”
我的瘦身计划
基于设备PF性能曲线和设备历史数据实现CBM的一个应用模型探讨
基于故障历史数据和BP神经网络的接地选线方案研究
基于大数据量的初至层析成像算法优化
高刷新率不容易显示器需求与接口标准带宽
宽带信号采集与大数据量传输系统设计与研究
基于Hadoop技术实现银行历史数据线上化研究
用好细节材料 提高课堂实效
还说公立医院“瘦身”