导航: 好喜爱学习网 >> 数据库 >> Oracle数据库 >> Oracle 数据表分区的策略
相关文章
最新文章
文章内容
Oracle 数据表分区的策略
作者:未知 来源:网络收集 录入:管理员
Oracle虽然是一个大型的DBMS,但如果不对记录比较多的表进行处理,仍然发挥不了Oracle管理大型数据的强大功能,因此对某些表进行分区,具有如下优点: 

  分区表中每个分区可以在逻辑上认为是一个独立的对象; 

  可以在一个表中的一个或多个分区上进行如删除、移动、析分等维护操作,而不会影响其它分区,具有分区独立性; 

  如果选择合适的分区策略,会大大的加快数据的查询速度。

  一 找出需分区的表

  本节描述通过统计分析出医院His系统需分区的表,对需分区的表找出包括在你的分区键中的列(表的属性),即选择分区键。

  1、基于访问频度找出需分区的表 

  Oracle8i允许访问数据库中的审核信息,借助于收集的审核信息,设计者能够确定哪些表的数据是真正最频繁访问的,即找出那些表,需要进行分区。

  打开审核:在作为SYS或SYSSTEM登录到数据库后,动行如下脚本,打开对象的审核功能。

set echo off feed off ver off pages 0 
spool audon.sql 
select ’audit select on ’||owner||’.’||object_name||’ by 
access;’ 
from dba_objects 
where object_type in (’VIEW’,’TABLE’) and owner in 
(’ORDADM’); 
spool off 
set echo on feed on ver on 

  这些代码的运行将产生“audon.sql”的输出文件,它包含下面清单中所示格式的语句

audit select on ORDADM.DOCTOR_ORDERS by access; 
audit select on ORDADM.GROUP_ORDER_ITEMS by access; 
audit select on ORDADM.GROUP_ORDER_MASTER by access; 
audit select on ORDADM.ORDERS by access; 
audit select on ORDADM.ORDERS_COSTS by access; 
audit select on ORDADM.ORDERS_SHEET_IMAGE by access; 
audit select on ORDADM.VITAL_SIGNS_REC by access; 

  使用命令@audon.sql激活上述代码以打开审核功能收集收集审核信息,建立一个表以保存概要信息: 

create table aud_summary ( 
obj_name varchar2(30), 
owner varchar2(30), 
hits number); 

  将审核信息从dba_audit_object表中取出并装入概要表中: 

insert into aud_summary 
select obj_name,owner,count(*) 
from dba_audit_object 
group by obj_name,owner; 

  关闭审核: 

set echo off feed off ver off pages 0 
spool audoff.sql 
select ’noaudit select on ’||owner||’.’||object_name|| ’ 
by access;’ 
from dba_objects 
where object_type in (’VIEW’,’TABLE’) and owner in 
(’ORDADM’); 
spool off 
set echo on feed on ver on 

  这些代码的运行将产生“audoff.sql”的输出文件。

  使用命令@ audoff.sql激活上述代码以关闭上述对象的审核功能。

  清除审核信息: 

delete sys.aud$ 

  分析审核信息

col obj_name form a30 
col owner form a20 
col hits form 99,990 
selec obj_name,owner,hits from aud_summary; 
OBJ_NAME OWNER COUNT(*) 
----------- ------------- ---------- 
DOCTOR_ORDERS ORDADM 30309 
DRUG_STOCK PHARMACY 11094 
GROUP_ORDER_ITEMS ORDADM 1030 
GROUP_ORDER_MASTER ORDADM 1196 
ORDERS ORDADM 40421 
ORDERS_COSTS ORDADM 10109 

  以上是HIS系统临床医嘱部分24小时内对表的访问情况,从上面的查询得表1-1。

  表1-1

表行数命中率
doctor_orders205270930309 
drug_stock251111094 
group_order_item38001030 
group_order_master1861196 
orders163301040421 
orders_costs2403214 10109 

  group_order_master( 医嘱套攴主记录) 、group_order_item(医嘱套攴明细), 表的行数比较少,不适合分区;drug_stock(药品库存)虽然存取频率比较高,但表的行数比较少,因此也不适合分区。我们选择表的行数比较多、存取频率比较高的表作分区处理,如 doctor_orders、orders、orders_costs,考虑到doctor_orders是医生工作站上医生开的医嘱,orders是由doctor_orders生成、护士工作站上执行的医嘱,两个表结构类似,而医嘱与药品、卫生材料、计费联系比较密切的是Orders,因此重点介绍对表orders的处理。

  2、基于列值选择分区键

  使用Sql*plus下用命令Analyze收集末分区表的统计信息,按照Oracle推荐的取样20%进行分析,并将统计结果保存在数据字典中。 

Analyze table ORDADM.ORDERS estimate statistics 
sample 20 percent; 

  对DBA_TAB_COLUMNS数据字典视图进行查询

  产生表1-2 

select table_name,column_name,num_distinct 
from DBA_TAB_COLUMNS 
where owner like ’ORDADM’; 

  表1-2 

列不同的值
PATIENT_ID 28720 
VISIT_ID2 
ORDER_NO395 
ORDER_SUB_NO 10 
ORDER_CLASS 9 
ORDER_CODE 825 
ORDER_TEXT1551 
ORDERING_DEPT 15 
START_DATE_TIME 1194176 
STOP_DATE_TIME 636798  
  

[1] [2] 

E-MAIL:309076721@163.com
本站为非营利性质个人网站,建站只为个人爱好与学习,内容大多为电脑技术教程;
网站内容来源于互联网收集整理,禁止用于非法途径,如发现本网站上有侵权的文章请联系我们,我们会尽快删除;
本站不对站点内容准确性、完整性和真实性作任何承诺,由此产生的后果本站不承担任何责任,对以上引起的一切法律纠纷本站无权利承担。