DB2支持的三种表空间SMS、DMS、DMS的自动存储

DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层。表空间在数据库中创建,表在表空间中创建。容器是一个物理存储设备。它可以由目录名、设备名或文件名标识。容器被分配给表空间。表空间可以跨许多容器(类似于Oracle中datafile的概念),这意味着可以突破操作系统对于一个容器可以包含的数据量的限制。DB2 支持三种表空间:

·         系统管理的空间(System-Managed Space,SMS)在这里,由操作系统的文件系统管理器分配和管理空间。在DB2 9 之前,如果不带任何参数创建数据库或表空间,就会导致所有表空间作为 SMS 对象创建。

·         数据库管理的空间(Database-Managed Space,DMS):在这里,由数据库管理程序控制存储空间。这种表空间本质上是一种特殊用途的文件系统实现,可以最好地满足数据库管理程序的需要。

·         DMS 的自动存储(Automatic Storage With DMS):自动存储实际上不是一种单独的表空间类型,而是一种处理DMS 存储的不同方式。DMS 容器需要比较多的维护,在 DB2 V8.2.2 中引入了自动存储,作为简化空间管理的方式。

SMS 表空间需要的维护非常少。但是,与 DMS 表空间相比,SMS 表空间提供的优化选项少而且性能不好。

SMS、DMS与自动存储

特性

SMS

DMS

自动存储

是否分段(Striping)?

默认类型

Version 8

Version 9

对象管理

操作系统

DB2

DB2

空间分配

按需增长/收缩

预先分配;大小可以收缩和增长,但是需要 DBA 干预。

预先分配;可以自动增长。

管理的简便性

最好;很少需要调优,甚至不需要

好,但是需要一些调优(例如, EXTENTSIZE PREFETCHSIZE

最好;很少需要调优,甚至不需要

性能

非常好

最好;可通过利用原始容器多获得 5% 到 10% 的收益

最好;但是,可以不使用原始容器

表空间最大大小

64GB(4K 页面)

2TB(4K 页面)

2TB(4K 页面)

除了使用 SMS 表空间可以简化管理之外,这两种存储模型之间最显著的差异是表空间的最大大小。在使用 SMS 时,DBA最多只能在表空间中放 64GB 的数据。将页面大小改为 32K,可以将这个限制扩大到 512GB,但代价是每个页面上的可用空间可能会更少。改为 DMS 模型会将表空间限制扩大到 2TB(4K 页面大小的情况下)。如果将页面大小改为 32K,可用空间可以增长到 16TB。尽管还有让表大小突破 64GB 限制的其他方法,但是最简单的方法可能是一开始就使用 DMS 表空间。

DMS与自动存储

DB2 8.2.2 引入了自动存储的概念。自动存储允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA不必显式地定义表空间的位置和大小,系统将自动地分配表空间。在 DB2 9 中,数据库在创建时将启用自动存储,除非 DBA显式地覆盖这个设置。

启用自动存储的数据库有一个或多个相关联的存储路径。表空间可以定义为 “由自动存储进行管理”,它的容器由 DB2根据这些存储路径进行分配。数据库只能在创建时启用自动存储。对于在最初没有启用自动存储的数据库,不能在以后启用这个特性。同样,对于在最初启用了自动存储的数据库,也不能在以后禁用这个特性。

特性

非自动存储

自动存储

容器的创建

必须在创建表空间时显式地提供容器。

不能在创建表空间时提供容器;它们将由 DB2 自动地分配。

容器大小的调整

在默认情况下,表空间大小的自动调整是关闭的(AUTORESIZE NO)。

在默认情况下,表空间大小的自动调整是打开的(AUTORESIZE YES)。

初始大小

不能使用 INITIALSIZE 子句指定表空间的初始大小。

使用 INITIALSIZE 子句指定表空间的初始大小。

容器的修改

可以使用 ALTER TABLESPACE 语句(ADD、DROP、BEGIN NEW STRIPE SET 等等)执行容器操作。

不能执行容器操作,因为由 DB2 控制空间管理。

管理的简便性

可以使用重定向的恢复操作重新定义与表空间相关联的容器。

不能使用重定向的恢复操作重新定义与表空间相关联的容器,因为由DB2 控制空间管理。

在DB2中表空间的存储方式有两种,SMS(System Managed Space)和DMS(Database Managed Space)。
  
  SMS直接利用操作系统的文件系统来管理数据。表空间中的数据按照系统中所有容器上进行数据块划分。表空间中的所有的表都被赋予了它自己的文件名,此文件名在所有的容器中使用。文件扩展名指示出该文件中存储的数据类型。
  
  DMS是由数据库进行表空间的存储空间控制。当定义DMS表空间时,需要选择设备或者文件列表,使其属于该表空间。
  
  DMS表空间和SMS表空间之间的主要差别在于,对于DMS的表空间,存储空间是在创建表空间时分配的,而不是在需要时在向操作系统申请的。并且,在这两种类型的表空间上,数据的放置也是有一些不同之处。例如:考虑进行高效率的表扫描时,数据块在物理上连续存放是很重要的。对于SMS来说,操作系统的文件系统将决定每个逻辑文件页面的物理存储位置。根据文件系统上其他活动的级别以及用来确定存放位置的算法不同,这些逻辑连续的页面可能会连续存放,也可能不连续分配。对于DMS,由于是数据库管理程序直接与磁盘打交道,所以它在理论上可能保证页面在物理上连续存放。
  
  但是,应该注意的是,当使用DMS表空间时,有两个容器选项:原始设备(raw)和文件(file)。当使用文件选项时,数据库管理程序在创建表空间时向文件系统申请分配整个容器。由于是从文件系统分配得来,导致物理分配通常(但也不保证)是连续的。当使用原始设备容器时,数据库管理程序直接控制整个设备,并总能确保数据块中的页连续分配。
  
  SMS和DMS表空间相比,SMS表空间特别适合一般用途。SMS表空间能够提供一定的性能,且管理成本很低。如果需要达到最佳的性能,则应该选用DMS表空间。因为使用文件容器或者SMS表空间移动数据时会发生双重缓冲(在数据库管理程序级首先缓冲一次数据,然后在文件系统再缓冲一次数据,这就是双重缓冲),所以使用设备容器可能提供更好的性能。

SMS是系统管理的表空间,DMS是数据库管理的表空间。
SMS在老的DB2版本使用,在新DB2版本中推荐使用DMS。
DMS可以使用裸设备,SMS不可以使用。
DMS可以将数据对象分开存放,例如常规数据、索引、大字段等,都可以分开存放,SMS做不到这点。
这是SMS和DMS的主要区别,除此之外,还有一些细节上的区别,可参考DB2的相关文档

DB2支持的三种表空间SMS、DMS、DMS的自动存储的更多相关文章

  1. SQL Server三种表连接原理

    在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...

  2. MySQL Innodb的两种表空间方式

    要说表空间,MySQL的表空间管理远远说不上完善.换句话说,事实上MySQL根本没有真正意义上的表空间管理.MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间.只 ...

  3. centos 安装oracle 11g r2(三)-----表空间创建

    centos 安装oracle 11g r2(三)-----表空间创建 创建表空间前要保证监听与数据库实例已经启动 1.启动监听 [oracle@localhost ~]$ lsnrctl start ...

  4. spring对事务支持的三种形式

    spring对事务支持的三种形式: 1.通过spring配置文件进行切面配置 <bean id="***Manager" class="org.springfram ...

  5. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念

    创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent ...

  6. 【RMAN】TSPITR--RMAN表空间基于时间点的自动恢复

    [RMAN]TSPITR--RMAN表空间基于时间点的自动恢复 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...

  7. DB2 insert into 三种写法

    db2的insert into 支持三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入. 以表为例: create table “user" ( "name&quo ...

  8. db2实例、数据库、表空间

    创建数据数据库之前必须创建实例,数据库是运行在实例之上的.实例在本质上是由一些后台进程和共享内存组成.实例相当于是数据库的一个容器,可以包含多个数据库,但是一个数据库只能由一个实例进行管理.相当于Wi ...

  9. ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)

    对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑.但是,当同时在线的用户数达到几万.几十万.甚至百万的时候,我们就需要很多的服务器来分担负载.但是,依据什么规则和结构来组织这些服务器,并 ...

