分区的威力(翻译)

分区的威力

Dwaine R. Snow and Paul C. Zikopoulos 著

笑熬浆糊 译

 

原文出处:《DB2 Magazine》 Quarter 2, 2003 · Vol. 8, Issue 2

英文原文(由于文章翻译未经授权,请在转载时保留原文链接)

 

 

人们对分区有很多的误解。多伦多实验室的专家们对这个有用的功能进行了正名。

 

DB2 数据库分区的往往是存在很多误区。对于Linux、Unix以及Windows平台上的DB2 UDB 8.1 版本所做的变动有助于简化DB2 分区。我们将解释这些变动,澄清一些分区的神话,以及说明您应该考虑分区的时机和理由。

 

DB2 UDB 8.1 For Linux \Unix\Windows将DB2产品家族中以前称之为DB2 UDB 企业版和企业扩展版的产品整合成为一个单独的产品中。这个 新的DB2 企业服务器版(ESE) 包含了数据库分区的功能(从前是作为单独提供的产品) ,作为一个计费的项目,现在被称为数据库分区功能(注:直译——database partitioning feature DPF)。当DB2的用户们发现自己需要开始分区时,那么他们可以马上开始而不需要其他一些额外的代码—— 他们仅仅需要DPF的许可协议。

 
DPF的真相
关于数据库分区的神话在DB2中随处可见(参见表1)。对于分区基础的快速概揽将帮助你区别真伪并且做出适当的分区决策。

表1 : 围绕DB2 数据分区的神话和事实

无论是否有DPF,DB2都支持并行查询处理。图1展示了安装在一个4路SMP(对称多处理)服务器DB2 ESE。在这个假设中。一个独立的查询可以自动使用这个服务器上所有的CPU和物理磁盘。对于依靠需要数据的子集进行处理的子代理提供分区内部的并行机制。DB2 使用I/O的预存取把从磁盘发送的数据反馈到这些子代理当中。这种并行机制对用户、应用程序以及DBA都是透明可见的。

 

图 1:不带有DPF的DB2 ESE的并行机制

 

DPF选项增加了在一组机器中或逻辑上位于某个SMP服务器中的数据库进行分区的能力。依靠DPF,一幅数据库图像可以跨越多台机器(存储),并且它对于用户和应用程序来说仍然还是一幅完整数据库图像。

 

考虑四路的SMP服务器组的情况。 (在这篇文章里,我们将使用术语数据库分区组而不是集群,因为集群通常是指高可靠性的故障转移配置或者用于衡量系统的分区组。) 使用DPF,在图1中所讨论到的并行操作可以扩展到横跨多台SMP 机器(参见图2)。这样的好处就是有一个双并行操作。 你可以跨越多台机器或者逻辑数据库分区来平衡这些并行操作。这样的处理被称之为分区之间的并行机制。

 

图2 : 横跨多台机器的使用DPF的并行机制

分区之间的并行机制通常在多台服务器执行,但越来越多的用户现在都一些大型的SMP箱中进行该操作(参见图3)。

 

图3 : 单独的SMP服务器中的拥有DPF的DB2 ESE.

 

什么时候(为什么)需要进行分区
那么,你应该去做分区吗?在以下的情况下你应该考虑分区:

·         你的服务器拥有大量可用内存。即使DB2 v8有64位支持,多分区已经被证明可以提供比单独的SMP 并行机制更多的内存的有效使用和更多的线性可扩展性。

·         系统将包括多台服务器,或有超过6 到12 个的CPU。

·         数据库工具的操作速度是你的业务操作的关键所在。

·         为装载数据或提取,转换,负荷处理操作提供的批处理窗口数量是有限的。

·         数据仓库的滚动窗口数据更新的需求使并行SQL处理和其他日志空间成为根本。

分区在这些情况下显得特别有意义。 但是分区所提供的一些其它的好处使得它变得更有魅力。这些好处有:

查询的可扩展性 使用DPF的一个最明显的理由就是它可以增加查询工作量和insert, update,和 delete 操作的性能。把一个单独的大型数据库分区为很多定数量的较小的数据库以加速这些操作因为每一个数据库分区都拥有它们自己的一套数据。

 

比如说你想要扫描一个包含100 million行数据的表。对于一个单独的数据库分区而言,这次扫瞄会要求独立的数据库管理器去搜索所有100 million个纪录。如果你把你的数据库系统分区为使用50 台数据库分区服务器并且将这100 million条记录均匀的分配到他们之间的话,那么每一个数据库分区上的数据库管理器仅仅需要扫描2 million行。如果每一个扫描都在同一个时间并且以相同的速度执行的话,那么扫瞄完成的时间大约是前者的2%。

