Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303755
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1911
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-25 09:22
个人简介

数据库高级专家。国内顶尖数据专家,出版数据专著多部,发表数据论文多篇,近年参与多项金融、国防、电信等大型数据工程。 http://www.china-pub.com/main/sale/renwu/luminary.asp?id=9608

文章分类
文章存档

2015年(2)

2013年(16)

我的朋友

分类: DB2/Informix

2013-06-13 10:54:41


    在各种行业数据与日俱增的当今,对于存储数据所用设备的要求和性能也不断提高,需要设备容量越来越大,效率越来越高。随着技术的不断进步和发展,为了满足这些需求,存储设备的种类不断增加,各类存储设备也不断更新换代。在已有的存储设备容量变得越来越大、速度变得越来越快的同时,各种新的、更快的存储设备也不断出现。旧设备往往拥有较大容量,但是读取访问速度较慢,价格较低;新设备一般情况下容量有限,访问速度快,同时价格较高。在新设备被不断采用的过程中,由于考虑到性价比等因素,旧的设备还不能立刻全部被替换,因此,用户的系统中多种不同存储设备共存的情况非常常见。那么如何充分的、有差别的利用这些不同的设备,使它们的性能发挥到极致,成为数据库管理员的一个挑战。
    为了给数据库管理员提供一个更加便捷、更加有效的方式来解决这个问题,刚刚发布的 DB2 LUW V10.1 中引入了一个新特性——多温度存储管理(Multiple Temperature Storage Management),这一方案是对原有自动存储管理(Automatic Storage Management)的扩展,用户可以通过该特性,将访问频度不同的数据存放在不同类型的设备上,比如,将经常访问的数据放在较快的设备上,不经常访问的数据放在较慢的设备上,并且在数据访问频度发生变化是,能够方便的在不同存储设备之间移动这些数据,使得数据的访问效率和存储设备的使用效率都达到最优状态。
     刚刚提到,多温度存储管理是对 DB2 原有的自动存储管理特性的扩展,要了解多温度存储管理,就必须先从自动存储管理这一功能开始。众所周知,存放用户数据的表,实际上是将数据存放在某个表空间(Tablespace)中,而表空间通过容器(Container)与实际的存储设备或者文件系统关联。在 DB2 中,按照容器管理的类型来分,表空间可以被分为三类,而自动存储管理就是 DB2 中与系统管理(System Managed Space,SMS)表空间、数据库管理(System Managed Space,DMS)表空间并列的一种表空间管理方式。
系统管理表空间
系统管理(System Managed Space,SMS)表空间是由带有 MANAGE BY SYSTEM 子句的 CREATE TABLESPACE 命令建立的表空间。顾名思义,系统管理表空间的容器是由文件系统来管理的,而不是数据库。用户只需指定表空间的容器为一系列目录,而表空间的大小无需用户来维护。在表空间建立之后,容器也不能够增加或者删除。随着表空间数据的不断增长,表空间也不断增长,当其中的一个容器被占满时,则认为该表空间已满。这一类型的表空间,通常具有较低的管理维护开销,但是同时性能不如数据库管理表空间好,因为由文件系统负责分配存储器,降低了数据页面连续的可能性,这时,某些类型的数据访问性能可能会受到影响。
数据库管理表空间
数据库管理(Database Managed Space,DMS)表空间是通过带有 MANAGE BY DATABASE 子句的 CREATE TABLESPACE 命令建立的表空间。数据库管理表空间的容器是由数据库管理的,而不是文件系统。数据库管理表空间的容器必须定义为文件或者设备,并且在建立时指定初始大小,是否允许其大小自动增长,以及每次增长的大小。在表空间创建后,用户可以根据需要添加或者删除容器,并且可以手动对容器大小进行扩展,直至到达文件系统的限制;也可以手动缩小容器,收回未被使用的空间。如果数据在各个容器之间的分布不均匀时,例如某一容器被数据填满,或者新添加了一个容器,可以对表空间中的数据进行重新平衡(REBALANCE)。对于设备容器而言,数据库管理表空间的数据页是连续的,这样在数据访问时能获得更好的性能。由此可见,相比系统管理表空间,数据库管理表空间需要更多的用户管理,但是其性能却比系统管理表空间更好。
自动管理表空间
从上文可以看出,系统管理表空间的用户管理较为简单,但是对于大数据量的表而言,数据访问性能可能不是最优;而数据库管理表空间则刚好相反,能够获得更高的数据访问性能,但是管理较为复杂。自动管理表空间的引入就是为了结合二者的优点,即既有系统管理表空间的易用性,也能获得数据库管理表空间的高性能。自动存储管理(Automatic Storage,AS)表空间是由带有 MANAGE BY AUTOMATIC STORAGE 子句的 CREATE TABLESPACE 命令建立的表空间。在定义自动管理表空间时,用户无需指定容器列表,数据库管理器会在于数据库相关联的存储路径下自动创建容器,数据在各个容器之间均匀分布,从而使每个容器的使用情况接近。用户可以通过删除或者减小容器来缩小表空间,也可以通过增加容器来扩大表空间。在增加容器之后,需要使用重新平衡命令来是其他容器中的部分数据移动到新的容器中,从而使各个容器的使用情况类似。而自动管理表空间的性能,是与数据库管理表空间接近的。关于自动管理表空间的更加详细特点和具体使用方法,请参考本文末尾“参考资源”部分中 DB2 V10.1 信息中心的相关内容。
从以上的简单介绍不难看出,自动管理表空间使用和管理较为简单,而性能也较高,因此,当前和今后的版本中,自动管理表空间是推荐用户使用的,而系统管理表空间不再被推荐使用,并且有可能在以后的某个版本中被移除。
自动管理表空间是 DB2 中表空间管理的方向,而本文要介绍的这一新特性,就是为了增强自动管理表空间这一特性而提出的。
多温度存储管理
自动管理表空间是在 DB2 LUW V8.2 FP9 引入的,是当前 DB2 中默认的表空间管理方式。启用了该管理方式表空间通过数据库管理器自动配置和管理数据存容器,兼顾了 DMS 的高性能和 SMS 的易用性。要使用自动管理存储,首先要在建立数据库时启用该功能(该功能在新的 DB2 版本中已经默认启用):


