1. 在Reorg之前收集table,index,lod的空间占用信息
在做Reorg之前,为了分析方便一般要先拿到相关tables,indexes,clobs所占用的空间大小数据。在这之前需要先分析一下表,因为DB中表的相关信息未必是最新的。
(1)分析表,以更新DB相关视图,保证其中的信息是最新的,例如:DBA_indexes,Dba_tables,中的信息
set serveroutput on set time on timing on spool analyze_tables.log alter session set nls_date_format='ddmmyyyy hh24:mi:ss'; Declare V_sql varchar2(2000); JOB_NAME varchar2(24); v_tableName varchar2(200); BEGIN JOB_NAME:= 'JOB1'; Dbms_output.put_line('gather table infor for ' || JOB_NAME || ' start at: '||sysdate); For v in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME=JOB_NAME) LOOP v_tableName:=v.TABLE_NAME; -- 1. gather table info Dbms_output.put_line('analyze table:'||v_tableName || ' start at:'||sysdate); dbms_stats.gather_table_stats(ownname => 'SHAPE',tabname => v_tableName,estimate_percent => 10,method_opt=> 'for all indexed columns',cascade=>TRUE,granularity=>'ALL'); Dbms_output.put_line('analyze table:'||v_tableName || ' complete at:'||sysdate); END LOOP; Dbms_output.put_line('gather info for ' || JOB_NAME || ' complete at:'||sysdate); EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001,SQLCODE||SQLERRM); END; / spool off
(2) 获得相关表的Block used status
SELECT segment_name, segment_type, owner, blocks, bytes/1024/1024 as Mb FROM dba_segments WHERE segment_name in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME='JOB1') and owner='SHAPE' ORDER BY segment_name;
(3)获得相关表的实际占用空间大小
SELECT table_name,num_rows,blocks,empty_blocks, (avg_row_len+3)*num_rows/1024/1024 as Mb FROM all_tables WHERE table_name in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME='JOB1');
(4)获得表上Index的空间占用信息
SELECT t2.table_name, t1.segment_name, t1.segment_type, t1.blocks, t1.bytes/1024/1024 as Mb FROM dba_segments t1, ( SELECT INDEX_NAME, TABLE_NAME FROM dba_indexes where table_name in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME='JOB1') ) t2 WHERE t1.segment_name = t2.INDEX_NAME AND t1.owner='SHAPE' ORDER BY t2.table_name, t1.segment_name;
(5)获得表中的相关clob数据的空间占用信息
set time on timing on spool shape_info_1.log select ul.table_name, ul.column_name, ul.segment_name, se.segment_type, se.owner,se.blocks,se.bytes/1024/1024 as Mb, ul.chunk from dba_lobs ul ,dba_segments se where ul.segment_name=se.segment_name and ul.table_name in('CONFIRMATION_ACKS', 'PDF_STORE_IN', 'SHARK_ACTIVITY_LOG', 'MDIS_BATCH_LOG') and se.OWNER='SHAPE' order by ul.table_name; spool off
2. 完成Reorg Job
Declare V_sql varchar2(2000); JOB_NAME varchar2(24); v_tableName varchar2(200); BEGIN JOB_NAME:= 'JOB1'; Dbms_output.put_line('reorg for ' || JOB_NAME || ' start at: '||sysdate); For v in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME=JOB_NAME) LOOP v_tableName:=v.TABLE_NAME; -- 1. reorg table Dbms_output.put_line('reorg table:'||v_tableName || ' start at:'||sysdate); V_sql:='Alter table ' || v_tableName || ' move parallel 4'; Execute immediate v_sql; Dbms_output.put_line('reorg table:'||v_tableName || ' complete at:'||sysdate); -- 2. reorg clob Dbms_output.put_line('reorg clobs start at:'||sysdate); For c in (SELECT COLUMN_NAME FROM DBA_TAB_COLS WHERE TABLE_NAME=v_tableName AND DATA_TYPE='CLOB' AND OWNER='SHAPE') LOOP Dbms_output.put_line('reorg clob:'||c.COLUMN_NAME || ' start at:'||sysdate); V_sql:='Alter table ' || v_tableName || ' move lob (' || c.COLUMN_NAME || ') store as (tablespace SHAPE_DATA) parallel 4'; Execute immediate v_sql; Dbms_output.put_line('reorg clob:'||c.COLUMN_NAME || ' complete at:'||sysdate); END LOOP; Dbms_output.put_line('reorg clobs complete at:'||sysdate); END LOOP; Dbms_output.put_line('reorg for ' || JOB_NAME || ' complete at:'||sysdate); EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001,SQLCODE||SQLERRM); END;
3. rebuld index。
由于在实际的测试中,当把Rebuild index和reorg放在一起时,rebuild index常常会失败,所以写了独立的script用来rebuild index。
set time on timing on spool shape_rebuild_indexes.log alter session set nls_date_format='ddmmyyyy hh24:mi:ss'; Declare V_sql varchar2(2000); JOB_NAME varchar2(24); v_tableName varchar2(200); BEGIN JOB_NAME:='JOB1'; Dbms_output.put_line('REBUILD_INDEX_JOB for ' || JOB_NAME || ' start at: '||sysdate); For v in (SELECT TABLE_NAME FROM REORG_TABLES WHERE JOBNAME=JOB_NAME) LOOP v_tableName:=v.TABLE_NAME; -- 1. rebuild indexes Dbms_output.put_line('rebuild indexes start at:'||sysdate); For x in (SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME=v_tableName AND INDEX_TYPE='NORMAL' AND OWNER='SHAPE') LOOP Dbms_output.put_line('rebuild index:'||x.index_name || ' start at:'||sysdate); V_sql:='ALTER INDEX '||x.index_name||' nologging'; Execute immediate v_sql; V_sql:='ALTER INDEX '||x.index_name||' parallel 4'; Execute immediate v_sql; V_sql:='ALTER INDEX '||x.index_name||' rebuild online'; Execute immediate v_sql; V_sql:='ALTER INDEX '||x.index_name||' logging'; Execute immediate v_sql; V_sql:='ALTER INDEX '||x.index_name||' noparallel'; Execute immediate v_sql; Dbms_output.put_line('rebuild index:'||x.index_name || ' complete at:'||sysdate); End LOOP; Dbms_output.put_line('rebuild indexes complete at:'||sysdate); -- 2. analyze table Dbms_output.put_line('analyze table:'||v_tableName || ' start at:'||sysdate); dbms_stats.gather_table_stats(ownname => 'SHAPE',tabname => v_tableName,estimate_percent => 10,method_opt=> 'for all indexed columns',cascade=>TRUE,granularity=>'ALL'); Dbms_output.put_line('analyze table:'||v_tableName || ' complete at:'||sysdate); END LOOP; Dbms_output.put_line('REBUILD_INDEX_JOB for ' || JOB_NAME || ' complete at:'||sysdate); EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20002,SQLCODE||SQLERRM); END; / spool off
4. 按照1中的步骤,重新分析表并拿到相关空间占用信息。
注意:无论Reorg成功或者失败,都要检查一下是不是所有的Index都VALID的。
select * from user_indexes where status != 'VALID';
相关推荐
3-7 Large buffer pool may slow down LOAD and REORG 3-8 Consider multiple table space containers 4. Tables and Index Design 4-1 Considerations for SEQUENCE and IDENTITY columns 4-2 First column ...
DB2与ORACLE常用语句对照,常用命令,语法格式
pg_reorg可以在不保留任何锁的情况下重新组织PostgreSQL数据库上的表,以便您可以检索或更新正在重新组织的表中的行。 开发此模块是为了更好地替代CLUSTER和VACUUM FULL。 ------- pg_reorg位于pgfoundry,但是已经...
db2 中对于出现死锁或锁超时的解决方案
悠闲的老虎我从 Mean Machine 中学到的制作一个宁静的应用程序
有关示例用法,请参见index.spec.ts 。用法等待将其设置为实际可用的包!如何在您的机器上运行此仓库克隆仓库并npm install 使用npm start启动两个geth节点使用npm test运行测试,这将在node-2中触发重组! # ...
一个完整的REORG表的过程应该是由下面的步骤组成的: RUNSTATS -> REORGCHK -> REORG -> RUNSTATS -> BIND或REBIND 0 执行下面命令前要先连接数据库 1 RUNSTATS 由于在第二步中REORGCHK时可以对指定的表进行...
DB2数据库优化针对数据库的runstat(运行统计)和reorg(重组)进行数据库优化
is a script to reorganize the data to match the rest of the test scripts. cd to /users/me/ISRI-OCRtk or wherever 3, B, M and N ended up and run /blah/blah/tesseract-ocr/testing/reorgdata.sh 3B ...
TensorRT-Plugin实现之reorgPlugin算子实现_cuda_TRT8
FreeMe是一种轻量级的电子邮件过滤和重组工具,用于减少混乱并突出显示感兴趣的消息。 它旨在允许多个管理员指定用于处理根电子邮件的单独规则,但也可以在单用户模式下使用。
基于FPGA的YOLOv2加速器设计与优化 根据对YOLOv2网络的分析,除路由层外,大部分层都是串行处理的。路由层可以通过预先设置一个特定的地址来实现。 从加速器的角度来看,需要做的工作就是按顺序与内存进行交互(读取...
与和不同,它可以在线工作,而在处理过程中无需在已处理表上持有排他锁。 pg_repack的启动效率很高,其性能可与直接使用CLUSTER媲美。 请检查文档(在doc目录中或)以获取安装和使用说明。pg_reorg呢? pg_repack是...
第7周 DB2性能优化:锁机制深入解析,包括并发、隔离级、锁概念、DB2与Oracle锁机制对比等。 第8周 DB2性能优化:索引调优,包括索引的工作机制、索引设计与性能、索引设计向导等。 第9周 DB2性能优化:SQL语句调优...
YOLOv2pytorch版本实现,可以运行结果进行目标检测等多种方法
ReOrg工具 一组用于在使用的工具。 是org文档的主要解析器。 非常在制品。 工具 创建的原因绑定的主要血肉。 获取即将发生的事件的通知。 我通过每15分钟执行一次的systemd守护程序来运行它。 显示(有时可能)...
mp3reorg是一个命令行实用程序,它使用每个音乐文件中包含的ID3标签信息来重新组织.mp3文件的目录结构的布局。
无论哪种方式,请包括以下内容: 伪造版纹理包大小材质包版本所有其他已安装的纹理包的列表已安装的mod列表有关如何产生问题的说明任何其他有用的信息学分艺术品最初的Big Reactors补丁(如上链接)由viesiu,
DB2 日常维护指南,第 3 部分 摘自IBM官网 检查是否需要运行 runstats 和 reorg
db2 reorg table ydd db2 runstats on table ydd with distribution and indexes all 13.导出表数据 db2 export to c:\dftz.txt of del select * from dftz db2 export to c:\dftz.ixf of ixf select * from ...