首页 / 资讯中心 / 文章详情

DB2 V11.1 安装与性能调优实战:Linux 与 Windows 10 双平台指南

DB2 V11.1 安装与性能调优实战:Linux 与 Windows 10 双平台指南 ★ FEATURED ARTICLE
简介DB2 V11.1 是 IBM 面向大型企业推出的企业级关系型数据库管理系统本资源为专为 Linux 环境打包的完整安装介质适合需要在 Linux 服务器上搭建数据库服务的运维工程师、DBA 及数据库学习者使用。压缩包共 405 个文件约 772.77MB以 cat 消息目录、gz 压缩组件、mo 多语言资源、so 动态库及 java、jar 程序为主并包含 db2setup、db2_install、db2prereqcheck 等安装与预检脚本以及 expc 系列多语言帮助文件覆盖安装、配置、实例创建与工具集等环节。目前已有 2644 人学习下载。借助该资源读者可完成从系统预检、解压安装到实例配置的完整部署流程并利用 db2pd、db2look、db2top 等工具进行性能监控与调优同时掌握备份恢复、跨平台迁移等实用技能为 Linux 下 DB2 的日常管理与维护提供可靠支撑。1. 从一台老旧的测试机说起DB2 V11.1 到底还能不能打上周帮一个做金融外围系统的朋友收拾一台退役的测试服务器系统是 Windows 10 专业版上面跑着一套十几年前的报表查询服务数据库用的正是 DB2 V11.1。他问我这版本现在还有人在用吗我反问他一句你猜为什么这套系统跑了八年没换过答案很简单——稳。DB2 V11.1 是 IBM 在 2016 年前后推出的一个长期支持版本Linux 和 Windows 10 都能装对中小规模 OLTP 和报表场景来说它的优化器、锁机制和内存管理放到今天依然不落伍。这份下载资源就是针对还在维护老系统、或者想在本机搭一套学习环境的从业者准备的。如果你手头有必须兼容 DB2 的遗留项目或者单纯想对比一下 DB2 和 MySQL、PostgreSQL 在复杂查询上的差异这个版本值得你花半小时装一遍。2. 装之前先想清楚DB2 V11.1 的选型逻辑与安装介质拆解2.1 为什么是 V11.1 而不是更新版本DB2 后来改叫 Db2版本号也跳到了 11.5 甚至更高。但 V11.1 有一个很实际的优势它对 Windows 10 的支持是原生且完整的不需要额外打补丁或者改兼容模式。很多新版本在 Windows 10 上装完客户端工具连不上、实例起不来折腾半天发现是系统版本太新导致的兼容问题。V11.1 的安装包在 Linux 上同样干净主流发行版如 CentOS 7、Ubuntu 18.04 都能直接跑依赖库少不像某些版本需要手动降级 glibc。另一个选型理由是许可。V11.1 有免费的社区版Community Edition对 CPU 核数和内存有限制但做开发测试完全够用。如果你只是想在本地复现一个生产环境的查询计划或者验证某个 SQL 的锁等待行为社区版不会卡你脖子。常见做法是开发机装社区版生产环境用企业版两边语法和优化器行为基本一致。2.2 下载包里到底有什么这份资源通常包含三个核心部分服务器安装介质、客户端工具包、以及一份简版的安装说明。服务器介质在 Linux 上是 tar.gz 格式Windows 上是 exe 自解压包。客户端工具包主要是 IBM Data Studio 或者更轻量的命令行处理器CLP。安装说明虽然简略但会标注几个关键路径比如实例目录默认在/home/db2inst1还是/opt/ibm/db2这个后面配置环境变量时要用到。注意下载完先核对文件大小。Linux 版服务器介质一般在 1.5GB 到 2GB 之间Windows 版会稍大一些。如果只有几百 KB大概率是下载中断或者被重定向到了说明页面。2.3 安装前的系统检查清单在 Linux 上装之前先跑几条命令确认系统状态。我一般会检查内核参数、内存和磁盘空间因为 DB2 对共享内存段和信号量的要求比 MySQL 严格得多。# 检查内存和交换分区DB2 实例至少需要 1GB 物理内存 free -h # 检查磁盘空间/opt 和 /home 至少留 10GB df -h /opt /home # 检查内核信号量参数DB2 需要足够的信号量集 ipcs -l # 检查当前用户是否有 root 权限或 sudo 权限 whoami这几条命令的输出要留意两个地方一是free里的 available 内存不能低于 1GB否则实例创建时会报内存不足二是ipcs -l里的max semaphores和max semaphores per array如果数值偏小需要改/etc/sysctl.conf加上kernel.sem 250 32000 32 128这一行然后sysctl -p生效。Windows 10 上则简单得多只要确保系统盘有 15GB 以上空间并且关闭了 Hyper-V 相关的虚拟化冲突如果之前装过 Docker 或 WSL2可能会和 DB2 的实例服务抢端口。3. Linux 与 Windows 10 双平台实操从解压到第一个查询3.1 Linux 下的静默安装与实例创建Linux 上我习惯用静默安装因为图形界面在服务器上基本用不了。先把下载的 tar.gz 解压到一个临时目录然后进到解压后的目录里找db2setup或者db2_install脚本。# 解压安装介质到 /tmp/db2v11 目录 mkdir -p /tmp/db2v11 tar -zxvf db2_v11.1_linux_x86_64.tar.gz -C /tmp/db2v11 # 进入解压目录查看安装脚本 cd /tmp/db2v11 ls -l # 执行静默安装-t 参数指定安装类型为典型安装 ./db2_install -t TYPICAL -p /opt/ibm/db2/V11.1-t TYPICAL表示典型安装会装上服务器核心组件和命令行工具但不含图形化客户端。-p指定安装路径我一般放在/opt/ibm/db2/V11.1这样多个版本可以共存切换时改环境变量就行。安装过程大概三到五分钟最后会提示安装成功。装完服务器组件后需要创建实例。实例是 DB2 的运行环境一个安装可以对应多个实例。# 创建实例实例名为 db2inst1所属用户为 db2inst1 /opt/ibm/db2/V11.1/instance/db2icrt -u db2inst1 db2inst1 # 切换到实例用户启动实例 su - db2inst1 db2start # 查看实例状态 db2ilist db2 get instancedb2icrt是创建实例的命令-u指定实例的 fenced 用户通常和实例名一致。创建完实例后一定要用su - db2inst1切过去再执行db2start因为实例进程是以实例用户的身份运行的。如果直接用 root 跑db2start会报权限错误。db2ilist列出当前安装下所有实例db2 get instance确认当前激活的是哪个实例。3.2 Windows 10 下的图形化安装与端口配置Windows 10 上安装 DB2 V11.1 相对直观双击 exe 自解压包会弹出一个安装向导。但有几个地方容易翻车一是安装路径不要带中文和空格默认的C:\Program Files\IBM\SQLLIB就挺好二是安装类型选“典型”还是“自定义”如果只是学习典型安装足够但记得勾选“命令行工具”和“IBM Data Studio”三是安装完成后实例会自动创建并启动但服务端口默认是 50000如果之前装过其他数据库占用了这个端口需要手动改。# Windows 下打开 DB2 命令行窗口执行以下命令查看实例 db2ilist # 查看数据库管理器配置确认服务端口 db2 get dbm cfg | findstr SVCENAME # 如果端口被占用修改端口为 50001 db2 update dbm cfg using SVCENAME 50001 db2stop db2startdb2 get dbm cfg会输出一大堆配置参数用findstr过滤出SVCENAME那一行看到端口号。如果确实冲突了用db2 update dbm cfg using SVCENAME 50001改掉然后重启实例。注意改完端口后客户端连接字符串里的端口也要同步改否则会报 SQL30081N 通信错误。3.3 创建第一个数据库并跑通查询实例起来之后就可以创建数据库了。DB2 创建数据库时会自动创建三个默认表空间SYSCATSPACE、TEMPSPACE1 和 USERSPACE1。我一般会额外指定一个缓冲池和页大小避免后续导入大表时性能拉胯。-- 创建一个名为 TESTDB 的数据库页大小 8KB缓冲池 1000 页 CREATE DATABASE TESTDB AUTOMATIC STORAGE YES PAGESIZE 8192 BUFFERPOOL BP8K SIZE 1000; -- 连接到新创建的数据库 CONNECT TO TESTDB; -- 创建一个简单的测试表 CREATE TABLE EMPLOYEE ( EMPNO CHAR(6) NOT NULL PRIMARY KEY, FIRSTNME VARCHAR(12), LASTNAME VARCHAR(15), SALARY DECIMAL(9,2) ); -- 插入两条数据 INSERT INTO EMPLOYEE VALUES (000010, JOHN, SMITH, 50000.00); INSERT INTO EMPLOYEE VALUES (000020, JANE, DOE, 60000.00); -- 查询验证 SELECT * FROM EMPLOYEE WHERE SALARY 55000;PAGESIZE 8192指定表空间页大小为 8KB这是 DB2 里比较通用的设置既能存下较大的行又不会浪费太多空间。BUFFERPOOL BP8K SIZE 1000创建了一个 1000 页的缓冲池页大小必须和表空间页大小匹配。创建完数据库后CONNECT TO TESTDB是必须的否则后续的 SQL 会报“没有数据库连接”。插入数据后SELECT语句验证了基本的查询路径。如果这一步能跑通说明实例、数据库、表空间、缓冲池这条链路都是通的。4. 避坑指南DB2 V11.1 安装与连接中最容易翻车的五个点4.1 现象db2start 报 SQL1042C 错误原因实例用户的环境变量没有加载或者实例目录权限不对。常见于手动创建实例用户后没有把用户加到正确的组里。解决先确认实例用户属于db2iadm1组用id db2inst1查看。如果不在用usermod -a -G db2iadm1 db2inst1加进去。然后检查/home/db2inst1/sqllib目录是否存在且权限为 755。最后用su - db2inst1重新登录确保环境变量DB2INSTANCE和INSTHOME正确设置。4.2 现象Windows 10 上安装到一半卡死原因Windows Defender 或者第三方杀毒软件在扫描安装程序释放的临时文件导致安装进程被阻塞。解决安装前临时关闭实时保护或者把安装目录和C:\Program Files\IBM加入排除列表。如果已经卡死不要强行结束进程等十分钟看看会不会恢复。实在不行就重启系统清理%TEMP%目录下的 DB2 临时文件夹重新安装。4.3 现象客户端连接报 SQL30081N 通信错误原因服务端实例没有监听正确的端口或者防火墙拦截了 50000 端口。解决在服务端用netstat -an | grep 50000确认端口处于 LISTEN 状态。如果没有检查db2 get dbm cfg里的SVCENAME是否配置正确以及/etc/services里有没有把服务名映射到端口。Linux 上还要检查 iptables 或 firewalld 是否放行了该端口。Windows 上则检查入站规则。4.4 现象创建数据库时报 SQL1052N 路径不存在原因DB2 默认把数据库创建在实例目录下的NODE0000子目录里如果实例目录所在磁盘空间不足或者路径权限不对就会报这个错。解决用db2 get dbm cfg | grep -i dftdbpath查看默认数据库路径。如果空间不够可以改到其他盘db2 update dbm cfg using DFTDBPATH /new/path。改完重启实例。注意新路径必须对实例用户可写。4.5 现象导入 CSV 数据时中文乱码原因DB2 的代码页和 CSV 文件的编码不一致。Linux 上 DB2 默认用 UTF-8Windows 上默认用系统代码页比如 GBK。解决导入前先用db2 get db cfg for TESTDB | grep -i codeset查看数据库代码页。如果是 UTF-8确保 CSV 文件也是 UTF-8 编码。Windows 上可以用 Notepad 转码Linux 上用iconv -f GBK -t UTF-8 source.csv target.csv。导入命令里加上codepage 1208强制指定 UTF-8。5. 进阶技巧用 EXPLAIN 和快照监控验证 DB2 V11.1 的真实性能装完只是第一步真正要判断这套环境能不能用来做性能验证得看优化器给出的执行计划是否符合预期。DB2 V11.1 提供了EXPLAIN工具和性能快照监控这两个东西用好了比盲目跑 benchmark 靠谱得多。先创建解释表。DB2 需要一组专门的表来存放执行计划这些表默认不存在得手动建。# 切换到实例用户进入 DB2 命令行 su - db2inst1 db2 connect to testdb # 创建解释表-d 指定数据库名 db2 -tvf /opt/ibm/db2/V11.1/sqllib/misc/EXPLAIN.DDLEXPLAIN.DDL是 DB2 自带的脚本执行后会创建EXPLAIN_INSTANCE、EXPLAIN_STATEMENT等表。执行过程中如果报“表已存在”说明之前建过可以忽略。建完后用db2exfmt工具格式化输出执行计划。-- 开启解释模式为当前会话收集执行计划 SET CURRENT EXPLAIN MODE YES; -- 执行一条复杂查询优化器会把计划写入解释表 SELECT E.LASTNAME, D.DEPTNAME FROM EMPLOYEE E JOIN DEPARTMENT D ON E.WORKDEPT D.DEPTNO WHERE E.SALARY 50000; -- 关闭解释模式 SET CURRENT EXPLAIN MODE NO;SET CURRENT EXPLAIN MODE YES会让后续的 SQL 在执行时把访问计划写入解释表。注意这个模式只对当前连接有效断开后自动失效。执行完查询后用db2exfmt生成可读的计划报告。# 生成最近一次解释的执行计划-1 表示最近一次 db2exfmt -d testdb -1 -o /tmp/explain_output.txt # 查看输出文件的前 50 行 head -50 /tmp/explain_output.txtdb2exfmt的输出里重点看Access Plan部分。如果看到TBSCAN全表扫描出现在大表上而你以为会走索引那就说明统计信息过期了需要执行RUNSTATS。如果看到NLJOIN嵌套循环连接在小表驱动大表时出现可以考虑用OPTIMIZE FOR N ROWS或者调整连接顺序。另一个实用工具是性能快照监控。DB2 的快照函数可以抓取实例、数据库、表空间、缓冲池等多个层级的实时状态。-- 抓取数据库级别的快照查看逻辑读和物理读 SELECT SUBSTR(SNAPSHOT_TIMESTAMP,1,19) AS SNAP_TIME, TOTAL_LOGICAL_READS, TOTAL_PHYSICAL_READS, BUFFERPOOL_HIT_RATIO_PERCENT FROM TABLE(SYSPROC.DB_GET_INFO(TESTDB, -1)) AS T;SYSPROC.DB_GET_INFO是 DB2 V11.1 里比较新的监控接口-1表示当前数据库。BUFFERPOOL_HIT_RATIO_PERCENT如果低于 90%说明缓冲池偏小需要加大BUFFERPOOL的 SIZE。我一般会把这个查询和db2exfmt配合使用先用快照定位到哪个表空间或缓冲池有瓶颈再用解释计划看具体 SQL 的访问路径。从那以后我每次搭完 DB2 环境都会先跑一遍RUNSTATS再开解释模式跑几条典型查询确认优化器选的路径和预期一致。这个习惯帮我省掉了至少三次“明明建了索引却还是全表扫描”的排查时间。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站