DPF提供类似于线性可扩展性和使用工具来完成基础设施构建。这样它可以根据需要增加容量而不需要新技术或者单独安装

 

DB2 优化器是基于并行机制。换句话说,它保留了如何在系统中对于底层数据进行分区的信息。使用这些信息,优化器考虑不同的查询执行策略和一个低成本的选择。当在比较不同的执行策略时,它会考虑到不同的操作的内在的并行机制和在数据库分区之间传递消息的开销。

 

在大量数据或者处理器和分区的数量增加的时候,DB2可提供类似线性的可扩展性。但是,分区可能提供的最大好处的机会取决于它所相关的工作量、最大容量表的大小以及其它一些因素。一般情况下,我们推荐:每个CPU上面的原始数据(仅是表的大小)的数量应该基于在被使用服务器上的CPU的功率。比如说pSeries p690-class CPU,我们会建议每个处理器150-200GB。而对于使用Linux或者Windows的xSeries-class CPU(或任何Intel或AMD的机器),我们会推荐每处理器75-150GB。记住,这些只是一般情况下的推荐,在实际情况下会有一些不同的。

 

体系架构的限制 DPF已经突破了一些DB2的体系架构的限制。例如,在DB2中表的最大容量是64GB以4KB的页面大小(虽然32KB的页面大小可以支持到512GB)。DB2中表和表空间大小限制是建立在每个分区的基础上。因此,在多个分区中对一个数据库进行分区可以让你通过你所在系统环境的分区数量的系数来增加表的最大容量。例如,把一个数据库分区成横跨四个结点系统就可以支持最大(以32KB页面大小) 的2408 GB的表。

 

在一个没有分区的环境中内存也会成为一个瓶颈。32 位版本的DB2 ESE 限制了每台DB2服务器共享内存。(这个限制将随运行DB2的操作系统的不同而不同,同时一些供应商也提供一些基本内存模的扩展。)共享内存支持内存密集型的数据库资源譬如缓冲池、高速缓冲区和堆。在一个DPF的环境里,每一个数据库分区管理和拥有它自己的资源,因此您可以通过分区你的数据库来克服这些限制。你甚至可以在大型的SMP箱中区运行逻辑数据库分区,充分利用在一台单独SMP 服务器中的大内存资源。

 

数据装载 在DB2 ESE v8.1中,如果对目标表分区,那么装载工具会自动并行的分离和装载数据。它使用智能的缺省值去分离和装载数据;它也可以被优化用于一些环境。

 

在一个分区数据库中,您可以使用装载工具同时向相应的数据库分区装载数据。图4显示装载工具是使用专用的媒体阅读器将数据分离和装载到表中(并行状态下)。装载工具对于装载时间提供了类似于线性的可扩展性。

图4  利用DPF加速表的装载

DB2 v8的装载工具比以前版本的装载工具更快、更加可利用。如果你在DB2 v8中执行一个装载的操作,DB2不再是将被装载的那个表所在的表空间所有表锁定在它之中(与DB2 v7的情况一样)。现在甚至还有一种被称之为在线装载,它在装载的时候允许对表进行读操作。考虑对于以前DB2版本的,仍然支持autoloader脚本。

 

是否有可能装载时间重要但查询的性能并不重要的?这两个问题其实并不互相排斥;可是,在许多商业流程中装载时间是一个重要因素。实际上,这有时还是决定因素。如果是在那种情况下,那么使用DPF是相当有用的。 例如,电信公司(telco)的欺诈侦查单元在一个指定的时间间隔中装载大量的数据以求快速准确的监测出呼叫模式下反常现象有可能是潜在欺诈信号。数据库必须迅速发现这些反常现象,因此数据需要迅速和频繁地进入数据仓库。在电信公司,这个过程每小时被重复甚至在更大的公司每十五分钟就要重复。 这些需求要求一个可扩展并且高效率的基础设施来运行类似查询的工作。

 

维护 数据库分区可以明显的加速维护。将数据库分散于多台数据库分区服务器上可以加速数据库的维护,因为每一项操作都是运行在分区管理的数据子集上的。

 

虽然在DB2中索引创建是并行的,你可以通过对数据库进行分区来进一步减少总的时间。在所有分区上利用小数据集并行创建索引是允许并行的。 记住,DB2 抽象了表面现象下的运行;多个表可以表现成一个表的形式。

 

RUNSTATS工具也可以从分成中受益。这个工具更新关于表的物理特性和它相关的索引统计数据。在决定数据访问路径时优化器使用这些统计数据。 RUNSTATS是CPU密集的,需要数据的排序和聚合。你可以使用DPF的选项来减少该工具所占用的时间。使用DPF,RUNSTATS检查在一个数据库分区上的数据而不是整个表。在DB2 v8中,RUNSTATS取样选项可以进一步减少工具的的执行时间(不管有或没有DPF)。

 

同样,将数据散布于多个分区有助于表重组(REORG),它是I/O 密集的并且需要随机抓取(特别是在离线状态下)。每个数据库分区可以重组它拥有的数据同时分配为每一个处理器更多驱动来重组数据。这些操作也可以并行操作以缩短需要的整体时间。在DB2 v8,你可以在各个分区或者在数据库分区的子集上来执行REORG。你也可以停止、暂停、检查状态和恢复。

 

这些例子仅仅是一些能从DPF得到好处的维护操作。

 

并行插入/删除 在数据库分区中只有SQL语句是并行操作。如果数据库环境使用SQL来进行大容量的插入和删除处理,通过在数据库分区上的并行处理插入和删除语句,多数据库分区可以增加事务处理的吞吐量。这样的好处还可以应用于从一张表中选择数据并且插入另外一张表的技术。

 

滚动窗口需求 当查询窗口必须保持在打开状态的时候,分区通常会被用于满足滚动窗口的需求(每天插入和删除行)。为每一个处理器定义一个数据库分区将增加新数据插入表中的吞吐量。在数据库分区中并发执行插入或删除数据流很有道理(例如使用一个关键范围)。多数据库分区使为存储大量插入和删除操作的数据库的locklist分配足够的内存成为可能。

数据库分区同时也允许横跨数据库分区并行进行索引维护操作(在插入和删除时)

 

备份与恢复 多个数据库服务器之间的分区数据库可以才很大程度上减少备份数据库所使用的备份总时间。根据你的环境,在决定是否对数据库进行分区时这也许是一种重要决定因素。

DB2通过为每一个表空间分配一个独立的进程或者线程来进行并行备份和恢复。 在一个分区的备份中,每一个分区被单独的进行备份。并行执行这些备份操作将会缩短备份整个数据库所耗费的时间。

 

一个分区数据库环境也可以加速前滚和重新开始(崩溃)恢复。用DPF,一些必须前滚的日志具体到了每一个数据库分区;数据库分区服务器间平衡的分离和征服战略(divide-and-conquer strategy)加速了这个过程。同时如果一个特定的数据库分区不需要前滚的话,那么它将在崩溃恢复中被忽略。

 

记录一些需要考虑的事情 在一个高度活跃的系统中,数据库日志的性能很可能制约系统的能力。在一个分区的数据库环境,每个分区都有它自己的一组日志。当系统需要执行高强度的插入、更新或者删除活动时,多个数据库分区可能改善性能,因为日志被并行的写入每个分区中,并且在每个分区较少的记录日志。
做出选择
分区还是不分区? 从根本上来讲,DB2就是DB2。不管你没有对你的数据库进行分区对于界面、功能、工具和你使用的技能都没有任何的影响。这事实上是依靠你的应用程序和环境。使用我们建议的标准,你可以发现问题的答案。

 

 
关于作者
Dwaine R. Snow 是DB2 UDB 分区数据库的产品经理,做为加拿大IBM的DB2UDB的资讯顾问工作多年,提供数据库和应用程序策划和设计、项目策划和实施、复杂在线事务处理和决策支持系统设计、性能调整以及系统集成的现场指导。你可以通过mrdb2@yahoo.com与他联系

 

Paul C. Zikopoulos在IBM数据管理软件小组有七年的DB2工作经验并且写了许多文章。他参与写作了几本书,包括DB2: The Complete Reference (Osborne McGraw-Hill, 2002),和 DB2 Fundamentals Certification for Dummies(Wiley, 2002)。Paul是DB2认证高级技术专家(DRDA和Cluster/EEE领域)和DB2认证解决方案专家(商业智能和数据库管理领域)。你可以通过paulz_ibm@msn.com 与他联系。

 

时间: 2024-08-20 06:50:24

分区的威力(翻译)的相关文章

基本性能调整(翻译)

性能 基本性能调整 Roger Sanders 著 笑熬浆糊 译   原文出处:<DB2 Magazine> Quarter 3, 2003 · Vol. 8, Issue 3 英文原文(由于文章翻译未经授权,请在转载时保留原文链接)   你的平台--明确的指明从DB2 UDB中可以取得很好的性能   DB2 UDB 8.1 FOR LINUX. UNIX.WINDOWS 的版本可以存在与简单的单一的系统上,也可以在存在与在各种平台上运行的.复杂的客户-服务器环境里.但是不论是什么环境,用户总

WINDOWS下分区类型变为RAW时如何处理

看到网上有很多人提到,在正常使用电脑的情况下,分区类型变为RAW,双击时提示"驱动器X未被格式化,是否格式化",导致数据无法读取.应对这类情况,网友们的恢复方案往往是各执一词,各有各的道理,大家似乎都有恢复成功的理论依据.但实际上,所有的解决方案都是建立在适当的数据结构理论基础上的,并不能一概而论. 开门见山地说吧.既然提示"驱动器X未被格式化,是否格式化",那重点就在于这个X(就用这个盘符假定吧)是未被格式化的,或者说不知道是什么格式.那格式又是什么呢?简单的解释

SQL Server已分区索引的特殊指导原则(2)- 唯一索引分区

一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的交流. 二.解读 [对唯一索引进行分区] "对唯一索引(聚集或非聚集)进行分区时,必须从唯一索引键使用的分区依据列中选择分区依据列.此限制将使 SQL Server 只调查单个分区,以确保表中不存在重复的新键值.如果分区依据列不可能包含在唯一键中,则必须使用 DML 触发器,而不是强制实现唯一性.&

浅谈合理分区

现在很多朋友配机,硬盘的容量起码是20G.40G或者60G,有的甚至是80.100G.要合理高效地管理使用大硬盘,需要有一定的技巧.有些朋友的机子没几天就出现系统不稳定,不得不重装系统;或者需要的文件查找了半天也找不到.合理的分区是系统稳定和规范管理硬盘的基本条件.那么,一个大硬盘,该分为几个区较为合理呢?下面,以本人的爱机为例(40G硬盘,Win98.WinXP双操作系统). C盘为"Win98"系统分区,2G,FAT16分区格式.C盘最好不要分得太大,有些朋友的机子C盘分得太大了,

[译] 系统设计入门 | 掘金翻译计划

本文讲的是[译] 系统设计入门 | 掘金翻译计划, 原文地址:github.com/donnemartin- 译文出自:掘金翻译计划 译者:XatMassacrE.L9m.Airmacho.xiaoyusilen.jifaxu 这个 链接 用来查看本翻译与英文版是否有差别(如果你没有看到 README.md 发生变化,那就意味着这份翻译文档是最新的). 更多内容请见:github.com/xitu/system- 系统设计入门 翻译 有兴趣参与翻译? 以下是正在进行中的翻译: 巴西葡萄牙语 简体

《Linux From Scratch》第二部分:准备构建 第二章:准备新分区- 2.2. 创建新分区

与绝大多数其它操作系统相同,安装 LFS 通常需要专门的分区.构建 LFS 系统比较推荐的方法是使用可用的空分区,或者如果条件允许,最好是在未分区的空间里新建分区. 最小化的系统需要大约 4 GB 的分区,这足以存储所有的源码包及满足编译的需求.但如果要将 LFS 作为主要的 Linux 系统,可能需要安装其它附加的软件,这将需要额外的空间.考虑到了日后所需的空间,一个 10 GB 的分区是比较合理的.LFS 系统本身并不会占用这么多的空间.但满足此要求的大分区将能提供足够大的临时储存空间.编译

分布式一致性算法:Raft 算法(论文翻译)

点击我的博客查看原文. Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要 Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这

流计算精品翻译: The Dataflow Model

The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive Scale, Unbounded, Out of Order Data Processing Dataflow模型: 一种能平衡准确性,延迟程度,处理成本的大规模无边界乱序数据处理实践方法 Tyler Akidau, Robert Bradshaw, Craig Chambers, Slava Cherny

【翻译】揭秘:MySQL Pool Scanner(MPS)

翻译自<Under the hood: MySQL Pool Scanner (MPS)> Facebook有世界上最大的Mysql数据库集群.这个集群由数以千计的服务通过位于两大洲的各种数据中心组成. 操作一个如此规模的集群只需一个小团队.自动化能完成几乎所有常见的MySQL数据库管理员(DBA)需要的操作.因此这个集群几乎可以自己独立运行.其中一个核心的自动化组件是一个称之为MPS的系统,"MySQL Pool Scanner"的缩写. MPS是一个复杂的状态机,大多由