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的自动存储的更多相关文章
- SQL Server三种表连接原理
在SQL Server数据库中,查询优化器在处理表连接时,通常会使用一下三种连接方式: 嵌套循环连接(Nested Loop Join) 合并连接 (Merge Join) Hash连接 (Hash ...
- MySQL Innodb的两种表空间方式
要说表空间,MySQL的表空间管理远远说不上完善.换句话说,事实上MySQL根本没有真正意义上的表空间管理.MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间.只 ...
- centos 安装oracle 11g r2(三)-----表空间创建
centos 安装oracle 11g r2(三)-----表空间创建 创建表空间前要保证监听与数据库实例已经启动 1.启动监听 [oracle@localhost ~]$ lsnrctl start ...
- spring对事务支持的三种形式
spring对事务支持的三种形式: 1.通过spring配置文件进行切面配置 <bean id="***Manager" class="org.springfram ...
- 本地管理表空间(LMT)与自动段空间管理(ASSM)概念
创建表空间时,extent management local 定义本地管理表空间(LMT),segment space management auto 定义自动段空间管理(ASSM). extent ...
- 【RMAN】TSPITR--RMAN表空间基于时间点的自动恢复
[RMAN]TSPITR--RMAN表空间基于时间点的自动恢复 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...
- DB2 insert into 三种写法
db2的insert into 支持三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入. 以表为例: create table “user" ( "name&quo ...
- db2实例、数据库、表空间
创建数据数据库之前必须创建实例,数据库是运行在实例之上的.实例在本质上是由一些后台进程和共享内存组成.实例相当于是数据库的一个容器,可以包含多个数据库,但是一个数据库只能由一个实例进行管理.相当于Wi ...
- ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)
对于最多几千人同时在线的通信应用,通常使用单台服务器就可以支撑.但是,当同时在线的用户数达到几万.几十万.甚至百万的时候,我们就需要很多的服务器来分担负载.但是,依据什么规则和结构来组织这些服务器,并 ...
随机推荐
- oracle使用dbms_metadata包取得所有对象DDL语句
当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metadata.get_ddl这个包来查看. dbms_metadata包中的get_ddl函数详细参数 GET_DDL函数返回创建 ...
- git中使用.gitignore文件
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push ...
- centos(x86 64位系统)使用boost
1. 安装gcc,g++,make等开发环境 yum groupinstall "Development Tools" 2. 安装boost yum install boost b ...
- ORA-01041: 内部错误,hostdef 扩展名不存在
在工作中打算将生产环境的数据库设置成归档模式时,遇到的问题. 一.重启数据库 Sql代码: shutdown immediate; startup mount; 也就是在我执行startup moun ...
- C#DataGridView合计处理
网上查了一些关于合计的代码 ,但发现大都都不尽人意,就自己再根据资料改了一下. #region 合计 //调用方法示例 //HeJi heji = null; //heji = new HeJi(la ...
- wp8 入门到精通 仿QQPivot 提示数量
<Grid x:Name="LayoutRoot" Background="White"> <Grid Width="480&quo ...
- [Eclipse] Eclipse字体问题解决
背景: Eclipse的字体总感觉有点问题,其中中文字体太小,不方便查看,今天网上搜索了一下,解决了问题,记录下来: 解决办法: Window --> Preferences --> Ge ...
- Intent传递类实例
发送方: Intent intent = new Intent(); intent.setClass(mContext, HomeDetailReportActivity.class); intent ...
- C# 编码转换 UTF8转GB2312 GB2312转UTF8
/// <summary> /// GB2312转换成UTF8 /// </summary> /// <param name="text">&l ...
- springMVC核心配置文件样例
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...