搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
深入解析DB2——高级管理、内部体系结构与诊断案例
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302201373
  • 作      者:
    牛新庄著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2009
收藏
编辑推荐
  

《深入解析DB2:高级管理、内部体系结构与诊断案例》特色:
  ◆ 本书把DB2作为一个运行在操作系统上的普通程序,这样更容易理解DB2在系统资源方面如何与操作系统交互的。
  ◆ 贯穿全书的是丰富的实践案例和脚本,读者可以从这些案例和脚本中观察出作者诊断和解决问题的思路。
  ◆ 本书把对DB2数据库内核讲解提升到关系型数据库管理系统应具有的组件和功能高度,熟悉其他关系型数据库的读者可以触类旁通很容易理解DB2数据库。
  本书第二版已经出版,点击查看《高级进阶DB2:内部结构、高级管理与问题诊断(第2版)》

展开
作者简介
  牛新庄博士,是国内顶尖数据库维护、优化和架构专家,以217万年薪受聘于中国建行总行资深技术专家,在国内的金融六大行、证券、保险、电信、邮政、移动等行业,以及青岛海尔、云南红塔、中远集团、上海宝钢等知名企业做数据库的设计、维护、问题诊断和性能调优。
    牛新庄博士拥有20多项国际厂商认证(包括DB2 V5~V9的全部认证),获得过国内数据库领域最高荣誉的“2006年中国首届杰出数据库工程师”奖,首届IBM杰出软件专家奖,“2006年IT 168技术卓越”奖等奖项。
展开
内容介绍

     数据库内核是数据库系统稳定运行的心脏,DB2数据库内核庞大而复杂。本书从DB2内核组件入手,同时介绍了其与操作系统在进程、共享内存、信号量之间的关系。作者在本书中重点介绍了各个内部组件的层次与功能、内存体系结构、存储内部结构、高级锁等。优化器是任何数据库执行SQL的关键部分,本书对优化器产生的各种执行计划进行了详细解释,这对于理解DB2内部工作原理大有裨益。同时,本书还介绍了DB2各种诊断工具的使用,各种数据库配置参数含义及调整、数据库系统视图等。
本书封面贴有清华大学出版社防伪标签,无标签者不得销售。
本书第二版已经出版,点击查看《高级进阶DB2:内部结构、高级管理与问题诊断(第2版)》

展开
精彩书摘
  DB2进程体系结构
  UNIX和Linux用户通常会检查运行在其服务器上的进程或线程,以分析可能的问题及检查服务器中消耗的资源。该信息不仅对执行问题和资源分析的系统管理员有用,而且对于那些开发确保应用高度可用性和处理故障转移脚本(这些脚本监控DB2进程,以确定何时需要进行诸如数据库重新启动或服务器故障转移之类的操作)的数据库管理员也很有用。
  如果您正在使用AIX,则可以使用命令“ps-ef”检查进程。在Solaris和HP-UX上,“ps-ef”将只显示所有服务器端进程(例如代理程序、记录器、页面清除程序和预取程序)的db2sysc进程(主DB2引擎进程)。如果您正在使用Solaris和HP-UX,利用命令“/usr/ucb/ps -axw”您可以看到这些服务器端进程。这两种版本的“ps”命令都可以在Linux上使用。
  当在运行DB2数据库客户机或服务器的计算机上执行该命令时,您可能会看到列出了多个DB2进程。本章的目的是详细讲解这些进程的工作原理,并解释它们的作用以及它们何时可能会运行。通过本章内容,您将会理解每个DB2进程,当您看到这些进程时,您会明白DB2正在执行什么操作。
  本章主要讲解如下内容:
  ● DB2进程技术模型
  ● 代理进程通信
  ● 实用程序相关进程
  ● DB2 V9.5多线程体系结构
  2.1  DB2 进程技术模型
  DB2进程技术模型的知识可以帮助您确定问题的性质,因为它会帮助您理解数据库管理器和与其相关联的组件如何交互作用。所有DB2服务器使用的进程技术模型使数据库服务器与客户机以及本地应用程序之间的通信更加容易。它还确保数据库应用程序独立于数据库控制块和关键数据库文件之类的资源。
  对于正在访问的每个数据库,启动各种引擎调度单元(Engine Dispatchable Unit,EDU)以处理各种数据库任务,例如预取、通信和日志记录。数据库代理程序是一类特殊的EDU,创建它们是为了处理数据库的应用程序请求。
  数据库会为每个客户机应用程序连接分配一个协调代理程序。协调代理程序代表应用程序工作,并根据需要使用专用内存、进程间通信(IPC)或远程通信协议与其他代理程序通信。
  DB2进程体系结构提供一个防火墙,以便应用程序在不同于DB2的地址空间中运行。防火墙将数据库和数据库管理器与应用程序、存储过程和用户定义的函数(UDF)隔开。防火墙维护数据库中数据的完整性,原因是它禁用应用程序编程错误覆盖数据库管理器的内部缓冲区或文件。防火墙还提高了可靠性,原因是应用程序错误不能使数据库管理器崩溃。DB2的进程技术模型如图2-1、图2-2所示。
  图2-1  DB2进程技术模型图1(适用于DB2 V9.5之前版本)
  下面我们详细介绍DB2进程技术模型中的相关进程。
  图2-2  DB2进程技术模型图2
  2.1.1  与操作系统相关的进程
  我们都知道DB2是安装在操作系统上的,因而在我们使用DB2数据库时,会产生一些和操作系统相关的进程,通常这些进程的owner是操作系统的root用户。下面是在AIX上我们使用“ps –ef |grep –I db2”命令的输出结果:
  $ ps -ef |grep db2
  owner                  pid                  ppid
  ------------------------------------------------------------------------
  root 315626        1              0 02:31:45  -  0:00 db2wdog 0
  db2inst1 434408 536582              0 02:31:47  -  0:00 db2srvlst 0
  db2inst1 438308 520202              0 02:31:48  -  0:01 db2hmon 0
  db2inst1 499808 536582     0 02:31:48  -  0:00 db2spmlw 0
  root 512010 520202       0 02:31:46  -  0:00 db2ckpwd 0
  db2inst1 520202 315626                 0 02:31:46  -  0:00 db2sysc 0
  root 528386 520202  0 02:31:46  -  0:00 db2ckpwd 0
  root 532484 520202  0 02:31:46  -  0:00 db2ckpwd 0
  root 53897  1   0 02:31:46  -  0:00 db2licc  0
  db2inst1 536582 520202  0 02:31:46  -  0:00 db2gds 0
  db2inst1 540680 520202 0 02:31:46  -  0:00 db2ipccm 0
  db2inst1 544778 520202   0 02:31:46  -  0:00 db2tcpcm 0
  ---------------------------------略-------------------------------------
  在命令的输出中我们可以看到“db2wdog”、“db2ckpwd”和“db2licc”进程的owner都是操作系统的root用户,下面我们详细讲解这些和操作系统相关的进程。
  db2wdog进程
  我们都知道在UNIX/Linux上,init进程是所有进程的父进程;同样,在DB2的进程中,“db2wdog”进程是所有其他DB2进程的父进程。这个进程是由操作系统的init进程派生的。从上面的命令输出中我们可以看到“db2wdog”的“ppid”(parent pid)是操作系统的init进程。“db2wdog”进程是在UNIX和Linux操作系统上处理异常终止的看守程序。
  “db2wdog”是“db2 watch dog”的缩写,是看门狗的意思,这个进程的工作机制如图2-3所示。
  图2-3  db2wdog进程的工作机制
  图2-3  db2wdog进程的工作机制
  在UNIX中,“db2wdog”看守程序是必需的,因为UNIX中的进程只能跟踪其父进程的标识。如图3-3所示,每次新进程启动时,“db2gds”进程就会通知DB2看守程序。如果任何DB2进程接收到CTRL-C或其他异常信号,该进程就会向看守程序发送信号,而看守程序会将信号传播给实例中其他所有进程。如果“dbzwdog”进程出现异常,那么整个DB2数据库将无法正常工作。
  db2ckpwd进程
  我们在《循序渐进DB2—— DBA系统管理、维护与应用案例》的“第13章:数据库安全”中给大家介绍过DB2数据库和其他别的数据库不一样的地方在于DB2数据库没有数据库用户的概念,DB2所使用的用户只能是操作系统的用户,DB2使用的安全机制是依赖操作系统或第三方安全插件来实现的。那么,如果有一个应用程序连接数据库,如何来验证其用户名和密码的合法性呢?“db2ckpwd”进程用于检查DB2服务器上的用户标识和密码。由于DB2依赖于操作系统级别的认证,因此,当某个用户或应用程序连接到服务器上的数据库时,便使用该进程验证用户标识和密码。当将AUTHENTICATION设置为SERVER时,或者当连接是从非安全的操作系统建立的时候,就会进行认证。
  图2-4显示了利用“db2ckpwd”进程来验证用户和密码的过程。
  
  图2-4  db2ckpwd进程的工作过程
  在图2-4中,当用户发出“db2 connect to sample user Melanie using Dallas”命令后,“db2ckpwd”进程把用户名“Melance”和密码“Dallas”与“/etc/security/passwd”文件中相应的内容进行比较,验证用户和密码的合法性。
  db2licc进程
  该进程管理已安装的DB2许可证。
展开
目录
第1章  DB2底层组件 1
1.1  DB2底层组件概述 1
1.2  OSS组件 3
1.2.1  OSS组件功能 3
1.2.2  OSS组件诊断案例 5
1.3  Memory Optimizer组件 6
1.4  BSU组件 7
1.4.1  BSU组件功能 7
1.4.2  BSU组件诊断案例 8
1.5  CCI组件 9
1.5.1  CCI组件功能 9
1.5.2  CCI组件诊断案例 10
1.6  RDS组件 11
1.6.1  RDS组件功能 11
1.6.2  RDS诊断案例 12
1.7  DMS组件 13
1.7.1  DMS组件功能 13
1.7.2  DMS诊断案例 14
1.8  IXM组件 15
1.8.1  IXM组件功能 15
1.8.2  IXM诊断案例 15
1.9  BPS组件 16
1.9.1  BPS组件功能 16
1.9.2  BUFFERPOOL配置文件 17
1.9.3  缓冲描述符BPD 17
1.9.4  BUFFERPOOL管理算法 20
1.9.5  基于块的缓冲池 24
1.9.6  BPS组件诊断案例 26
1.10  DPS组件 26
1.10.1  DPS组件功能 26
1.10.2  DPS组件诊断案例 27
1.11  DB2底层组件总结 28
1.12   本章小结 29
第2章  DB2进程体系结构 31
2.1  DB2 进程技术模型 32
2.1.1  与操作系统相关的进程 34
2.1.2  与实例相关的进程 36
2.1.3  与数据库相关的进程 38
2.1.4  与应用程序相关的进程 41
2.1.5  Windows上相关的服务/线程 43
2.2  代理程序通信 44
2.2.1  代理程序概述 44
2.2.2  代理程序相关配置参数 44
2.2.3  连接集中器工作原理 47
2.2.4  应用程序、代理程序和交易 50
2.2.5  代理和连接常见问题与优化 51
2.2.6  DB2 V8、V9.1、V9.5 代理的差异性 56
2.3  实用程序相关进程 57
2.3.1  LOAD相关进程 57
2.3.2  备份/恢复相关进程 60
2.4  DB2 V9.5多线程体系结构概述 62
2.4.1  多线程简介 62
2.4.2  DB2 V9.5主要进程 64
2.4.3  监控多线程 65
2.4.4  监控EDU运行的SQL语句 67
2.5  本章小结 69
第3章  DB2内存体系结构 69
3.1  32位与64位内存寻址 69
3.1.1  32位与64位寻址空间 69
3.1.2  32位系统常见内存问题 71
3.1.3  32位系统内存寻址解决方案 71
3.2  DB2内存体系结构 72
3.2.1  实例共享内存 73
3.2.2  数据库全局内存 74
3.2.3  应用程序全局内存 79
3.2.4  代理私有内存 82
3.2.5  代理程序与应用程序通信内存 83
3.2.6  共享内存与私有内存 84
3.3  内存集、内存池和内存块 86
3.3.1  实例级别内存集 87
3.3.2  跟踪内存使用 90
3.3.3  定位内存泄漏 93
3.3.4  数据库内存集 93
3.4  内存自动调优 96
3.4.1  内存自动调优示例 98
3.4.2  启用内存自动调优及相关参数 99
3.5  本章小结 99
第4章  DB2存储内部结构 101
4.1  数据库物理存储模型 101
4.1.1  DB2存储层次结构 101
4.1.2  数据库物理目录 104
4.2  表空间存储结构 106
4.2.1  SMS表空间存储结构 107
4.2.2  DMS表空间头部信息 108
4.2.3  DMS表空间映射 109
4.2.4  STRIPE SET和RANGE 112
4.2.5  表空间重平衡 115
4.2.6  表空间高水位 118
4.3  数据库内部存储结构 124
4.3.1  数据页和RID格式 124
4.3.2  列在磁盘上的布局 128
4.3.3  数据页内部结构 130
4.3.4  索引叶内部结构 133
4.3.5  数据库物理存储限制 138
4.4  日志文件存储结构 139
4.4.1  日志存储内容 139
4.4.2  SQLOG.CTL 144
4.5  本章小结 148
第5章  DB2优化器 149
5.1  DB2优化器介绍 150
5.2  SQL语句执行过程 152
5.3  优化器组件和工作原理 154
5.3.1  查询重写示例:谓词移动、合并和转换 155
5.3.2  优化器成本评估 161
5.3.3  本地谓词基数(CARDINALITY)估计 162
5.3.4  连接基数(CARDINALITY)估计 164
5.3.5  分布统计信息 168
5.3.6  列组统计信息对基数的影响 172
5.4  扫描方式 183
5.4.1  全表扫描 183
5.4.2  索引扫描 184
5.4.3  RID SCAN 187
5.5  连接方法 188
5.5.1  嵌套循环连接 189
5.5.2  合并连接 190
5.5.3  哈希(hash)连接 191
5.5.4  选择最佳连接的策略 192
5.6  优化级别 193
5.6.1  优化级别概述 193
5.6.2  选择优化级别 197
5.6.3  设置优化级别 198
5.7  基于规则的优化 200
5.7.1  优化器概要文件概述 200
5.7.2  启用优化概要文件 202
5.7.3  优化概要文件使用示例 204
5.8  如何影响优化器来提高性能 210
5.8.1  使DB2统计信息保持最新 211
5.8.2  构建适当的索引 211
5.8.3  配置合理的数据库配置参数 212
5.8.4  选择合适的优化级别 213
5.8.5  合理的存储I/O设计 213
5.8.6  良好的应用程序设计和编码 214
5.9  优化器总结 217
第6章  高级锁 219
6.1  隔离级别和锁 219
6.1.1  可重复读 220
6.1.2  读稳定性 221
6.1.3  游标稳定性 224
6.1.4  未提交读 226
6.1.5  隔离级别加锁示例讲解 228
6.1.6  隔离级别摘要 232
6.2  加锁总结 234
6.2.1  如何获取锁 234
6.2.2  意图锁和非意图锁 236
6.2.3  读锁和写锁 236
6.2.4  LRB(Lock Resource Block) 237
6.2.5  USE AND KEEP LOCKS 237
6.2.6  索引类型和下一键锁 239
6.2.7  扫描方式加锁情况 240
6.3  乐观锁 243
6.3.1  悲观锁定和乐观锁定 243
6.3.2  DB2 V9.5的乐观锁定 245
6.3.3  乐观锁应用案例 251
6.4  内部锁 259
6.4.1  内部方案锁(Internal Plan Lock) 259
6.4.2  内部V锁(Internal Variation Lock) 260
6.4.3  内部S锁 262
6.4.4  内部C锁 262
6.4.5  其他内部锁 264
6.5  设置锁相关的注册变量 268
6.5.1  DB2_EVALUNCOMMITTED 269
6.5.2  DB2_SKIPDELETED 273
6.5.3  DB2_SKIPINSERTED 274
6.6  本章小结 276
第7章  数据库配置参数 279
7.1  数据库配置参数概述 279
7.2  监控和调优实例(DBM)配置参数 280
7.2.1  并行相关的配置参数 281
7.2.2  安全相关的配置参数 283
7.2.3  环境相关的配置参数 284
7.2.4  监视相关的配置参数 284
7.2.5  通信相关的配置参数 284
7.2.6  诊断相关的配置参数 285
7.2.7  代理程序相关配置参数 285
7.2.8  SHEAPTHRES 288
7.2.9  MON_HEAP_SZ 288
7.2.10  QUERY_HEAP_SZ 288
7.3  监控和调优DB配置参数 288
7.3.1  内存相关配置参数调整 290
7.3.2  应用程序堆大小(APPHEAPSZ) 298
7.3.3  SORTHEAP和SHEAPTHRES 298
7.3.4  SHEAPTHRES_SHR 301
7.3.5  锁相关配置参数 301
7.3.6  活动应用程序的最大数目(MAXAPPLS) 304
7.3.7  PKGCACHESZ 305
7.3.8  CATALOGCACHE_SZ 305
7.3.9  异步页清除程序的数目(NUM_IOCLEANERS) 306
7.3.10  异步I/O 服务器的数目(NUM_IOSERVERS) 307
7.3.11  组提交数目(MINCOMMIT) 308
7.3.12  AVG_APPLS 310
7.3.13  CHNGPGS_THRESH (DB) 310
7.3.14  MAXFILOP 310
7.3.15  LOGPRIMARY、LOGSECOND 和 LOGFILSZ 310
7.3.16  日志缓冲区大小(LOGBUFSZ) 311
7.3.17  STMTHEAP 312
7.3.18  DFT_QUERYOPT 312
7.3.19  UTIL_HEAP_SZ (DB) 312
7.3.20  其他数据库配置参数 312
7.4  环境变量和DB2注册表变量 313
7.4.1  DB2INSTANCE变量 315
7.4.2  DB2_PARALLEL_IO 316
7.4.3  DB2_USE_PAGE_CONTAINER_TAG 318
7.4.4  DB2_SELECTIVITY 319
7.4.5  DB2_INLIST_TO_NLJN 320
7.4.6  DB2_MINIMIZE_LISTPREFETCH 321
7.4.7  DB2_USE_ALTERNATE_PAGE_CLEANING 321
7.4.8  DB2_REDUCED_OPTIMIZATION 321
7.4.9  DB2_LIKE_VARCHAR 322
7.4.10  DB2_NEW_CORR_SQ_FF 324
7.4.11  DB2_OPT_MAX_TEMP_SIZE 324
7.5  本章小结 325
第8章  DB2数据字典 327
8.1  系统目录视图概述 327
8.2  SYSCAT系统编目视图 328
8.2.1  数据库对象信息 328
8.2.2  权限相关的系统编目视图 330
8.2.3  程序包相关的系统编目视图 332
8.3  SYSIBMADM管理视图 334
8.3.1  监控缓冲池命中率 336
8.3.2  监控PACKAGE CACHE大小 336
8.3.3  监控执行成本最高的SQL语句 337
8.3.4  监控运行最长的SQL语句 337
8.3.5  监控SQL准备和预编译时间最长的SQL语句 338
8.3.6  监控执行次数最多的SQL语句 338
8.3.7  监控排序次数最多的SQL语句 339
8.3.8  监控LOCK WAIT时间 339
8.3.9  监控LOCK CHAIN 340
8.3.10  监控锁内存使用 340
8.3.11  监控锁升级、死锁和锁超时 341
8.3.12  监控全表扫描的SQL 341
8.3.13  检查PAGE CLEANERS是否足够 342
8.3.14  监控PREFETCHER是否足够 343
8.3.15  监控数据库内存使用 343
8.3.16  监控日志使用情况 344
8.3.17  监控占用日志空间最旧的交易 345
8.3.18  监控存储路径 345
8.3.19  监控表空间使用情况 346
8.4  SYSSTAT系统编目视图 347
8.5  利用系统编目视图编写脚本案例 350
8.5.1  案例1 350
8.5.2  案例2 351
8.6  保护系统编目视图 352
8.7  本章小结 353
第9章  高级诊断 355
9.1  db2dart和inspect 355
9.1.1  db2dart和inspect概述 355
9.1.2  利用db2dart查找停顿(quiesce)表空间的用户 358
9.1.3  db2dart诊断高水位问题 360
9.1.4  db2dart诊断数据页损坏问题 362
9.1.5  inspect命令使用案例 365
9.2  db2pdcfg 366
9.2.1  db2pdcfg -cos选项 368
9.2.2  db2pdcfg-catch选项 371
9.2.3  db2pd -fodc选项 376
9.3  db2trc 376
9.3.1  db2trc 376
9.3.2  db2trc案例1 385
9.3.3  db2trc案例2 386
9.4  db2_call_stack和db2nstck 395
9.5  高级诊断案例 396
9.6  小结 400
第10章  深入讲解解释输出 401
10.1  执行计划基础 401
10.2  表访问信息 404
10.2.1  常规表访问 404
10.2.2  扫描方式 407
10.2.3  锁和隔离级别信息 411
10.2.4  谓词 412
10.2.5  临时表访问 416
10.3  排序 419
10.3.1  排序原理 419
10.3.2  共享排序与私有排序 421
10.3.3  监控排序 423
10.3.4  优化排序性能 426
10.4  预取方式 428
10.4.1  数据库预取概念 428
10.4.2  顺序预取 430
10.4.3  列表预取 432
10.4.4  提高预取性能 436
10.5  连接信息 437
10.5.1  嵌套循环连接(NLJOIN) 438
10.5.2  合并连接(MSJOIN) 439
10.5.3  哈希连接(HSJOIN) 440
10.5.4  外连接 442
10.6  IndexORing和IndexANDing 443
10.6.1  IndexORing案例 443
10.6.2  IndexANDing案例 445
10.7  其他输出信息 447
10.7.1  数据流信息 447
10.7.2  插入、更新和删除信息 449
10.7.3  并行处理信息 450
10.7.4  其他说明信息 451
10.8  基于执行计划的优化案例 453
10.9  本章小结 470
参考文献 471
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证