Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101915658
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 21:06:33

    来源:赛迪网    作者:skid

本文首先考察了 DB2 UDB for Linux®、UNIX® 和 Windows® 中的 IBM DB2® Universal Database™ 数据分区功能(Data Partitioning Feature,DPF)在性能和可伸缩性方面的优点。然后,完成在 SUSE Linux Enterprise Server 上安装和配置具有 DPF 功能的 DB2 的步骤。您还将学习到一些重要的概念和设计方面的考虑,这些将帮助您快速掌握 SUSE Linux Enterprise 环境中 DPF 的安装。

  简介

    当一个数据库由两个或更多数据库分区组成,并且每个数据库分区存储位于其中的每个表的一部分表数据时,就属于数据库分区的情况。不同分区可以在不同计算机上,也可以在相同的计算机上(即逻辑分区)。在这种类型的数据库中,数据被根据存储位置进行散列,以标识哪个数据库分区将存储数据。一个数据库分区由它自己的数据、索引、配置文件和事务逻辑组成。在更旧版本的 DB2 中,数据库分区被称作节点(node)或数据库节点。但是在本文中我们使用术语分区(partition)。逻辑分区共享它们所在的同一台计算机上的资源。

    在分区数据库中,一个表可以分布在一个或多个数据库分区中。分区背后的思想就是将一个表的数据分布在多个分区中,将该表中的一部分行存储在一个分区中,而将其他行存储在其他分区中。数据库管理器(DBM)通过自动地将 SQL 请求分解成子请求,来处理数据的检索和更新。然后,这些子请求就在相应的数据库分区中并行地执行。将表划分到多个分区的这种行为对于用户来说是透明的,这意味着虽然数据在物理上是存储在多个数据库分区上的,但是访问起来就像是在一个地方一样。

图 1 展示了运行在一台机器上的单个分区,这类似于没有使用 DPF:


图 1. 单个机器上的单个分区

    接下来的两个图展示了 DPF 真正起作用的情况。图 2 说明了 DPF 被用于三台机器上的情况,其中每台机器上有一个分区。


图 2. 每台机器上一个分区,使用高速通信

    注意这里使用的高速通信互连,这可以是各机器之间使用的一个 TCPIP 网络。接下来的 图 3 展示了同一台机器上的三个分区。这里,分区间的通信是在内存中实现的,而不是通过一个网络(在所有 Linux 平台上,默认情况下 DB2 _FORCE_FCM_BP 是启用的)。


图 3. 同一台机器上的三个分区,通过内存进行通信

    特别要注意,在前面几个图中,对称多处理器(SMP)也可以换成单处理器。但是,在 DPF 环境中 SMP 服务器更为常见。

    分区键 由表中的一列或多列组成,用于使用户可以选择如何对他们的数据进行分区。用户可以通过使用数据库分区组和表空间,来确定将表数据分布到哪些数据库分区上。

    用户交互通过一个数据库分区,即用于该用户的协调分区(coordinator partition)来进行。协调分区与应用程序运行在同一个数据库分区上,或者,对于远程应用程序,协调分区运行在应用程序所连接的那个数据库分区上。任何数据库分区都可以成为协调分区。

理解 DB2 Data Partitioning Feature (DPF)

    要对一个数据库进行分区,需要 DB2 的 Database Partitioning Feature (DPF) 功能。这种可选的 Database Partition Feature 许可只对 DB2 Enterprise Server Edition (ESE) 可用,其费用按照分区数据库中所使用的 CPU 的数量来计算。