清单 1. 建立数据库时启用自动管理存储

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 CREATE DATABASE MYDB AUTOMATIC STORAGE YES\ 
       ON /dbpath1, /dbpath2 
 DB20000I  The CREATE DATABASE command completed successfully. 
           


在启用了自动存储管理之后,建立表空间可以指定由自动存储来管理,如清单 2 所示:


清单 2. 建立自动管理表空间

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 connect to MYDB  


   Database Connection Information 


 Database server        = DB2/LINUXX8664 10.1.0 
 SQL authorization ID   = LIUZHENFENG 
 Local database alias   = MYDB 


 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 CREATE TABLESPACE TBS1 MANAGED BY AUTOMATIC STORAGE 
 DB20000I  The SQL command completed successfully. 
           


在创建启用自动存储管理功能数据库的时候,需要指定一组存储路径,在随后创建自动管理表空间时,就无需指定表空间的容器了,数据库管理器将在这些存储路径下为该表空间均匀建立容器。回到本文开头提到的各种存储设备的差异,由于建立数据库时为自动存储管理只能定义一组存储路径,如果系统中有各种不类型的存储设备,就无法通过自动存储管理来在不同存储设备上建立不同的表空间。要实现这一目标,只能使用数据库管理表空间。
多温度存储管理的引入
在 DB2 LUW V10.1 中,为了解决这一问题,引入了多温度存储管理(Multiple Temperature Storage Management)特性。这一特性在为自动存储管理引入多组存储路径的同时,还允许为每个存储器组定义不同的温度属性,用“热”(Hot)来表示数据频繁被访问的存储器组,用“冷”(Cold)来表示数据偶尔被访问的存储器组。
通常来说,经常被访问的数据只是海量数据中的一小部分,比如刚刚产生的数据,对它们的访问要求越快越好,这类数据的温度被定义为“热”;海量的、不经常访问的通常是历史数据,仅仅在做统计报表之类的应用是会访问到它们,对这类数据的访问通常对访问时间不敏感,这类数据的温度被定义为“冷”。从存储设备方面来看,传统的或者旧的存储设备存储容量较大,访问速度较慢,成本相应较低,而新出现的存储设备通常容量较小,访问速度快,成本高。结合数据访问的需求和存储设备的特点,很自然地能够得出这样一个方案:把刚刚产生的、需要经常访问的、少量的数据存放在新的、较快的存储设备上,从而使访问这些数据的应用最快最及时地得到结果;而对于不经常访问的、海量的历史数据,将它们存放在较旧的、较慢的存储设备上,以降低存储成本。
图 1 中是一个例子。现在系统中有两类设备,两个 SSD 设备和三个通过 SAN 连接的网络存储设备。显而易见,SSD 是上文提到的速度较快的设备,而网络存储设备则是速度相对较低的设备。Expense 是一张较小的用户表,里面的数据经常被访问,因此它的数据被放在了 SSD 设备上;而 Sales 表则是一张较大的数据分区表,并且表中的数据访问频度不尽相同,这时候则可以将该表中需要经常访问的数据放在 SSD 设备上,而将不经常访问的数据放在网络存储设备上。


图 1. 多温度存储的简单例子

 
通过多温度存储管理这一新特性用户可以为数据库添加多个存储器组(Storage Group),并给每个存储器组定义相应的存储路径;在定义自动管理表空间时,指定表空间所属的存储器组。在表空间中数据的温度发生变化时,即数据从需要经常访问变为不需要经常访问,或者从不需要经常访问变为需要经常访问,用户可以将数据从一个存储器组移动到另一个存储器组中,并且移动过程中数据的可用性不受到影响。存储器组和表空间还带有优先级标签,这些标签可以给一些需要利用存储特征的工具使用,比如优化器;同时,工作负载管理器(Workload Manager,WLM)可以根据需要对不同优先级的应用选用不同的临时表空间,使得优先级高的应用所需的临时数据能够被放在较快的临时表空间上。
为了提供数据库中多个存储器组的支持,多温度存储管理引入了新的 CREATE STOGROUP 语句,并提供了两个参数来指定该存储器组所使用的容器的性能特征,即 OVERHEAD 和 DEVICE READ RATE,如清单 3 所示:


