新書推薦:
《
泰山:一种中国信仰专论(法国汉学经典译丛)
》
售價:NT$
380.0
《
花外集斠箋
》
售價:NT$
704.0
《
有兽焉.8
》
售價:NT$
305.0
《
大学问·明清经济史讲稿
》
售價:NT$
330.0
《
中国国际法年刊(2023)
》
售價:NT$
539.0
《
实用对联大全
》
售價:NT$
225.0
《
想象欧洲丛书(7册)欧洲史
》
售價:NT$
1880.0
《
没有伞的孩子必须努力奔跑
》
售價:NT$
149.0
|
編輯推薦: |
本书作者在DB2China数据库论坛担任热点讨论版块版主,主持多次热点讨论以及专家现场诊断,擅长DB2数据库及相关产品的性能调优及故障分析,对DB2技能及实践经验有多年积累,并且近年来多位业界专家一直在积极推动DB2领域的技术交流,真正理解DB2技术人员真正的需求与痛楚,是DB2系统知识及技巧精髓的热心分享者及贡献者。
作者本人出于对DB2的狂热与追求,通过长期的凝练与汇聚,将DB2知识系统化,把DB2数据库调优技巧的精髓热心地分享给广大读者,并且凭借深厚而扎实的理论及经验,对DB2数据库的内部进行了深入解析,这是对数据库领域所做出的重要贡献与精彩强音!
单看“内部解析”四个字,就已经能体现本书的宝贵价值,在“内部解析”的基础上进行“性能调优”,定会让您的DB2“跑得更快”!
|
內容簡介: |
本书以优化为主题,根据数据库内部原理将DB2数据库对SQL语句及其他操作的内部机制进行详细剖析,并将RDS、DMS、IXM、BPS等DB2内部组件不为人知的一面展现给大家,以期做到对数据库的调优过程知其然并知其所以然。同时本书结合响应时间与资源瓶颈两种性能问题的现象,对数据库调优的整体思路进行详细讲解,对原来老式的调优思路进行整理和改动,结合了DB2
V10.1版本的一些新的监控工具及特性,以一种全新的方式阐述DB2数据库性能调优的基本思路及实践方法。
本书适合DB2数据库管理员、数据库相关应用程序开发人员、系统管理员、系统架构师及有一定数据库基础的用户自学和参考,也可作为DB2培训的参考用书。
|
關於作者: |
洪烨,毕业于湖南大学,曾在IBM担任数据库现场技术支持,为北京移动、北京联通、中国银联、中国银行、中信银行、联想集团、国家气象局、中华联合保险、唐山商业银行等多家企业进行DB2故障诊断、技术支持以及技术培训工作,拥有DB2开发、高级管理以及AIX管理等多项国际认证。
并在DB2China数据库论坛担任热点讨论版块版主,主持多次热点讨论以及专家现场诊断,擅长DB2数据库及相关产品的性能调优及故障分析,对DB2技能及实践经验有多年积累。
近年来多位业界专家一直在积极推动DB2领域的技术交流,真正理解DB2技术人员真正的需求与痛楚,是DB2系统知识及技巧精髓的热心分享者及贡献者。
|
目錄:
|
第1篇 性能定义及整体架构
第1章 DB2性能优化概述
1.1 性能目标
1.1.1 响应时间
1.1.2 吞吐量
1.2 工作负载类型
1.2.1 联机事务处理(OLTP)
1.2.2 联机分析处理(OLAP)
1.2.3 决策支持系统(DSS)
1.2.4 企业资源规划(ERP)
1.3 影响性能的因素
1.3.1 软件代码编写对性能的影响
1.3.2 应用程序架构设计对性能的影响
1.3.3 数据库设计对性能的影响
1.3.4 系统设计对性能的影响
1.4 本章小结
第2章 DB2架构介绍
2.1 DB2整体概况
2.1.1 DB2进程线程体系简介
2.1.2 DB2内存体系简介
2.1.3 DB2相关文件简介
2.2 DB2组件介绍
2.2.1 操作系统服务
2.2.2 基本系统调度
2.2.3 关系数据服务
2.2.4 数据管理服务
2.2.5 缓冲池服务
2.2.6 数据保护服务
2.3 SQL语句处理过程
2.3.1 数据查询语言(DQL)
2.3.2 数据操作语言(DML)
2.3.3 事务处理语言(TPL)
2.4 本章小结
第2篇 性能监控工具及监控技巧
第3章 性能监控工具
3.1 实时监控工具
3.1.1 db2trc
3.1.2 db2top
3.1.3 db2pd
3.2 历史监控工具
3.2.1 快照
3.2.2 快照视图及快照函数
3.2.3 事件监视器
3.3 DB2工作负载管理(DB2 Workload Manager)
3.3.1 标识阶段(Identification Stage)
3.3.2 管理阶段(Management Stage)
3.3.3 监控阶段(Monitoring Stage)
3.4 语句解释说明工具
3.4.1 db2exfmt
3.4.2 db2expln
3.4.3 语句解释说明工具对比
3.5 监控技巧
3.5.1 查找数据库中耗时最长的语句
3.5.2 分析特定语句的时间分布
3.5.3 捕获所有的SQL语句
3.6 本章小结
第3篇 性能分析及内部原理剖析
第4章 深入探讨优化器
4.1 语法语义分析
4.1.1 查询解析
4.1.2 语义检查
4.2 SQL语句重写
4.2.1 谓词简介
4.2.2 扫描方式
4.2.3 连接运算
4.2.4 查询重写
4.3 优化器编译
4.3.1 生成备选执行计划
4.3.2 基数评估
4.3.3 成本计算公式
4.3.4 生成可执行的代码
4.4 基数评估检查
4.4.1 通过COUNT语句检查基数评估
4.4.2 使用Section Actuals分析执行计划
4.5 本章小结
第5章 SQL语句性能优化之7种武器
5.1 长生剑——基本统计信息
5.1.1 统计信息收集方法
5.1.2 统计信息收集策略
5.2 碧玉刀——分布统计信息
5.3 孔雀翎——列组统计信息
5.4 离别钩——REOPT
5.4.1 REOPT处理机制
5.4.2 REOPT的启用方式及监控
5.5 多情环——静态视图
5.6 霸王枪——优化概要文件
5.6.1 优化概要文件的使用方法
5.6.2 优化概要文件规则
5.7 拳头——语句优化
5.8 本章小结
第6章 数据对象存储设计
6.1 表类型及设计方法
6.1.1 常规表
6.1.2 MDC表
6.1.3 分区表
6.1.4 MQT
6.1.5 表设计原则
6.2 索引类型及设计方法
6.2.1 索引的作用
6.2.2 索引创建原则
6.2.3 索引键顺序的选择
6.2.4 索引设计性能考虑
6.3 DB2设计顾问程序
6.3.1 战略性的索引创建
6.3.2 战略性的表类型选择
6.4 本章小结
第7章 DB2物理结构深入解析
7.1 表空间结构剖析
7.1.1 SMS(系统管理表空间)结构剖析
7.1.2 DMS(数据库管理表空间)结构剖析
7.1.3 高水位对于性能的影响
7.1.4 对容器进行重新平衡对性能的影响
7.2 数据页详解
7.2.1 数据页结构剖析
7.2.2 字段类型与行迁移
7.2.3 页重组
7.3 索引页详解
7.3.1 索引内部结构剖析
7.3.2 索引的分裂
7.3.3 索引维护和清除
7.4 日志文件结构剖析
7.5 本章小结
第8章 IO管理及优化
8.1 数据IO管理
8.1.1 缓冲池IO原理
8.1.2 缓冲池逻辑读取
8.1.3 缓冲池物理读取
8.1.4 缓冲池写入操作
8.1.5 基于块的缓冲池IO
8.1.6 缓冲池IO监控
8.1.7 直接IO管理
8.2 日志IO管理
8.2.1 日志读取
8.2.2 日志写入
8.2.3 日志IO原理
8.2.4 日志文件IO相关调优参数
8.2.5 归档日志对IO的影响
8.3 本章小结
第9章 内存管理
9.1 内存模型
9.1.1 实例共享内存
9.1.2 数据库共享内存
9.1.3 应用程序全局内存
9.1.4 代理程序私有内存
9.1.5 排序堆
9.1.6 其他内存区域
9.2 STMM
9.2.1 STMM运行机制
9.2.2 STMM监控
9.3 如何定位及修复内存泄漏
9.3.1 内存泄漏诊断方法
9.3.2 内存泄漏的处理方法
9.4 本章小结
第10章 DB2等待事件
10.1 锁对象及兼容性
10.1.1 锁对象及锁模式
10.1.2 锁兼容性及锁转换
10.2 锁问题的监控与解决
10.2.1 锁事件监控
10.2.2 锁问题解决方法
10.2.3 锁案例分享
10.3 latch事件
10.3.1 latch监控
10.3.2 案例分析
10.4 本章小结
第4篇 实用工具调优及操作系统优化
第11章 实用工具调优
11.1 备份恢复工具
11.1.1 backup
11.1.2 restore
11.2 数据移动
11.2.1 export
11.2.2 import
11.2.3 load
11.3 其他管理工具
11.3.1 reorg
11.3.2 runstats
11.4 本章小结
第12章 操作系统相关问题
12.1 AIX
12.1.1 虚拟内存管理
12.1.2 磁盘及文件系统管理
12.1.3 网络调优参数
12.1.4 操作系统相关参数
12.1.5 系统监控工具
12.2 Windows
12.2.1 内存管理
12.2.2 磁盘及文件系统相关参数
12.2.3 系统监控工具
12.3 本章小结
第5篇 性能分析思路及优化总结
第13章 性能问题分析思路
13.1 响应时间问题
13.1.1 响应时间总结
13.1.2 通过快照进行分析
13.1.3 通过快照函数进行分析
13.2 资源占用问题
13.2.1 磁盘瓶颈
13.2.2 CPU瓶颈
13.2.3 内存瓶颈
13.3 本章小结
|
內容試閱:
|
9.3 如何定位及修复内存泄漏
在怀疑遇到内存泄漏的问题之前,必须谨慎地判断当前数据库中是否真实存在内存泄漏。判断数据库中存在内存泄漏时需要注意以下几点:
— 系统中的内存在逐渐减少,甚至导致换页(paging);
— SQL语句越来越慢(经常是换页导致);
— 随着时间增长,由DB2分配的内存在不断增加。
9.3.1 内存泄漏诊断方法
正如之前介绍的,从DB2
V9.5版本开始,可以很轻松地检查当前各个内存集的使用情况。每个数据库分区都会保留当前分区中内存使用信息的实时状态。其中包括所有的私有内存、应用内存、数据库共享内存、数据库管理器共享内存及分区间共享的FCM内存。我们可以通过db2pd
-dbptnmem命令观察当前数据库中各部分内存的使用情况。输出结果如下:
Database Partition 0 Memory Statistics
Controller Enabled: Y
Controller Automatic: Y
Memory Limit:
28609436 KB 内存限制(INSTANCE_MEMORY的值)
Current usage: 898240
KB 当前内存的使用量
HWM
usage:
898240 KB 内存最高使用量
Cached memory: 271424
KB 总共的缓存大小
Individual Memory Consumers:
Name
Mem Used KB HWM Used KB Mem Cached KB
============================================================
APPL-LIAM
160000
160000
159616
DBMS-lfinnie
36608
36608
3648
FMP_RESOURCES
22528
22528
0
PRIVATE
12032
12032
256
FCM_RESOURCES
10048
10048
0
LCL-p1130882
128
128
0
DB-LIAM
656896
656896
107904
可以看到当前分区中INSTANCE_MEMORY的限制值大约为28GB,当前内存总共使用了898MB大小。其中271MB作为申请后并未使用的内存,意味着当前已经提交的内存大约为627MB。如果将这些内存按照内存集分开观察,可以分为以下几个部分:Mem
Used代表向操作系统中已经申请的内存部分,DB2会提前向操作系统申请部分多余内存;Mem
Used区域是目前可以被DB2分配给各个内存池的总共大小;CACHED部分是还没有被任何内存池占用的内存数量,同时也代表当操作系统中内存不足时,可以释放的最大内存数量。
对于单次调用db2pd
-dbptnmem命令所得到的输出结果,很难从中发现当前是否存在潜在的内存泄漏问题。还需要了解以下情况来证实我们的猜测:
— 如果没有任何激活的应用程序,实际提交的应用共享内存应该非常小(Used -Cached);
— 如果没有任何监控开关打开,则实例共享内存的值应该非常小;
—
私有内存的大小应该根据线程数量浮动。如果发现每个线程需要消耗1~2MB的内存,代表可能会发生内存泄漏(除非启用私有排序,如果启用私有排序,则每个线程消耗的内存应该不大于SORTHEAP定义的值);
—
对于单分区实例,FCM_RESOURCES应该是不变的。对于多分区实例,如果存在大量跨节点连接的操作,则FCM_RESOURCES会占用相当大一部分内存;
— 对于数据库共享内存,其内存集大小应该等于内部所有内存池之和(缓冲池、锁列表、Package cache等)。
如果有缓慢的内存泄露发生,仅仅祈祷是不起作用的,需要定期检查当前正在使用的内存量。在开发环境中,以下几个关键点在对内存泄露检查时非常有用。例如:
— 数据库激活之后,还没有任何应用程序连接时;
— 应用程序准备执行前;
— 应用程序执行过程中;
— 应用程序执行后。
判断内存泄漏需要定期地对比当前数据库中的内存情况。在应用程序数量、执行语句类型及数据量变化不大的情况下,内存的使用应该也会保持恒定。如果发现内存在缓慢增长,则可以认为是内存出现泄漏。但是有一点例外,当启用STMM功能且数据库参数DATABASE_MEMORY是自动调整的情况下,可能会出现数据库共享内存会基于数据库中的空闲内存数量增加或减少,但是其他内存集不会受到任何影响。
……
|
|