我有一个包含三个表 A、B 和 C 的 DB2 数据库。
数据库是这样创建的:
创建数据库 DB 别名 DB AUTOMATIC STORAGE YES ON /home/db2inst1 使用 codedeset UTF-8 区域 en PAGESIZE 32768
- 表 A 为 28 列宽,1.8 米。行和 PID 是主键。这些列大多具有 int 类型,但有些是 varchar(200-400)。索引:PID
- 表 B 为 7 列宽,具有 14 个磨机。行和主键 PID_L。它还有 C_SOURCE 和 ROW_COUNT 列。索引:PID,C_SOURCE
- 表 C 为 20 列宽,带有 14 个磨机。行和主键 PID_S。它还有一个列 ROLE。索引:PID,PID_S
所有表都有列 PID
我需要一个汇总表 B 和 C 中的一些信息的表。选择适当项目的查询是:
SELECT
T.*,
(
SELECT
COALESCE(SUM(ROW_COUNT),0)
FROM
C as ITS,
B as ITL
WHERE
ITS.ROLE = 1
AND ITS.PID = ITL.PID
AND ITS.PID_S = ITL.C_SOURCE
AND ITS.PID = T.PID
) AS RR
FROM
A as T;
运行此查询时,DB2 服务器快速使用大约 3Gb 内存。但是,使用 top 时,CPU 使用率很少超过 5%,有的会跃升至 13% 左右。DB2 服务器是一个 RedHat6.2 VM,有 4 个内核,每个内核 2Ghz。
我让这个查询运行了 24 小时,似乎没有发生任何事情。其他查询,例如简单的选择等等,运行顺畅。
问题:
- 对于可能完成相同任务的不同的、更有效的查询,您有什么建议吗?
- 这个性能问题是否可能与数据库的配置有关?