清单 3. CREATE STOGROUP 命令语法

 >-CREATE--STOGROUP--storagegroup-name--------------------------> 


      .-,--------------.      
      V                |      
 >--ON---'storage-path'-+---------------------------------------> 


 >--+----------------------------------+------------------------> 
   '-OVERHEAD--number-of-milliseconds-'      


 >--+-----------------------------------------------+-----------> 
   '-DEVICE READ RATE--number-megabytes-per-second-'      


 >--+--------------------------------+--------------------------> 
   '-DATA TAG--+-integer-constant-+-'      
               '-NONE-------------'        


 >--+----------------+----------------------------------------->< 
   '-SET AS DEFAULT-'      
           


OVERHEAD 这一参数指定 I/O 控制器的开销和磁盘寻道以及等待时间,该值用于确定查询优化时的 I/O 成本,单位是微秒,默认值是 6.725;通过 DEVICE READ RATE 能够指定设备每秒最大读取的数据量,单位是兆字节(MB),默认值是 100,同样的该惨输也是用于确定查询优化时的 I/O 陈本。此处仅简单介绍这两个参数,关于 CREATE STOGROUP 语句的详细语法,请参考本文末尾“参考资源”中的 DB2 LUW V10.1 信息中心。
多温度存储管理示例
多温度存储管理使用起来非常简单,总的来说就是根据系统中不同访问效率的存储设备建立不同的存储器组,建立相应的表空间,并根据表中数据访问频度和响应时间的需要,将其放在不同的表空间中,以达到访问效率和存储成本都最优的目的;在数据访问需求发生变化是,修改表空间至不同的存储器组,即可动态完成数据的移动。
比如,现在的用户场景是这样:要经常并迅速访问最近三个月的数据,三个月之前的数据很少被用到;有两类存储设备 SSD 和 SATA。
第一步,创建存储器组,如清单 4 所示:


清单 4. 创建存储器组

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 "CREATE STOGROUP sg_hot ON '/ssd/path1', '/ssd/path2'
         DEVICE READ RATE 300 OVERHEAD 3.725"
 DB20000I  The SQL command completed successfully. 


 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 "CREATE STOGROUP sg_cold ON '/hdd/path1', '/hdd/path2'
         DEVICE READ RATE 100 OVERHEAD 6.725"
 DB20000I  The SQL command completed successfully. 
           


第二步,创建表空间,并将表空间与存储器组相关联,如清单 5 所示:


清单 5. 创建表空间

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 CREATE TABLESPACE tbsp_2012q2 USING STOGROUP sg_hot 
 DB20000I  The SQL command completed successfully. 


 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 CREATE TABLESPACE tbsp_cold USING STOGROUP sg_cold 
 DB20000I  The SQL command completed successfully. 
           


第三步,定义数据分区表,将最近三个月的数据放在 SSD 设备上,三个月之前的数据放在 SATA 设备上,如清单 6 所示:


清单 6. 创建数据表

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 "CREATE TABLE sales (order_date DATE, order_id INT, cust_id BIGINT) 
 >      PARTITION BY RANGE (order_date) 
 >      (PART \"2012Q2\" STARTING ('2012-04-01') ENDING ('2012-06-30') in tbsp_2012q2, 
 >       PART \"2012Q1\" STARTING ('2012-01-01') ENDING ('2012-03-31') in tbsp_cold, 
 >       PART \"2011Q4\" STARTING ('2011-10-01') ENDING ('2011-12-31') in tbsp_cold, 
 >       PART \"2011Q3\" STARTING ('2011-07-01') ENDING ('2011-09-30') in tbsp_cold)"
 DB20000I  The SQL command completed successfully. 
           


第四步,在当前季度过去之后,将上一季度的数据从 SSD 设备移动到 SATA 设备上,从而使新的数据能够放在 SSD 设备上,如清单 7 所示:


清单 7. 修改表空间的存储器组

 [liuzhenfeng@db2igt] /home/liuzhenfeng 
 => db2 ALTER TABLESPACE tbsp_2012q2 USING STOGROUP sg_cold; 
 DB20000I  The SQL command completed successfully. 
           


总结
DB2 LUW V10.1 中的多温度存储管理特性,不仅为自动存储管理表空间提供了不同的存储器组供其选择,同时也可以对存储器组定义不同的“温度”标签,此温度标签可为其他系统工具提供性能参考,从而使得每种存储设备得到充分的利用,用户的应用能够更加高效地运行。在数据的温度发生变化时,用户可以动态将数据从一个存储器组中移动到另一个存储器猪中,而数据的可用性不受到影响。
阅读(4817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~