[20180814]慎用查看表压缩率脚本.txt
[20180814]慎用查看表压缩率脚本.txt
--//最近看exadata方面书籍,书中提供1个脚本,查看某些表采用那些压缩模式压缩比能达到多少.
--//通过调用DBMS_COMPRESSION.get_compression_ratio确定压缩比.例子如下:
--//测试版本11.2.0.4.
declare
blockct_comp number;
blockct_uncomp number;
rows_comp number;
rows_uncomp number;
comp_rat number;
comp_type varchar2(40);
begin
dbms_compression.get_compression_ratio('&&tblspc','&&ownr','&&tblname',null, dbms_compression.comp_for_oltp, blockct_comp, blockct_uncomp,rows_comp,rows_uncomp, comp_rat, comp_type);
dbms_output.put_line('Compression type: '||comp_type||' Compression ratio (est):'||comp_rat);
dbms_compression.get_compression_ratio('&&tblspc','&&ownr','&&tblname',null, dbms_compression.comp_for_query_low, blockct_comp, blockct_uncomp,rows_comp,rows_uncomp, comp_rat, comp_type);
dbms_output.put_line('Compression type: '||comp_type||' Compression ratio (est):'||comp_rat);
dbms_compression.get_compression_ratio('&&tblspc','&&ownr','&&tblname',null, dbms_compression.comp_for_query_high, blockct_comp, blockct_uncomp,rows_comp,rows_uncomp, comp_rat, comp_type);
dbms_output.put_line('Compression type: '||comp_type||' Compression ratio (est):'||comp_rat);
dbms_compression.get_compression_ratio('&&tblspc','&&ownr','&&tblname',null, dbms_compression.comp_for_archive_low, blockct_comp, blockct_uncomp,rows_comp,rows_uncomp, comp_rat, comp_type);
dbms_output.put_line('Compression type: '||comp_type||' Compression ratio (est):'||comp_rat);
dbms_compression.get_compression_ratio('&&tblspc','&&ownr','&&tblname',null, dbms_compression.comp_for_archive_high,blockct_comp, blockct_uncomp,rows_comp,rows_uncomp, comp_rat, comp_type);
dbms_output.put_line('Compression type: '||comp_type||' Compression ratio (est):'||comp_rat);
end;
/
--//好奇心我想看看生产系统一张大表能达到多少.我执行上面的脚本,结果等大约2-3分钟没有结果出来,我马上中断处理.
--//我当时想既然大表可能分析数据量大,换1个点的表看看.
--//结果执行后包如下错误:
ERROR at line 1:
ORA-20000: YOU CAN NOT TRUNCATE or DROP CMP3$97116 TABLE!
ORA-06512: at line 6
ORA-06512: at "SYS.PRVT_COMPRESSION", line 1136
ORA-06512: at "SYS.PRVT_COMPRESSION", line 1114
ORA-20000: YOU CAN NOT TRUNCATE or DROP CMP1$97116 TABLE!
ORA-06512: at "SYS.DBMS_COMPRESSION", line 214
ORA-06512: at line 9
--//BTW:我们生产系统有系统触发器,禁止用户drop和truncate表.这样导致脚本运行报错.
--//我看了一下CMP3$97116,CMP1$97116表结果,和分析表结构一致.
CREATE TABLE xxxxxx_yyy.CMP4$97116
(
ZYH NUMBER(18) NOT NULL,
....
YB_DBZ VARCHAR2(4 BYTE)
)
TABLESPACE xxxxxx_yyy
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOLOGGING
COMPRESS FOR OLTP
~~~~~~~~~~~~~~~
NOCACHE
NOPARALLEL
MONITORING;
--//可以看出DBMS_COMPRESSION.get_compression_ratio操作很简单,先建立与分析表一样的表结构以及对应压缩模式的表,然后
--//导入数据后比较分析压缩比.
--//这样要耗费大量表空间与资源做这个工作,在生产系统要小心谨慎.
--//我事后认真看了<深入理解ORACLE Exadata> P98页.而是讲样本数据插入一个临时表中.同时压缩版本的临时表也被创建,比较压缩
--//版本和非压缩版本的大小就可以得到压缩率.
--//(注:我看到的不是临时表,而是真实的表,看上面的表定义.或许作者理解的临时表非我理解的临时表)
--//我不知道取样比例是多少,总之在生产系统执行该脚本还是要小心.
--//另外书P101提到 压缩助手的一大亮点是能够在非exadata平台上运行,在真正迁移数据到exadata平台之前,它能够提供足够的信息
--//帮助你做出合理的选择.这么讲非exadata平台还是能够建立hcc压缩模式的相关数据,只不过你不能查看.
--//我曾经在dg上查看压缩表信息,链接[20150727]exadata压缩HCC与dataguard.txt=>http://blog.itpub.net/267265/viewspace-1753362/
XXXX@zzzzdg2> select * from t where rownum<=1;
select * from t where rownum<=1
*
ERROR at line 1:
ORA-64307: Exadata Hybrid Columnar Compression is not supported for tablespaces on this storage type
--//在家里测试的结果.
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
create table t as select * from all_objects ;
--//反复插入,提示要大于1000000rows才可以.
SCOTT@test01p> select count(*) from t;
COUNT(*)
----------
1437952
--//占用192M.
Compression type: "Compress Advanced" Compression ratio (est):3.5
Compression Advisor self-check validation successful. select count(*) on both Uncompressed and EHCC Compressed format = 1000001 rows
Compression type: "Compress Query Low" Compression ratio (est):8.6
Compression Advisor self-check validation successful. select count(*) on both Uncompressed and EHCC Compressed format = 1000001 rows
Compression type: "Compress Query High" Compression ratio (est):16.3
Compression Advisor self-check validation successful. select count(*) on both Uncompressed and EHCC Compressed format = 1000001 rows
Compression type: "Compress Archive Low" Compression ratio (est):16.6
Compression Advisor self-check validation successful. select count(*) on both Uncompressed and EHCC Compressed format = 1000001 rows
Compression type: "Compress Archive High" Compression ratio (est):21.7
PL/SQL procedure successfully completed.
--//如果单独执行如下:
--//在sys用户下建立触发器禁止drop表.
CREATE OR REPLACE TRIGGER SYS.TRI_PREVENT_DROP_TRUNCATE
BEFORE TRUNCATE OR DROP ON DATABASE
BEGIN
IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_owner = 'SCOTT' and ORA_DICT_OBJ_NAME not like 'SYS\_JOURNAL\_%' escape '\'
THEN
raise_application_error (-20000, 'YOU CAN NOT TRUNCATE or DROP ' || ora_dict_obj_name || ' TABLE!');
END IF;
END;
/
--//如果单独执行如下:
/* Formatted on 2018/8/14 8:49:08 (QP5 v5.269.14213.34769) */
set serveroutput on
DECLARE
blockct_comp NUMBER;
blockct_uncomp NUMBER;
rows_comp NUMBER;
rows_uncomp NUMBER;
comp_rat NUMBER;
comp_type VARCHAR2 (40);
BEGIN
DBMS_COMPRESSION.get_compression_ratio
(
'&&tblspc'
,'&&ownr'
,'&&tblname'
,NULL
,DBMS_COMPRESSION.comp_archive_high
,blockct_comp
,blockct_uncomp
,rows_comp
,rows_uncomp
,comp_rat
,comp_type
);
DBMS_OUTPUT.put_line
(
'Compression type: '
|| comp_type
|| ' Compression ratio (est):'
|| comp_rat
);
END;
/
--//注:12c参数DBMS_COMPRESSION.comp_archive_high与11g不同.11g写成DBMS_COMPRESSION.comp_for_archive_high
--//由于触发器建立,报错如下:
SCOTT@test01p> @ exadata/comp_radio12x.sql
old 11: '&&tblspc'
new 11: 'USERS'
old 12: ,'&&ownr'
new 12: ,'SCOTT'
old 13: ,'&&tblname'
new 13: ,'T'
Compression Advisor self-check validation successful. select count(*) on both Uncompressed and EHCC Compressed format = 1000001 rows
DECLARE
*
ERROR at line 1:
ORA-20000: YOU CAN NOT TRUNCATE or DROP CMP1$107873 TABLE!
ORA-06512: at line 4
ORA-06512: at "SYS.PRVT_COMPRESSION", line 2134
ORA-06512: at "SYS.PRVT_COMPRESSION", line 1108
ORA-20000: YOU CAN NOT TRUNCATE or DROP CMP1$107873 TABLE!
ORA-06512: at "SYS.PRVT_COMPRESSION", line 237
ORA-06512: at "SYS.DBMS_COMPRESSION", line 215
ORA-06512: at line 9
SCOTT@test01p> select owner,object_name,CREATED from dba_objects where owner=user and object_name like 'CMP%';
OWNER OBJECT_NAME CREATED
-------------------- -------------------- -------------------
SCOTT CMP4$107873 2018-08-14 20:58:05
SCOTT CMP3$107873 2018-08-14 20:57:57
SCOTT CMP2$107873 2018-08-14 20:57:51
SCOTT CMP1$107873 2018-08-14 20:57:48
--//这次测试建立4张表.
SCOTT@test01p> select * from CMP4$107873;
select * from CMP4$107873
*
ERROR at line 1:
ORA-64307: Exadata Hybrid Columnar Compression is not supported for tablespaces on this storage type
--//可以发现oracle建立hcc表在非exadata是可行的,但是里面的数据不能看.
[20180814]慎用查看表压缩率脚本.txt的更多相关文章
- [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE. Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.其实, ...
- ORACLE查看表空间对象
ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME AS TABLESPACE_NAME ...
- Oracle 查看表空间大小及其扩展
在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.系统中默认创建的几个表空间:S ...
- MySQL分库分表备份脚本
MySQL分库备份脚本 #脚本详细内容 [root@db02 scripts]# cat /server/scripts/Store_backup.sh #!/bin/sh MYUSER=root M ...
- [20190423]oradebug peek测试脚本.txt
[20190423]oradebug peek测试脚本.txt --//工作测试需要写一个oradebug peek测试脚本,不断看某个区域内存地址的值. 1.环境: SCOTT@book> @ ...
- hive表信息查询:查看表结构、表操作等--转
原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hiv ...
- (转)企业Shell实战-MySQL分库分表备份脚本
本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.htm ...
- hive表信息查询:查看表结构、表操作等
转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tabl ...
- [20190510]快速建立执行脚本.txt
[20190510]快速建立执行脚本.txt --//上午在测试建立表空间备份时,浪费一点点时间.脚本如下:$ cat d10.sqldrop tablespace t01 including con ...
随机推荐
- iOS逆向开发(5):微信强制升级的突破 | 多开 | 微信5.0
接下来的几篇文章,小程以微信为例,实战地演示一下:如何注入iOS的APP.其中使用到的知识,基本在前面的文章中都有介绍到. 小白:小程,我想用回旧版本的微信! 小程:为什么要用旧版本微信呢? 小白:你 ...
- 敏感词汇过滤DFA算法
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- 第1章 ssh命令和SSH服务详解
基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种 ...
- 深入MySQL复制(一)
本文非常详细地介绍MySQL复制相关的内容,包括基本概念.复制原理.如何配置不同类型的复制(传统复制)等等.在此文章之后,还有几篇文章分别介绍GTID复制.半同步复制.实现MySQL的动静分离,以及M ...
- [转]Angular引入第三方库
本文转自: https://blog.csdn.net/yuzhiqiang_1993/article/details/71215232 版权声明:本文为博主原创文章,转载请注明地址.如果文中有什么纰 ...
- 从零开始学安全(二十二)●PHP日期date参数表
$date=new DateTime(); echo $date->format("Y-m-d h:i:s");
- [angularjs] angularjs系列笔记(四)过滤器
过滤器可以使用一个管道字符(|)添加到表达式和指令中,这不就是模板函数吗 <body> <div ng-app="Home"> <div ng-con ...
- python同步、互斥锁、死锁
目录 同步 同步的概念 解决线程同时修改全局变量的方式 互斥锁 使用互斥锁完成2个线程对同一个全局变量各加9999999 次的操作 上锁解锁过程 总结 死锁 避免死锁 同步 同步的概念 同步就是协同步 ...
- Python中的特殊属性与方法
模块的特殊属性 __doc__ 模块的说明文档 __all__ 指明模块希望被使用的属性.类和方法 __file__ 模块所在路径 类的特殊属性 __slots__ 限制类的实例允许添加的属性,是一个 ...
- 1; XHTML 基本知识
万维网是我们这个时代最重要的信息传播手段.几乎任何人都可以创建自己的网站,然后把它发布在因特网上.一些网页属于企业,提供销售服务:另一些网页属于个人,用来分享信息.你可以自己决定网页的内容和风格.所有 ...