何时分区,为何分区

    具有 DPF 功能的 DB2 UDB ESE 是管理 OLAP、数据仓库和数据挖掘工作负载的理想选择。对于大型 OLTP 工作负载,它也是很好的选择。最常见的分区环境由每个物理系统上的一个数据库分区组成,这些物理系统组成数据库分区集群。每个数据库分区上的数据库管理器使用每个系统上的处理器来管理数据库中属于该分区的那部分数据。

    由于数据被划分在多个数据库分区上,因而可以使用多台计算机上的多个处理器的处理能力来满足对信息的请求。数据检索和更新请求被自动分解成一些子请求,然后这些子请求在相应的数据库分区中并行地执行。每多一个服务器,就意味着将有更多的 CPU、内存和更多的磁盘用于分区数据库。

    性能的提升源于这样的事实:大量的数据被划分成更小的、更易管理的块,每个分区/系统可以同时运行。如果要处理提取、转换和载入操作(ETL),而批处理窗口又比较小,那么可以考虑使用 DPF。例如,DB2 LOAD 可以在每个分区上同时运行,负载操作可以并行地分摊到多个服务器上。创建索引的性能也将显著提升。而且,通过使用 DPF,可以显著缩短备份和恢复时间,因为每台参与分区的机器需要处理的数据量更小了。

在 SUSE Linux Enterprise Server V9 上安装 DB2 V8.2

下面我们来介绍在 SUSE Server(或多服务器)环境中安装和运行 DB2 DPF 所需的步骤。

步骤 1. 检验其他软件包

DB2 要求在 Linux 系统上安装以下包:

  • Public domain korn shell (pdksh)
  • Remote shell (rsh) 或 open source secure shell (OpenSSH)
  • IBM Java™ 2 Java Run Time
  • Network File Server (nfs)

使用 rpm 命令来检验这些包是否已安装:

  • rpm -qa | grep pdksh
  • rpm -qa | grep rsh 或 rpm -qa | grep openssh
  • rpm -qa | grep IBMjava
  • rpm -qa | grep nfs

步骤 2. 检验内核参数

在安装 Linux 之前,请确认目前所推荐的、适合 DB2 的 Linux 版本。链接 “” 显示了受支持的 Linux 发行版。确保安装受推荐、受支持版本的 Linux。

在安装 DB2 时,需要注意一些内核参数:


表 1. 对 DB2 有影响的内核参数

内核参数 描述
kernel.shmmax 定义系统范围内允许的最大共享内存段大小,单位为字节
kernel.msgmni 定义在任何时刻系统上允许的最多消息队列标识符个数
fs.file-max 定义 Linux 内核最多分配的文件句柄个数
kernel.sem 定义信号量限制:
  • 每个数组的最多信号量个数(semmsl)
  • 系统范围内最多允许的信号量个数(semmns)
  • 每次 semop 调用的最大操作数(semopm)
  • 最多允许的数组个数(semmni)
** 信号量提供了进程间的低级同步,使得只有一个进程可以访问共享段,从而确保共享段的完整性。

    在 Kernel 2.4.18 及以后版本中,file-max 参数的默认值是 8192,因此可能不需要修改它。可以使用以下命令来检查 file-max 值:

cat /proc/sys/fs/file-max

使用 lpcs 命令显示当前的 Linux 内核设置:

lpcs -l

    从 DB2 UDB Version 8.2 以后,DB2 在启动时将检查 semmni、msgmni 和 shmmax 参数的值,如果当前值不是最佳的,则更新之。DB2 自动将内核参数设置如下:

  • semmni 被改为 1024。
  • msgmni 被改为 1024。
  • shmmax 被改为 268435456 (32-位) 或 1073741824 (64-位)。

注意,系统范围内最多信号量个数(semmns)等于:

数组的最多个数 (semmni) * 每个数组的最多信号量个数 (semmsl)

在安装 DB2 后,还可以通过 db2pd 命令检验 semni、msgmni、shmmax 参数:

db2pd -osinfo

在性能调优时,可能还需要调整其他内核参数。手册上的规程如下:

  1. 以具有 root 权限的用户登录。
  2. 创建一个 /etc/sysctl.conf 文件,如果还没有该文件的话。
  3. 在 /etc/sysctl.conf 文件中添加内核条目。
  4. 运行 sysctl -p 从默认文件 /etc/sysctl.conf 装载 sysctl 设置。
  5. 添加 sysctl -p 到一个系统初始化文件中,以便在每次重新启动时设置内核参数。

步骤 3. 检验网络

