Home  >  Article  >  Database  >  Oracle数据库字典表优化小技巧

Oracle数据库字典表优化小技巧

WBOY
WBOYOriginal
2016-06-07 17:10:19935browse

字典表一般是比较常用的,可以设置这些表使用keep池。 先分析一下方案中的字典表,以便计算空间,简单起见,所有表都分析一下,调

一、
字典表一般是比较常用的,可以设置这些表使用keep池。
先分析一下方案中的字典表,以便计算空间,简单起见,所有表都分析一下,调用存储过程:
dbms_stats.gather_schema_stats(ownname=>'Schema名称')
计算一下所需的空间:
select sum(blocks)*8 from user_tables where name like 'DICT\_%' escape '\';
注:8是数据块的大小,8k,有的是4k。假定字典表是以DICT_开头的表。
得到所需空间的大小,,单位为k,根据统计结果设置一下keep池的大小。keep池默认是0,不启用。
alter system set db_keep_cache_size=80m;

二、
一般系统里的字典表都是比较稳定的,不常修改的,因此可以设置pctfree为0,可节省空间、提高访问速度。

针对以上两个优化思路,写了个简单的存储过程,仅在测试库上测试了一下,如果数据量巨大、存储空间紧张,请谨慎使用。
CREATE OR REPLACE procedure KeepDictTab is
/******************************************************************************
2012-01-04设置小表的pctfree为0、且使用keep池,提高效率
******************************************************************************/
begin
    for rec_tab in (select table_name from user_tables where table_name like 'DICT\_%' escape '\') loop
        execute immediate 'alter table ' || rec_tab.table_name ||' pctfree 0 storage (buffer_pool keep)';
        execute immediate 'alter table ' || rec_tab.table_name || ' move tablespace tbs2';
        --切换表空间,可使用新存储特性保存数据,切换后,重建一下索引,不然移不回来了。
        for rec_idx in (select index_name from user_indexes where table_name =rec_tab.table_name) loop
            execute immediate 'alter index '||rec_idx.index_name ||' rebuild';
        end loop;
        --切换回原来的表空间,再重建一下索引       
        execute immediate 'alter table ' || rec_tab.table_name || ' move tablespace tbs1';
        for rec_idx in (select index_name from user_indexes where table_name =rec_tab.table_name) loop
            execute immediate 'alter index '||rec_idx.index_name ||' rebuild';
        end loop;
        --分析表
        execute immediate 'analyze table ' || rec_tab.table_name || ' estimate statistics';
    end loop;

    for rec_idx in (select index_name from user_indexes where table_name like 'DICT\_%' escape '\') loop
        --分析相关的索引
        execute immediate 'analyze index '||rec_idx.index_name ||' estimate statistics';
    end loop;
end KeepDictTab;
/

设置完成后,可以用执行计划看一下,读取的数据块有所减少,COST有所降低、速度有一点点儿变快。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn