1. 首页 > DB2教程 > 正文

DB2教程FG087-DB2架构评审实战

风哥教程参考DB2官方文档Architecture、Best Practices等内容,详细介绍架构评审、设计原则、优化建议等。更多视频教程www.fgedu.net.cn

目录大纲

Part01-架构评审概述

1.1 架构评审重要性

架构评审重要性:

  • 发现设计缺陷
  • 优化性能瓶颈
  • 提高系统可靠性
  • 降低运维成本

1.2 评审范围

  • 数据库设计:表结构、索引、约束
  • 性能设计:SQL优化、缓存策略
  • 高可用设计:备份、容灾、HA
  • 安全设计:权限、加密、审计

Part02-评审要点

2.1 表设计评审

# 表设计评审检查项
# 1. 主键设计
SELECT
TABNAME,
COLNAMES
FROM SYSCAT.INDEXES
WHERE UNIQUERULE = ‘P’
AND TABSCHEMA = ‘FGEDB’;

# 2. 外键设计
SELECT
CONSTNAME,
TABNAME,
REFTABNAME,
COLCOUNT
FROM SYSCAT.REFERENCES
WHERE TABSCHEMA = ‘FGEDB’;

# 3. 索引设计
SELECT
INDNAME,
TABNAME,
COLNAMES,
UNIQUERULE,
CARD,
CLUSTERRATIO
FROM SYSCAT.INDEXES
WHERE TABSCHEMA = ‘FGEDB’
ORDER BY TABNAME;

# 4. 分区设计
SELECT
TABNAME,
DATAPARTITIONNAME,
LOWVALUE,
HIGHVALUE
FROM SYSCAT.DATAPARTITIONS
WHERE TABSCHEMA = ‘FGEDB’;

# 5. 表空间设计
SELECT
TBSP_NAME,
TBSP_TYPE,
TBSP_PAGE_SIZE,
TBSP_TOTAL_PAGES,
TBSP_USED_PAGES
FROM SYSIBMADM.TBSP_UTILIZATION;

2.2 性能评审

# 性能评审检查项
# 1. 慢查询分析
SELECT
SUBSTR(STMT_TEXT, 1, 100) AS STMT_TEXT,
TOTAL_EXEC_TIME,
TOTAL_USR_CPU_TIME,
TOTAL_SYS_CPU_TIME,
NUM_EXECUTIONS
FROM SYSIBMADM.TOP_DYNAMIC_SQL
ORDER BY TOTAL_EXEC_TIME DESC
FETCH FIRST 20 ROWS ONLY;

# 2. 缓冲池命中率
SELECT
BPNAME,
DATA_HIT_RATIO_PERCENT,
INDEX_HIT_RATIO_PERCENT
FROM SYSIBMADM.BP_HITRATIO;

# 3. 排序溢出
SELECT
TOTAL_SORTS,
TOTAL_SORT_OVERFLOWS,
ROUND(TOTAL_SORT_OVERFLOWS * 100.0 / NULLIF(TOTAL_SORTS, 0), 2) AS OVERFLOW_PERCENT
FROM SYSIBMADM.SNAPDB;

# 4. 锁等待
SELECT
LOCK_NAME,
LOCK_OBJECT_TYPE,
LOCK_MODE,
LOCK_WAIT_MODE,
AGENT_ID_HOLDING_LK
FROM SYSIBMADM.LOCKWAITS;

# 5. 表空间使用
SELECT
TBSP_NAME,
ROUND(TBSP_USED_PAGES * 100.0 / TBSP_TOTAL_PAGES, 2) AS USAGE_PERCENT
FROM SYSIBMADM.TBSP_UTILIZATION
WHERE TBSP_USED_PAGES * 100.0 / TBSP_TOTAL_PAGES > 80;

Part03-评审方法

3.1 自动化评审脚本

#!/bin/bash
# db2_architecture_review.sh

DBNAME=FGEDB
OUTPUT_DIR=/db2/review
DATE=$(date +%Y%m%d)

mkdir -p $OUTPUT_DIR/$DATE

# 1. 表设计评审
db2 connect to $DBNAME
db2 “export to $OUTPUT_DIR/$DATE/table_design.del of del
select tabname, card, npages, fpages from syscat.tables
where tabschema=’FGEDB'”

# 2. 索引设计评审
db2 “export to $OUTPUT_DIR/$DATE/index_design.del of del
select indname, tabname, colnames, uniquerule, card
from syscat.indexes where tabschema=’FGEDB'”

# 3. 性能评审
db2 “export to $OUTPUT_DIR/$DATE/slow_queries.del of del
select substr(stmt_text,1,100), total_exec_time
from sysibmadm.top_dynamic_sql
order by total_exec_time desc fetch first 20 rows only”

# 4. 缓冲池评审
db2 “export to $OUTPUT_DIR/$DATE/bufferpool.del of del
select bpname, data_hit_ratio_percent, index_hit_ratio_percent
from sysibmadm.bp_hitratio”

# 5. 表空间评审
db2 “export to $OUTPUT_DIR/$DATE/tablespace.del of del
select tbsp_name, round(tbsp_used_pages*100.0/tbsp_total_pages,2)
from sysibmadm.tbsp_utilization”

db2 connect reset

# 生成评审报告
cat > $OUTPUT_DIR/$DATE/review_report.txt <