文件 /etc/hosts 包含指定给主机名的地址(包括一个 IP 地址、全限定主机名和主机名)。为了得到最佳性能,应确保所有参与的服务器在 /etc/hosts 文件中都有定义。

步骤 4. 启用远程 shell 实用程序

    对于数据分区环境,DB2 需要一个远程 shell 实用程序来在远程分区上执行命令。在 DB2 UDB V8.2.2 之前,rsh 实用程序被默认用作远程 shell 机制,用于分区之间的通信。为了强认证和安全网络通信的需要,DB2 UDB V8.2.2 现在允许在一个名为 DB2RSHCMD 的注册表 profile 变量中指定远程 shell 实用程序的完整路径,从而增加了对备用远程 shell 实用程序的支持。

    OpenSSH (Open Source Secure Shell) 用于代替 rsh 实用程序,以便在不安全的通道上提供有安全保障的通信。OpenSSH 支持两种类型的加密,即基于主机的认证和公钥认证。关于在 DB2 中使用 OpenSSH 的详细信息,请参考标题为 “配置 DB2 Universal Database for UNIX 以使用 OpenSSH” 的技术文章,这篇文章解释了如何在 DB2 中启用 OpenSSH。

    为支持一个受安全保障的环境,在数据库分区环境中,应该使用 OpenSSH,而不是 rsh。如果选择启用 rsh 服务,那么只需去掉 /etc/inetd.conf 文件中与 in.rshd 服务对应的 "#" 字符。为了重新启动 inetd 服务器,可以输入:

/etc/init.d/inetd restart

步骤 5. 设置 Network File System (NFS)

    对于一个数据分区配置,必须有一个可供所有参与分区数据库系统的机器使用的文件系统。这个文件系统将用于 DB2 实例的 home 目录。容纳 DB2 实例的机器称作 instance-owning 机器。为了共享该文件系统,必须配置 Network File System。对于 Linux,可以通过发出以下命令来检验 NFS 服务器是否正在运行:

showmount -e hostname

该命令显示在一个 NFS 服务器中定义的文件系统的一个列表。如果 NFS 不在运行,那么将收到以下消息:

showmount: hostname: RPC: Program not registered

可以通过选择 Misc 和 Installation Server 来使用 YaST 配置 NFS。注意,应该以 root ID 登录。


图 4. YaST Installation Server:选择服务器类型

在 instance-owning 机器上设置 NFS 服务器

您需要导出 instance-owner 目录,该目录将被其他数据库分区服务器共享。

  1. 创建 instance-owner 目录,确保该目录被挂载。使用如下命令:
    • mkdir /db2home
    • mount /db2home
  2. 修改 /etc/fstab 中的文件系统表(fstab),使之包括新的文件系统,以便在启动时挂载新的文件系统。条目格式如下:

    您的条目看上去可能类似于:


    清单 1. 示例 instance-owning /etc/fstab 清单
                       /dev/had7 /db2home ext3 defaults 1 2

    该条目使用一个 ext3 文件系统,这种文件系统在 2.4.16 版或更高版本的 Linux 内核中均受支持,文件系统检查(fsck)程序的顺序被设为 2。

  3. 设置好 instance-owning 文件系统后,通过在 /etc/exports 文件中添加以下条目,可以在启动时通过一个 NFS 服务导出这个文件系统:


    清单 2. 示例 /etc/exports 清单
    db2home InstanceOwnerServer (rw,sync,no_root_squash) db1(rw,sync,no_root_squash)

    其中 InstanceOwnerServer 是 instance-owner 服务器的名称,db1 是另一个数据库服务器的名称。

    表 2 中列出了导出文件选项:

    表 2. 导出文件选项
    选项 描述
    rw 使用读写权限来导出文件系统
    sync 服务器必须等文件被写入到磁盘后才能开始下一次读操作
    no_root_squash 使 root 权限有效

  4. 执行 exportfs 命令,使将挂载的 NFS 客户机能使用 instance-owner 目录

    /usr/sbin/exportfs -a

    其中选项 a 用于导出 /etc/exports 文件中列出的所有目录。

阅读(564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~