海量数据如何加速DB2数据库备份与恢复的进度
随着企业用户数据量的不断增长,如何快速而有效的对数据进行备份和恢复,就成为数据库日常维护的重要议题。本文的重点旨在讲解说明在大数据量情况下如何优化 DB2 备份与恢复的性能,缩短备份和恢复的时间窗口。
DB2 的备份和恢复命令能够提供不同粒度和不同级别的备份和恢复:
1. 完整的数据库或者某个表空间的备份与恢复
2. 离线或在线的数据库备份
3. 完整、增量或者 delta 方式的数据库备份与恢复
一、DB2 备份和恢复的工作原理
DB2 备份和恢复主要由两种不同的 EDU 共同完成数据库的备份和恢复操作。其中 db2bm(备份和恢复缓冲区操纵程序)用来在表空间和系统缓存间进行数据传输,db2med(备份和恢复介质控制器)用来在系统缓存和外部介质之间进行数据传输。db2bm 和 db2med 均在 db2agent 的协调下进行工作。其中,db2bm 需要通过 db2pfchr(缓冲池预取进程)从容器中预取数据,或者通过 db2pclnr(缓冲池页清楚程序)向容器中写入数据。
1) DB2 备份进程模型如下图 1 所示:
以 DB2 备份为例,从图中我们可以看出,其存在 3 个表空间(tablespace1,tablespace2,tablespace3)和 3 个外部存储介质。第一个 db2bm 进程负责从 tablespace1 和 tablespace2 中顺次读取数据,并将它们写入到系统缓存中。即 db2bm 进程会首先对 tablespace1 进行备份,当备份完成后,db2bm 会开始对 tablespace2 的备份。第二个 db2bm 进程负责从 tablespace3 中读取数据并写入系统缓存。同时,每一个外部存储介质对应于一个 db2med 进程,db2med 进程负责将系统缓存中的数据写入到外部设备中。
2) DB2 恢复过程与 DB2 备份过程相同,如下图 2 所示:
对于 DB2 备份和恢复过程来说,在 EDU 内部,DB2 并不会控制 db2bm 进程从表空间往系统缓存的写入或读取速度,同样的,db2med 进程在系统缓存和外部介质之间的传输速度也不会受到限制。DB2 备份和恢复工具会以尽可能快的速度向外部介质写入和读取数据。我们只能够通过外部参数 UTIL_IMPACT_PRIORITY 对 DB2 备份和恢复进行整体控制。
在 DB2 备份和恢复过程中,每一个表空间都会由一个单独的 db2bm 进程负责读取与写入。如图 1 所示,如果备份过程中存在有 2 个 db2bm 进程,那个其中一个 db2bm 进程会负责对其中的两个表空间进行读写操作并且这 2 个db2bm 进程会并行的对表空间进行读写操作,如 tablespace1 和 tablespace3 中的数据会由不同的 db2bm 并行写入到系统缓存。db2bm 的数量可以有 PARALLELISM 参数进行指定,如下。
db2 backup database DBNAME to /backup PARALLELISM 4db2 restore database DBNAME from /backup PARALLELISM 4
同理,我们可以通过如下的方式指定 db2med 的数目。
db2 backup database DBNAME to /backup1 /backup2 /backup3
db2 restore database DBNAME from /backup1 /backup2 /backup3
DB2 会根据我们所指定的目标路径的数据来生成对应数据的 db2med 进程。
二、DB2 备份和恢复的优化
本节我们将详细介绍影响 DB2 备份和恢复的优化参数,并结合工作原理解释它们的具体含义,并给出性能优化建议。
BACKUP DATABASE <DB> TO dir | dev WITH num-buf BUFFERS BUFFER buff-size PARALLELISM n COMPRESS UTIL_IMPACT_PRIORITY priority
1. 参数PARALLELISM n
通过使用 PARALLELISM 参数指定了使用 db2bm 进程数目,它决定了从表空间中往系统缓存中写入的并行性。每一个 db2bm 进程会对应于一个或多个表空间,当一个 db2bm 进程完成对当前表空间的备份后,它会继续对另外一个表空间进行备份。由于每一个 db2bm 进程至少对应于一个表空间,因此 PARALLELISM 值需要小于数据库表空间的数目,如果将设置 PARALLELISM 为大于数据库中表空间的数目,其并不会显著提高备份的性能。
2. 参数To dir | dev
如果有多个目标路径被指定,如 To dir1, dir2, dir3,则可以指定备份时使用的 db2med 的进程数目。多个 db2med 进程会并行的像 dir1, dir2, dir3 中写入数据,其实第一个目标路径 dir1 中会保存备份数据的数据头以及一些特殊的文件。
如果系统中有多个磁盘系统,可以使用多个目标路径分别指向这些磁盘系统,以提高往磁盘写入数据的并行性。
3. 参数BUFFER buff-size
使用 BUFFER buff-size 参数可以指定内部缓存的大小,如图 1 中的内部缓存(Utility Heap),单位为 4KB。如果 BUFFER 的值没有指定,则使用 dbm 中的参数 BACKBUFSZ 作为内部缓存的大小。进行备份时,数据首先由表空间写入内部缓存,当缓存满后,缓存中的数据会被写入到外部磁盘中。
BUFFER 值的大小建议设置为 extent 大小的整数倍。如果不同的表空间的 extent 大小不同,则 BUFFER 值建议为它们的最小公倍数。
4. 参数WITH num-buf BUFFERS
如图 1 所示,每一个备份过程可以拥有一个或者多个内部缓存。将内部缓存的数目设置为至少 db2med 进程的 2 倍能够有效的提高备份时的速度,它使得 db2med 进程向外部磁盘写入数据时无需等待缓存。
同时需要注意的是,(BUFFER buff-size) * (WITH num-buf BUFFERS) < UTIL_HEAP_SZ。UTIL_HEAP_SZ 指定了 DB2 中实用程序堆的大小,此参数指定可由备份、复原和装入(包括装入恢复)实用程序同时使用的最大内存量。
5. 参数UTIL_IMPACT_PRIORITY
UTIL_IMPACT_PRIORITY 可以用来调节备份的速度,其取值在 1 到 100 之间。1 代表最低优先级,100 代表最高优先级。如果此参数不指定,则备份进程会以最快的速度备份数据。
6. 参数COMPRESS
备份压缩功能能够在数据写入外部磁盘前,对内部缓存中的数据进行压缩,从而减少备份文件的大小。其使用的是一种改进的 Lempel-Zev(LZ)算法。
RESTORE DATABASE <DB> FROM dir | dev WITH num-buf BUFFERS BUFFER buff-size PARALLELISM n
1. 参数PARALLELISM n
与 DB2 备份命令相同,PARALLELISM 参数用来指定在恢复过程中的 db2bm 的数目。通过增加 PARRALLELISM 值可以提高数据在内部缓存和表空间之间的并行性。
2. 参数FROM dir | dev
如果指定多个备份存储路径,(其取决于备份时目标路径的数目)如 From dir1, dir2, dir3,则可以指定恢复时 db2med 进程数目的多少,从而加快数据从外部介质写入内部缓存的速度。
3. 参数BUFFER buf-size
BUFFER buf-size 的大小为一块内部缓存的大小,其应该设置为 extent 大小的整倍数,同时需要等于或者为备份时所定义大小的整倍数。如果没有设置的话,则使用 dbm 中的 RESTBUFSZ 参数作为内部缓存的大小。
4. 参数WITH num-buff BUFFERS
指定使用的内部缓存的大小,同备份参数相同,其最好设置为 db2med 的 2 倍以提高备份的速度。同时 (BUFFER buff-size) * (WITH num-buf BUFFERS) < UTIL_HEAP_SZ。
我们可以看到,通过调整 DB2 备份和恢复的参数,我们可以根据当前系统所处的不同硬件环境调整数据库备份和恢复过程中的 db2bm(备份和恢复缓冲区操纵程序)和 db2med(备份和恢复介质控制器)的数目,以及它们在备份和恢复过程中使用的内部缓存的大小和数目等参数,从而提高 DB2 的整体备份和恢复性能。
(一)BACKUP 优化:
在 DB2 备份命令中有如下参数可以用来调整数据库备份的性能:
(二)RESTORE 优化
在 DB2 恢复命令中有如下参数可以用来调整数据库恢复的性能:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。