扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在数据量变的很大的情况下,可以考虑表压缩,减少磁盘的存储,减少buffer cache的消耗,加快查询的速度,压缩需要在数据加载和dml的时候消耗一些cpu.表压缩对于应用是透明的。
创新互联专注于松原企业网站建设,响应式网站设计,电子商务商城网站建设。松原网站建设公司,为松原等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
你可以在表空间,表或分区级别指定压缩,如果在表空间级别指定压缩,那么这个表空间中的所有表默认都是压缩的。
压缩会发生在数据插入,更新或批量加载到表时。有几种类型的压缩。基本的,oltp的,dss的,归档的。他们的cpu消耗见文档。
当使用基本压缩,数据仓库压缩,或归档压缩的时候,压缩仅仅是在批量加载到一个表的时候发生。当你使用了oltp压缩,压缩发生在数据插入,更新,批量加载。
如果你使用了alter table命令让表启用压缩,那么对于已存在的数据是不受影响的,只有在启用压缩后的插入,或更新会受影响。也可以使用ALTER TABLE…NOCOMPRESS将一个表设置成非压缩,对于已经的压缩的表是没有影响的,压缩的数据还是压缩的,只是新插入的数据是不被压缩。
创建一个oltp压缩类型的表
CREATE TABLE orders … COMPRESS FOR OLTP;
如果你不指定压缩的类型,那么默认的情况下是基本压缩类型。下面的2个语句是等价的。
CREATE TABLE sales_history … COMPRESS BASIC;
CREATE TABLE sales_history … COMPRESS;
下面的表是一个数据仓库压缩类型的表,对于经常查询,并且没有dml的表适用。
CREATE TABLE sales_history … COMPRESS FOR QUERY;
创建一个归档压缩类型的表
CREATE TABLE sales_history … COMPRESS FOR ARCHIVE;
表可以包含压缩和非压缩的分区,并且不同的分区的压缩的类型可以是不同的,如果在分区上指定的压缩的类型与表上指定的压缩的类型不同,那么分区上的优先。
查看表是否是压缩的,及分区是否是压缩的。
SQL SELECT table_name, compression, compress_for FROM user_tables;
SELECT table_name, partition_name, compression,compress_for
FROM user_tab_partitions;
查看表中的行是什么压缩类型
SELECT DECODE(DBMS_COMPRESSION.GET_COMPRESSION_TYPE(
ownname = ‘HR’,
tabname = ‘EMPLOYEES’,
row_id = ‘AAAVEIAAGAAAABTAAD’),
1, ‘No Compression’,
2, ‘Basic or OLTP Compression’,
4, ‘Hybrid Columnar Compression for Query High’,
8, ‘Hybrid Columnar Compression for Query Low’,
16, ‘Hybrid Columnar Compression for Archive High’,
32, ‘Hybrid Columnar Compression for Archive Low’,
‘Unknown Compression Type’) compression_type
FROM DUAL;
修改压缩的级别
如果表是分区表,使用在线重定义可以修改表的压缩级别。如果表是分分区表,那么可以使用alter table ..move.. compress for语句修改表的压缩级别,这个语句会阻塞dml操作。
对于压缩表的限制:
1基本压缩,你不能为添加的列指定默认的值。删除列是不被支持的。
2oltp压缩,如果要添加一个带默认值的列,那么需要指定not null,可以删除列,但是数据只是在内部做了一个不被使用的标记而已。
3在线段收缩是不被支持的。
4上面的压缩的方式不适合于lobs类型,他们有自己的压缩方式。
5基本压缩类型的表的pct_free参数自动的设置成0.
在上面的描述中可以看到对于基本类型的压缩,没有使用直接路径插入的行及更新的行是不会被压缩的。对于我们的oltp系统基本是没有用处的,只测试下oltp的压缩方式,这种方式对于没有使用直接路径插入的行及被更新的行都会压缩。
SQL select count(*) from baixyu2;
COUNT(*)
22096384
SQL set serveroutput on
SQL exec show_space(‘BAIXYU2’,’T’,’AUTO’);
Total Blocks……………………….334336
Total Bytes………………………..2738880512
Unused Blocks………………………1916
Unused Bytes……………………….15695872
Last Used Ext FileId………………..4
Last Used Ext BlockId……………….671872
Last Used Block…………………….6276
CREATE TABLE baixyu3 COMPRESS FOR OLTP as select * from baixyu2;
SQL exec show_space(‘BAIXYU3’,’T’,’AUTO’);
Total Blocks……………………….107520
Total Bytes………………………..880803840
Unused Blocks………………………112
Unused Bytes……………………….917504
Last Used Ext FileId………………..4
Last Used Ext BlockId……………….116224
Last Used Block…………………….912
看到使用的块由33w下降到10w。压缩效果还是不错,但是是否使用还要结果上面的限制来根据实际情况评估。
1、在需要储存备份的硬盘中建文件夹如:databasebackup ;
2、拷贝exp.bat到 databasebackup 中;(把下列语句保存成exp.bat文件)
set filename=c:\databasebackup\%date:~0,10%
exp.exe system/system@testdb wner=ewms file=%filename%.dmp log=%filename%.log
rar a %filename%.zip %filename%.dmp %filename%.log
del %filename%.dmp
del %filename%.log
3、从数据库系统C:\Program Files\WinRAR中拷贝Rar.exe文件到 C:\WINDOWS\system32中;
4、执行系统定时任务。
Oracle提供了一下几种类型的表压缩方法:
1、Basic Compression:压缩等级High,CPU开销较小
2、OLTP Compression:压缩等级High,CPU开销较小
3、Warehouse Compression:压缩等级Higher,CPU开
销较大(取决于压缩参数是Low还是High,默认是HIGH)
4、Archive Compression:压缩等级Highest,CPU开销很大
(取决于压缩参数是Low还是High,默认是LOW)
当使用Basic Compression,warehouse
Compression,Archive Compression类型的压缩时,
尽在发生批量数据导入时才会执行压缩。
OLTP Compression被用于联机事务处理系统,
可以对任意的SQL操作执行数据压缩。
Warehouse Compression和Archive Compression可
以获得很高的压缩等级,因为它们采用了Hybrid Columnar
(混合列)压缩技术,Hybrid Columnar采用一种改良的列
的存储形式替代一行为主的存储形式。
Hybird Columnar技术允许将相同的数据存储在一起,
提高了压缩算法的效率。当使用混合列压缩算法时,
将导致更多的CPU开销,因此这种压缩技术适用于更
新不频繁的数据。
之前未压缩的表可以通过alter table ... compression ...
语句进行压缩。
在这种情况下,压缩启用前的记录不会被压缩,
只有新插入或更新的数据才会进行压缩。
同样,通过alter table ... nocompression ...语句解除对一个表的压缩,
表内已压缩的数据还会继续保持压缩的状态,新插入的数据就不再被压缩。
表压缩语法:
CREATE TABLE table_name (column_defination...)
COMPRESS FOR [OLTP]|[QUERY|ARCHIVE
[LOW|HIGH]];
ALTER TABLE table_name COMPRESS FOR [OLTP]|
[QUERY|ARCHIVE [LOW|HIGH]];
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流