随机推荐

  1. 攻城狮在路上(肆)How tomcat works(三) 连接器:Connector

     在介绍中提到,Catalina中有两个主要的模块:连接器和容器.本章中你将会写一个可以创建更好的请求和响应对象的连接器,用来改进第2章中的程序.一个符合Servlet 2.3和2.4规范的连接器必须 ...

  2. 一致性hash算法简介与代码实现

    一.简介: 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance) 2.单调性(Monotonicity) 3.分散性(Spread) 4.负 ...

  3. ASP.NET的新成员ASP.NET WebHooks

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软除了发布了ASP.NET 5的Beta7之外,还有一个值得关注的东西,就是A ...

  4. Chrome书签被篡改之后的恢复

    chrome书签和备份存放的路径:(XXXX为用户名)(AppData文件夹为隐藏文件夹) \Users\XXXX\AppData\Local\Google\Chrome\User Data\Defa ...

  5. 数据分析(3):ufunc

    universal function 可以对数组里的每一个元素进行操作,底层是C语言实现的,在对数组运算时表现卓越 1.1 初步上手 x = np.linspace(0,2*np.pi,10) y = ...

  6. windows OBJECT查找

    PspCidTable表里.索引值总之4的倍数.也就是说 PID/4 才是PspCidTable索引.*8 才是PsPCidTable+偏移.获取进程对应的 _HANDLE_TABLE_ENTRY 结 ...

  7. 【MongoDB】1.安装--以及简单使用

    第一次接触MongoDB    参考&粘贴:http://jingyan.baidu.com/article/ed15cb1b52b8661be2698162.html 一.安装 1.首先去官 ...

  8. 指针数组 vs 数组指针

        指针数组,故名思义,就是指针的数组,数组的元素是指针:     数组指针,同样,就是直想数组的指针.     简单举例说明:     int *p[2]; 首先声明了一个数组,数组的元素是in ...

  9. python 定义实例方法

    定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的.除了可以定义实例的属性外,还可以定义实例的方法 ...

  10. light oj 1422 Halloween Costumes (区间dp)

    题目链接:http://vjudge.net/contest/141291#problem/D 题意:有n个地方,每个地方要穿一种衣服,衣服可以嵌套穿,一旦脱下的衣服不能再穿,除非穿同样的一件新的,问 ...