- 浏览: 1544329 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html
|
级别: 初级 David Kline, DB2® Vendor Enablement, PartnerWorld® for Developers, IBM®开发人员技术支持(Developer Technical Support,DTS)中心 — 达拉斯 2003 年 10 月 01 日 本文帮助新的 DB2 DBA 理解表空间和缓冲池的重要性,并说明对它们进行正确的设计和调优如何能提高数据库性能。 本文专为 IBM DB2 Universal Database™ for Linux、UNIX® 和 Windows® 而撰写 对于刚涉足 DB2 领域的 DBA 或未来的 DBA 而言,新数据库的设计和性能选择可能会很令人困惑。在本文中,我们将讨论 DBA 要做出重要选择的两个方面:表空间和缓冲池。表空间和缓冲池的设计和调优会对 DB2 服务器的性能产生深远的影响,因此我们将着重讨论这些活动。 在我们的示例中,我们将使用 DB2 V8.1 企业服务器版。大多数示例也适用于低级版本。我们会让您知道某个示例是否只适用于 V8.1。 在 第 1 节中,我们将从定义表空间的类型开始,并将说明 DB2 如何将数据存储在表空间中。我们将介绍配置选项并向您介绍创建和管理表空间的整个过程。接下来,我们将着重讨论 缓冲池,介绍缓冲池是什么以及如何创建和使用它。在 第 2 节中,我们将结合这两个方面并讨论该如何组织缓冲池和表空间才能获得最佳性能。
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间: 可以用两种不同的方式管理表空间: 下面是一个示例,向您说明该如何增大容器大小(V7 和 V8 都支持此功能):
请注意,只有 V8 才支持将原始容器的大小调整得更小。 当您创建数据库时,将创建三个表空间(SYSCATSPACE、TEMPSPACE1 和 USERSPACE1)。通过使用 DB2 命令窗口(Command Window)或 UNIX 命令行,创建一个名为 testdb 的数据库,连接至该数据库,然后列出表空间:
下面的 清单 1显示了 LIST TABLESPACES 命令的输出。 清单 1. LIST TABLESPACES 命令的输出
上面所示的这三个表空间是通过 CREATE DATABASE 命令自动创建的。用户可以通过在该命令中包含表空间说明来覆盖缺省的表空间创建,但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外)。 每个表空间都有一个或多个容器。重申一次,您可以认为容器是孩子,而表空间是其父母。每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。可以将容器添加到 DMS 表空间,或者从 DMS 表空间中删除容器,而且可以更改容器的大小。只能将容器添加到某个分区中分区数据库上的 SMS 表空间,在添加之前该分区还未给表空间分配容器。添加新的容器时,将启动一个自动的重新均衡操作以便将数据分布到所有容器上。重新均衡操作不会妨碍对数据库的并发访问。 可以在创建表空间时给它们指定许多设置,或者也可以稍后使用 altER TABLESPACE 语句时指定其设置。 表 1. 页大小的含义
表空间最多可包含 16384 个页,因此选择较大的页大小可以增加表空间的容量。 下列语句将创建一个常规表空间。所讨论的所有设置都是为了进行说明。
指定 LIST TABLESPACES 命令的 SHOW DETAIL 选项将显示其它信息:
清单 2显示了 USERSPACE1 表空间的输出。缺省情况下,将列出创建数据库时所创建的那三个表空间。 清单 2. LlST TABLESPACES SHOW DETAIL 命令的输出
要列出容器,我们需要使用以上输出中的 Tablespace ID:
清单 3. LIST TABLESPACE CONTAINERS 命令的输出
该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置。 一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。 创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。 基于块的缓冲池 扩展存储器 下面是 CREATE BUFFERPOOL 语句的一个示例:
该缓冲池被分配给上面的 CREATE TABLESPACE 示例上的 USERSPACE3,并且在创建表空间之前创建该缓冲池。请注意,缓冲池和表空间的页大小都是 8K,两者是相同的。如果您在创建缓冲池之后创建表空间,则可以省去 CREATE TABLESPACE 语句中的 BUFFER POOL BP3 语法。相反,可以使用 altER TABLESPACE 命令将缓冲池添加到现有的表空间:
通过查询 SYSCAT.BUFFERPOOLS 系统视图可以列出缓冲池信息:
要找出哪个缓冲池被分配给了表空间,请运行下面这个查询:
可以在上一个查询中找到 BUFFERPOOLID,该查询使您能够看到每个表空间与哪个缓冲池相关联。 既然我们已经描述了表空间和缓冲池是什么以及如何创建它们,那么就让我们研究一下有关如何在数据库中将它们直观地组织起来的示例。 图 1. 表空间和缓冲池 该数据库有 5 个表空间:一个目录表空间、两个常规表空间、一个长表空间和一个系统临时表空间。没有创建用户临时表空间。另外有 8 个容器。 在这个方案中,缓冲池可能如下分配:
一般而言,在物理设备上设计如何放置表空间和容器时,目标是使 I/O 并行性和缓冲区利用率达到最优。要实现这个目标,应当全面了解数据库设计和应用程序。只有这样您才能确定类似于下面这样的问题:将两张表分隔到不同的设备会不会产生并行 I/O,或者,是否应当在单独的表空间中创建表以便可以对它进行完全缓冲。 设计新数据库的物理布局应当从设计表空间的组织开始:
这个是一个有反复的过程,应该通过压力测试和基准测试验证该设计。很显然,实现最佳的设计可能需要花费大量精力,并且仅当数据库性能必须可能是最佳时才能证明设计是最佳的。通常:
通常,为了降低管理和保持一个较为简单的数据库设计的复杂性,稍微降低一点性能是值得的。DB2 具有一种非常成熟的资源管理逻辑,往往不用进行精心的设计就能产生非常好的性能。 通常应该将目录表空间和系统临时表空间作为 SMS 分配。没有必要拥有多个具有相同页大小的临时表空间,通常只需一个具有最大页大小的临时表空间就够了。 突出的问题在于是否要将用户数据分割到多个表空间中。一个考虑因素是页的利用率。不能将行分割到不同的页,因此具有长行的表需要有合适的页大小。但是,一个页上的行不能超过 255 个,因此具有较短行的表不能利用整个页。例如,在页大小为 32K 的表空间中放置行长度为 12 字节的表,它大约只能利用每个页的 10%(即,(255 行 * 12 字节 + 91 字节的开销) / 32k 页大小 = ~10%)。 如果表很大,这只是一个考虑因素,因此浪费的空间就非常大。它还会使 I/O 和缓存的效率降低,因为每个页的实际有用内容很少。如果可以将表放到具有较小页的表空间中,以及可以充分利用较大的页大小,那么最常用的访问方法将确定哪一个更好。如果通常是顺序访问大量行(该表可能进行了群集),那么比较大的页大小会比较有效。如果随机访问行,那么较小的页大小可以允许 DB2 更好地利用缓冲区,因为同样的存储区域可以容纳更多页。 一旦根据页大小对表进行了分组,那么访问频率和类型将确定把数据进一步分组到独立的表空间中是否有意义。每张表根据自己被最频繁访问的方式,可以具有一组最有效的表空间设置:PAGESIZE、EXTENTSIZE 和 PREFETCHSIZE。上面已介绍了 PAGESIZE。EXTENTSIZE 是在将数据写入到下一个容器之前写入到当前容器中的数据的页数(如果表空间中存在多个容器的话)。 PREFETCHSIZE 指定在执行数据预取时将从表空间读取的页数。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,会使用预取操作(通常是大型表扫描)。比较好的做法是将 PREFETCHSIZE 值显式地设置成表空间的 EXTENTSIZE 值与表空间容器数的乘积的倍数。例如,如果 EXTENTSIZE 是 32,并且表空间中有 4 个容器,那么理想的 PREFETCHSIZE 应当是 128、256 等等。如果一个或多个频繁使用的表需要的这组参数的值不同于那些最适用于表空间其它表的性能的参数值,那么将这些表放入单独的表空间可能会提高整体性能。 如果预取操作是表空间中的重要因素,那么请考虑留出一部分缓冲区用于基于块的 I/O。块大小应当等于 PREFETCHSIZE。 使用多个用户表空间的最重要原因是管理缓冲区的利用率。一个表空间只能与一个缓冲池相关联,而一个缓冲池可用于多个表空间。 缓冲池调优的目标是帮助 DB2 尽可能好地利用可用于缓冲区的内存。整个缓冲区大小对 DB2 性能有巨大影响,这是因为大量的页可以显著地减少 I/O 这一最耗时的操作。但是,如果总的缓冲区大小太大,并且没有足够的存储器可用来分配给它们,那么将为每种页大小分配最少的缓冲池,性能就会急剧下降。要计算最大的缓冲区大小,DB2、操作系统以及其它任何应用程序都必须考虑其它所有存储器的利用率。一旦确定了总的可用大小,就可以将这个区域划分成不同的缓冲池以提高利用率。如果有一些具有不同页大小的表空间,那么每种页大小必须至少有一个缓冲池。 拥有多个缓冲池可以将数据保存在缓冲区中。例如,让我们假设一个数据库有许多频繁使用的小型表,这些表通常全部都位于缓冲区中,因此访问起来就非常快。现在让我们假设有一个针对非常大的表运行的查询,它使用同一个缓冲池并且需要读取比总的缓存区大小还多的页。当查询运行时,来自这些频繁使用的小型表的页将会丢失,这使得再次需要这些数据时就必须重新读取它们。 如果小型表拥有自己的缓冲池,那么它们就必须拥有自己的表空间,因此大型查询就不能覆盖它们的页。这有可能产生更好的整体系统性能,虽然这会对大型查询造成一些小的负面影响。经常性地进行调优是为了实现整体的性能提高而在不同的系统功能之间做出的权衡。区分功能的优先级并记住总吞吐量和使用情况,同时对系统性能进行调整,这是非常重要的。 V8 所引入的新功能能够在不关闭数据库的情况下更改缓冲池大小。带有 IMMEDIATE 选项的 altER BUFFERPOOL 语句会立刻生效,只要数据库共享的内存中有足够的保留空间可以分配给新空间。可以使用这个功能,根据使用过程中的周期变化(例如从白天的交互式使用转换到夜间的批处理工作)来调优数据库性能。 一旦将表分布到多个表空间中,就必须决定它们的物理存储器。表空间可以存储在多个容器中,并且它可以是 SMS 或 DMS。SMS 更容易管理,对于包含许多不同的小型表的表空间(例如目录表空间),尤其是那些包含 LOB 的表的表空间而言,SMS 可能是个不错的选择。为了降低每次一页地扩展 SMS 容器的开销,应当运行 db2empfa命令。这会将数据库配置参数 MULTIPAGE_ALLOC 的值设置成 YES。 DMS 通常有更好的性能,并且它提供了分别地存储索引和 LOB 数据的灵活性。通常应当将一个表空间的多个容器分开存放在单独的物理卷上。这可以提高某些 I/O 的并行性。当有多个用户表空间和多个设备时,应当考虑应用程序逻辑,这样就可以尽可能平均地在这些设备上分配工作负载。 RAID 设备有它们自己的特殊考虑。EXTENTSIZE 应该等于 RAID 条带大小或者是它的倍数。PREFETCHSIZE 应该等于 RAID 条带大小乘以 RAID 并行设备数(或者等于该乘积的倍数),这个值应该是 EXTENTSIZE 的倍数。DB2 提供了自己的注册表变量,允许您增强您的特定环境。通过执行下面这个命令,可以在一个容器中启用 I/O 并行性:
另一个注册表变量 DB2_STRIPED_CONTAINERS=ON 可以将容器标记大小从一个页更改成整个扩展块,因此就能使表空间扩展块和 RAID 条带一致。 至于性能评估的其它方面,要知道某个更改是否有益,唯一稳妥的方法就是进行基准测试。如果物理组织发生了更改,那么执行该任务稍微有些复杂,这是因为这时要更改表空间必须要付出相当大的精力。最实用的方法就是减少设计阶段中的案例数,这样的话稍后需要进行基准测试的案例就比较少了。只有在性能极其重要并且不同的设计之间有可能存在显著的性能差别时,才值得花时间和精力进行严格的基准测试来比较设计。应当把重点放在缓冲池上,确保没有将它们分配到虚拟内存中,并确保以最有效的方式利用它们。 在将数据库移到另一个系统之前,始终应该重新评估它的调优参数和物理组织,即便这些系统是同一种平台也应如此。在实际情况中,DBA 将经过良好调优的数据库从具有 1 GB 内存的 Windows 服务器复制到具有 256 MB 内存的膝上型计算机中。在服务器上进行连接所花的时间小于一秒,而在膝上型计算机中却要用掉 45 分钟。通过减少缓冲池大小和其它内存参数就能解决这个问题。 如果平台不一样,那么这个问题就变得更难了。即使是在 UNIX 和 Windows 之间进行移动,在一个系统上已是最佳性能,在另一个系统上却未必如此。如果复制数据库是为了进行生产,那么应当重复调优过程。如果必须将数据库移到 zSeries™,那么这里讨论的某些内容则不适用,而应该参考有关的手册和红皮书。在 iSeries 系统上,物理设置和调优是在数据库环境之外一起完成的,应当参考 iSeries™ 系统管理手册。
我们在本文中介绍了许多内容,但是您应当了解的有关数据库设计和性能的知识决不仅限于此。我们着重讨论了数据库设计的两个比较大的问题,而没有深入研究查询优化和应用程序考虑事项的细节。设计数据库是第一位的,因为这是其它所有事情的前提,因此您的初始规划应该非常全面。为了方便您的学习,我们在下面提供了其它联机参考资料,这样您就可以继续学习有关本主题的内容。
DB2 开发者园地的文章:
|
发表评论
-
(转)浅谈IBM DB2的数据库备份与恢复
2011-11-23 16:41 1847http://bzhang.mild.blog.163.com ... -
(转)DB2备份恢复数据库步骤
2011-11-23 16:23 952http://tech.it168.com/ibmtec ... -
(转)DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011的原因及解决方法
2011-11-07 15:03 9618http://blog.sina.com.cn/s ... -
(转)DB2解决“数据库日志已满”操作 SQLCODE=-964
2011-11-07 14:49 2693http://www.db2china.ne ... -
(转)用哪个DB2命令查看DB2 instance是启动还是停止的?
2011-09-30 13:25 3647http://bbs.chinaunix.net/thre ... -
(转)论 LOAD 与 IMPORT 中的 codepage 转换
2011-07-11 14:55 1163http://www.ibm.com/develo ... -
(转)DB2导出数据库表结构和数据
2011-07-11 14:19 1564http://hi.baidu.com/mylovecha ... -
(转)DB2 9 中基于字符的字符串函数
2011-06-16 11:32 1430http://www.ibm.com/develo ... -
(转)db2look:生成 DDL 以便重新创建在数据库中定义的对象
2011-05-31 14:56 1646http://blog.csdn.net/hrfdotnet/ ... -
(转)【俊哥儿张】DB2:学习 DB2LOOK 命令
2011-05-31 14:54 1401http://space.itpub.net/770528 ... -
(转)Recreate optimizer access plans using db2look
2011-05-31 14:53 1267http://www.ibm.com/develo ... -
(转)DB2中ALTER TABLE为什么需要REORG操作?
2011-05-12 13:10 1686http://www.flatws.cn/article/ ... -
(转)DB2 3.2.2 表空间维护
2011-05-11 12:53 1184http://book.51cto.com/art/2 ... -
(转)DB2 数据类型
2011-05-11 12:52 4005http://hi.baidu.com/uvvv/blog ... -
(转)DB2 Basics: Table spaces and buffer pools
2011-05-06 15:29 1472http://www.ibm.com/develo ... -
(转)SQL1092N "USER" does not have the authority to perform therequested command -
2011-03-23 17:39 5485http://dbaspot.com/foru ... -
(转)DB2 sqlstate 57016 原因码 "7"错误详解
2011-03-07 17:38 1500http://www.db2china.net/clu ... -
(转)在英语 OS 上设置 DB2 UDB 版本 8 中的混合字节字符集(MBCS)数据库
2011-02-16 16:25 1604http://www.ibm.com/develo ... -
(转)DB2 CODEPAGE List
2011-02-15 15:15 1426http://www.db2china.net/hom ... -
(转)快速参考: DB2 命令行处理器(CLP)中的常用命令
2010-11-11 10:44 973http://www.ibm.com/develo ...
相关推荐
在第2节中,我们将探讨如何将缓冲池和表空间组合以实现最佳性能。这可能涉及到为不同类型的数据分配不同的缓冲池,或者根据工作负载调整缓冲池的大小和数量。此外,还需要考虑缓冲池的替换策略,确保最常访问的数据...
根据性能需求调整表空间的缓冲池配置;在必要时扩展表空间大小或增加新的数据分区。此外,通过`ALTER TABLESPACE`语句,可以修改表空间的属性,如改变扩展大小或更换存储设备。 五、表空间备份与恢复 为了保证数据...
在数据库开发中,我们需要了解DB2的体系架构,包括服务器进程、内存结构(如缓冲池、日志缓冲区)、存储结构(如表空间、数据分区)等。理解这些概念有助于优化数据库性能和管理数据库资源。 此外,DB2提供了丰富的...
数据库是由许多逻辑对象和物理对象组成的,包括表、视图、索引、触发器、存储过程、程序包、缓冲池、日志文件、表空间等。创建数据库的最简单命令是#CREATE DATABASE mydb,或者#CREATE DATABASE mydb ON /data。 ...
表空间是数据库组织的关键,包括系统管理表空间(SMS)和数据库管理表空间(DMS)。缓冲池是预分配的内存区域,用于提高性能。每个系统有一个管理服务器负责管理各种操作。 配置参数是DB2性能优化的关键。在创建DB2...
维护方面,数据库管理员需要定期检查表空间的状态,监控空间使用情况,确保有足够的存储资源,并根据需要调整表空间和缓冲池的配置,以适应数据增长和应用需求变化。 总的来说,DB2的存储管理和维护涵盖了数据库的...
例如,你可以使用`CREATE DATABASE`语句来创建一个新的数据库,并指定表空间、缓冲池和其他参数。 编制数据库目录是为了方便数据库对象的管理和访问。目录包含了数据库中所有对象的元数据信息,包括表、索引、视图...
DB2基础培训旨在帮助学习者掌握DB2数据库的基本概念、数据类型、表空间管理、缓冲池优化、表与视图的使用、数据类型转换、表间联接、常用函数以及数据迁移工具的使用技巧。通过深入理解这些知识点,开发者可以有效...
这里包括创建定制化的缓冲池和表空间,以及为LOB/LONG数据创建专用的表空间。 总体而言,DB2 v10性能调优和监控手册覆盖了DB2数据库性能优化的多个关键环节,包括但不限于数据库配置、监控工具的使用、查询调优、...
4. **内存管理**:DB2使用缓冲池来缓存数据和索引,有效减少I/O操作。调整缓冲池大小、分配策略和缓冲池高速缓存能直接影响性能。另外,理解SQL工作区和共享池的作用也很重要。 5. **并发控制**:在多用户环境下,...
缓冲池文件是 DB2 数据库的缓冲池管理文件,用于对缓冲池进行管理。缓冲池文件中包含了数据库中的缓冲池信息,可以起到备份的作用。 数据库配置文件是 DB2 数据库的配置文件,用于存储数据库的配置信息。数据库配置...
第1周 DB2基础:重点讲授架构、用户、实例、表空间、缓冲池、安全等重点概念。 第2周 DB2性能优化方法系统:包括经典三招、性能问题分析、使用PAT方法找到性能瓶颈、硬件规划等。 第3周 DB2性能优化:从监控开始,...
在IBM的DB2 Version 9内部认证培训材料中,我们主要关注的是DB2数据库管理系统的基础架构、表空间的管理和各种数据库对象的关系。以下是对这些关键知识点的详细解释: 1. **DB2 Version 9基本架构**:DB2是IBM开发...
2. DB2体系结构:讲解DB2的组件和工作原理,包括数据库实例、存储过程、缓冲池、日志和事务处理。了解这些有助于优化数据库性能和故障排查。 3. SQL查询和DML操作:详细阐述SQL语句的编写和执行,包括SELECT、...
- 创建8KB缓冲池:`create bufferpool ibmdefault8k IMMEDIATE SIZE 5000 PAGESIZE 8K;` - 创建16KB缓冲池(用于OA_DIVERTASKRECORD):`create bufferpool ibmdefault16k IMMEDIATE SIZE 5000 PAGESIZE 16K;` - ...