3.2 评审报告模板

# DB2架构评审报告模板

## 1. 基本信息
– 数据库名称:FGEDB
– 数据库版本:DB2 11.5
– 评审日期:2026-04-08
– 评审人员:风哥

## 2. 表设计评审
### 2.1 表数量统计
– 总表数:100
– 分区表数:10
– MDC表数:5

### 2.2 主键设计
– 有主键表:95
– 无主键表:5

### 2.3 索引设计
– 总索引数:200
– 唯一索引:50
– 复合索引:100

### 2.4 问题发现
– 无主键表:5个
– 缺少索引:10个
– 冗余索引:3个

## 3. 性能评审
### 3.1 慢查询
– 慢查询数量:20
– 平均执行时间:5秒

### 3.2 缓冲池
– 缓冲池命中率:95%
– 建议增大缓冲池

### 3.3 排序溢出
– 排序溢出率:3%
– 建议增大SORTHEAP

## 4. 高可用评审
### 4.1 备份策略
– 全量备份:每日
– 增量备份:每小时
– 备份保留:7天

### 4.2 HADR配置
– 主库:192.168.1.10
– 备库:192.168.1.11
– 同步模式:SYNC

## 5. 安全评审
### 5.1 权限管理
– 用户数量:50
– 角色数量:10
– 过度授权:5个

### 5.2 审计配置
– 审计状态:已启用
– 审计范围:ALL
– 审计日志保留:1年

## 6. 优化建议
1. 为无主键表添加主键
2. 为缺少索引的表创建索引
3. 删除冗余索引
4. 增大缓冲池大小
5. 增大SORTHEAP参数
6. 回收过度授权的权限

## 7. 风险评估
– 高风险:无主键表可能导致数据重复
– 中风险:缺少索引影响查询性能
– 低风险:缓冲池命中率略低

Part04-优化建议

4.1 表设计优化

# 1. 添加主键
ALTER TABLE ORDERS ADD CONSTRAINT PK_ORDERS PRIMARY KEY (ORDER_ID);

# 2. 添加外键
ALTER TABLE ORDER_ITEMS
ADD CONSTRAINT FK_ORDER_ITEMS_ORDER
FOREIGN KEY (ORDER_ID) REFERENCES ORDERS(ORDER_ID);

# 3. 创建索引
CREATE INDEX IDX_ORDERS_CUSTOMER ON ORDERS(CUSTOMER_ID, CREATE_TIME DESC);

# 4. 创建分区表
CREATE TABLE ORDERS_PARTITIONED (
ORDER_ID VARCHAR(32) NOT NULL,
CUSTOMER_ID VARCHAR(32),
CREATE_TIME TIMESTAMP NOT NULL,
CONSTRAINT PK_ORDERS_PARTITIONED PRIMARY KEY (ORDER_ID, CREATE_TIME)
) PARTITION BY RANGE (CREATE_TIME)
(
PARTITION P202601 STARTING ‘2026-01-01’ ENDING ‘2026-01-31’,
PARTITION P202602 STARTING ‘2026-02-01’ ENDING ‘2026-02-28’
);

# 5. 创建MDC表
CREATE TABLE SALES_MDC (
SALE_ID BIGINT NOT NULL,
SALE_DATE DATE NOT NULL,
REGION VARCHAR(50) NOT NULL,
CONSTRAINT PK_SALES_MDC PRIMARY KEY (SALE_ID)
) ORGANIZE BY (SALE_DATE, REGION);

4.2 性能优化

# 1. 增大缓冲池
ALTER BUFFERPOOL BP_DEFAULT SIZE 200000;

# 2. 增大排序堆
UPDATE DATABASE CONFIGURATION USING SORTHEAP 16384 IMMEDIATE;

# 3. 优化SQL
# 添加索引避免全表扫描
CREATE INDEX IDX_ORDERS_STATUS ON ORDERS(ORDER_STATUS, CREATE_TIME);

# 使用索引提示
SELECT * FROM ORDERS
WHERE ORDER_STATUS = ‘PENDING’
OPTIMIZE FOR 100 ROWS;

# 4. 创建MQT
CREATE TABLE MQT_ORDER_SUMMARY AS (
SELECT
DATE(CREATE_TIME) AS ORDER_DATE,
COUNT(*) AS ORDER_COUNT,
SUM(TOTAL_AMOUNT) AS TOTAL_AMOUNT
FROM ORDERS
GROUP BY DATE(CREATE_TIME)
) DATA INITIALLY DEFERRED REFRESH DEFERRED;

REFRESH TABLE MQT_ORDER_SUMMARY;

# 5. 更新统计信息
RUNSTATS ON TABLE ORDERS WITH DISTRIBUTION AND INDEXES ALL;

Part05-风哥经验总结与分享

5.1 架构评审要点

  • 定期进行架构评审
  • 建立评审标准
  • 使用自动化工具
  • 生成详细报告
  • 跟踪优化建议
  • 建立评审档案

5.2 评审建议

评审项 评审频率 重点关注
表设计 每季度 主键、索引、分区
性能 每月 慢查询、缓冲池
高可用 每半年 备份、HADR

5.3 运维要点

  • 定期执行架构评审
  • 跟踪评审发现的问题
  • 实施优化建议
  • 验证优化效果
  • 更新评审报告
  • 建立评审知识库
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息