免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10279 | 回复: 7
打印 上一主题 下一主题

ASE大讲堂 - 数据压缩 (1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-18 15:10 |只看该作者 |倒序浏览
本帖最后由 sybman 于 2013-08-18 15:35 编辑

好像论坛的兄弟们用的ASE版本都不是很高, 可能对新版本ase中的一些新性能能不是很了解, 其实最近这些年
ASE中已经增加了不少很实用的新功能,打算开一系列的帖子,跟大家分享一些我所了解到的这方面的内容,
方便大家更多地了解ASE,更好地使用ASE。

此帖的主要目的是技术交流,不管你是否听说,还是使用过这些功能,都欢迎‘到此一游’。



那就先从SAP & Sybase 成为一家后第一个非常重要的release -- 15.7开始吧...



出处: http://blog.chinaunix.net/uid-26548424-id-3853670.html



SAP Sybase ASE 15.7中一个重量级的功能就是压缩,随着用户数据的爆炸性增长, 压缩方案能够有效减少磁盘的使用量,
从而帮助用户减少成本。

ASE15.7提供的压缩方案包括如下两种,

  1) data compression。对常用数据类型的压缩,包括int,char/varchar等。
  2) LOB compresion。对大数据类型的压缩,包括TEXT/IMAGE/UNITEXT三种类型。

这里先向介绍一下LOB compression,其余部分会在后续的文章中介绍。

LOB,Large OBject的简写,在ASE中主要指TEXT/IMAGE/UNITEXT三种数据类型,用于存储一些非结构性的数据,比如
长文本,图片等,每行数据中的单个TEXT/IMAGE/UNITEXT列最多可存储2G的数据。如果数据库中有大量的此类数据,
那么数据量可想而知,此时使用LOB compresison就显得尤为必需。

LOB compression使用了两种压缩算法,共向用户提供如下9种压缩级别,这样用户可以有足够的灵活性根据自己数据的选择
适合自己的压缩级别

  1 - 9
  100 - 101 (适合小文本)

压缩级别越高,压缩率越高,CPU使用率也相应地高一些。LOB数据的压缩和解压缩对用户是透明的,用户只要定义了相应的
压缩级别, 数据插入和更改的时候数据会被自动压缩并存在磁盘上,查询数据的时候系统自动解压并返回给用户。


下面介绍一下如何使用LOB compression。

首先,用户必须打开compression配置, 1表示打开,0表示关闭

  sp_configure “enable compression”,  1 | 0

之后,就可以定义LOB compression了。ASE提供了多个层面的compression定义,包括db/table/column,用户可以根据自己需要
选择方便的方法。


定义db级别的LOB compression

一旦数据库定义了此类级别的LOB compression,所有此数据库中新创建的包含TEXT/IMAGE/UNITEXT类型的表会自动继承
LOB compression,也就是说,有新创建的TEXT/IMAGE/UNITEXT都是压缩的。

CREATE DATABASE <dbname>
   […]
   WITH DML_LOGGING = { minimal | full },
        DURABILITY = { no_recovery | at_shutdown | full },
        ...,
        LOB_COMPRESSION = comp_level

  

   comp_level 可以是 1 - 9, 100 - 101,0(关闭压缩)

除了创建新数据库,用户也可以给现有的数据库添加LOB compression, 这个操作并不会影响老的数据表以及LOB数据,也
就是说,即使给数据库增加了LOB compression,这个设置只对此操作之后的LOB数据生效,老数据依然是不压缩的。

  alter database dbname set lob_compression = comp_level


定义table/column级别的LOB compression

用户可以有选择性的决定一个表中哪些列是压缩的,哪些是不需要压缩的

CREATE TABLE [database.[owner].]table_name
( column_name datatype [...] [ COMPRESSED = comp_level | NOT COMPRESSED ]
   [ , column_name ... ]
)
[ LOCK { DATAROWS | DATAPAGES | ALLPAGES } ]
...
[ WITH {  MAX_ROWS_PER_PAGE = num_rows
          [ , ... ]
          [ , LOB_COMPRESSION = comp_level ]
       }
]

同上,用户也可以给现有的表添加LOB compression,并且LOB compression只对添加之后插入和更改的数据有效,表中的老
数据依然保持未压缩的状态。

    alter table table_name set lob_compression = comp_level

除了以上的SQL扩展,为了方便用户随时更改LOB compression的配置,ASE也提供了其他的sql语句支持

改变列级别的 LOB compression

    alter table table_name modify lob_column compressed = comp_level
    alter table table_name modify lob_column not compressed

增加新的TEXT/IMAGE/UNITEXT column

     alter table table_name add new_lob_column_def compressed = comp_level
     alter table table_name add new_lob_column_def not compressed

论坛徽章:
0
2 [报告]
发表于 2013-08-19 09:58 |只看该作者
先顶后看, 我还在用12.5

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2013-08-19 13:42 |只看该作者
写得很好.这个 compression 功能,前阵子自己也测了一下,压缩比和sql server差不多. 只不过,压缩以后再读,要慢一些了.

论坛徽章:
0
4 [报告]
发表于 2013-08-19 21:05 |只看该作者
多谢兄弟们捧场。

Eisen,你用的应该是sql server的data compression功能,据我所知,它目前不支持对text image类型的压缩。

论坛徽章:
0
5 [报告]
发表于 2013-08-20 11:11 |只看该作者
感謝分享
另外請教一下,有沒有對現有數據進行壓縮的功能呢,還是只能導出再導入?

论坛徽章:
0
6 [报告]
发表于 2013-08-20 12:57 |只看该作者
可以压缩现有的TEXT/IMAGE/UNITEXT数据,操作方法

  -- define compression
  alter table mytab set lob_compression = compression_level
  go
  
  -- This will compress the existing data, then discard the old data
  reorg rebuild mytab
  go

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
7 [报告]
发表于 2013-08-23 07:43 |只看该作者
sybman 发表于 2013-08-19 21:05
多谢兄弟们捧场。

Eisen,你用的应该是sql server的data compression功能,据我所知,它目前不支持对tex ...


哦.这个倒真是没注意到...  :wink:

论坛徽章:
0
8 [报告]
发表于 2013-12-05 11:03 |只看该作者
可以压缩现有的TEXT/IMAGE/UNITEXT数据,操作方法

  -- define compression
  alter table mytab set lob_compression = compression_level
  go
  
  -- This will compress the existing data, then discard the old data
  reorg rebuild mytab
  go

-----
reorg 对于text/image字段应该是无效的,正确的做法应该是
update  <table_name>  set   <image_column> =  <image_column>

另外,对于data compression而言, 粒度可以到partition level, 对于 partition by range ( p1 < "2000/01/01") 之类的scenario  还是很实用的.


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP