
| 第一篇 优化工具篇 第1章 DBA优化之路3 1.1 学习的建议3 1.2 工具推荐4 1.3 关于操作系统方面的建议4 1.4 关于Oracle初始化参数的调整5 1.5 关于Statspack的若干建议6 1.6 关于logmnr在调优中的运用7 1.7 关于materialized view在调优中的运用8 1.8 关于Stored Outline在SQL优化中的运用8 1.9 用dbms_profiler调优存储过程8 1.10 优化前的准备工作9 1.11 如何对SQL进行调整及优化10 1.12 表结构优化实例12 1.13 如何对session进行跟踪12 1.14 基于等待事件的性能诊断方法13 1.15 基于资源限制的性能诊断方法14 1.16 如何减少共享池的碎片15 1.17 监控表及索引的意义17 1.18 通过优化SQL消除temp表空间膨胀17 1.19 理解compress选项在优化上的作用19 1.20 关于在线重定义table的建议19 1.21 关于分区表在数据库设计时的建议20 1.22 关于DataGuard在高可用方面的建议20 第2章 Statspack高级调整23 2.1 Statspack高级调整译文24 2.1.1 Top 5 Wait Events24 2.1.2 等待时间快捷参考26 2.2 关于Latch27 第3章 Statspack使用的几个误区33 3.1 以命中率为主衡量性能问题33 3.2 快照的采样时间间隔问题35 3.3 以偏概全36 3.4 关于TIMED_STATISTICS参数的设定36 3.5 你成了泄密者37 第4章 TKPROF工具使用简介39 4.1 TKPROF工具简介39 4.2 TKPROF工具的使用步骤40 4.3 TKPROF工具如何分析trace文件41 第5章 使用Oracle的等待事件检测性能瓶颈45 5.1 判断等待事件的相关视图46 5.1.1 系统级统计信息v$system_event46 5.1.2 会话级统计信息v$session_event48 5.1.3 会话详细性能信息 v$session_wait48 5.1.4 会话等待事件的相关视图之间的关系50 5.2 应该怎么考虑进行优化50 5.3 主要等待事件51 5.4 案例分析54 5.5 小结59 5.6 附录59 第6章 使用SQL_TRACE/10046事件进行数据库诊断63 6.1 SQL_TRACE及10046事件的基础介绍63 6.1.1 SQL_TRACE说明63 6.1.2 10046事件说明67 6.1.3 获取跟踪文件68 6.1.4 读取当前session设置的参数68 6.2 案例分析之一69 6.2.1 问题描述69 6.2.2 检查并跟踪数据库进程69 6.2.3 检查trace文件70 6.2.4 登录数据库检查相应表结构71 6.2.5 解决方法72 6.2.6 小结73 6.3 案例分析之二73 6.3.1 问题描述73 6.3.2 drop user出现问题74 6.3.3 跟踪问题74 6.3.4 问题定位76 6.3.5 实际处理77 6.3.6 小结78 6.4 10046与等待事件78 6.4.1 10046事件的使用78 6.4.2 10046 与db_file_multiblock_read_count80 6.4.3 10046与执行计划的选择82 6.4.4 db_file_multiblock_read_count与系统的IO能力83 6.4.5 小结85 第二篇 存储优化篇 第7章 表空间的存储管理与优化技术89 7.1 表空间的作用与分类89 7.2 字典管理表空间90 7.2.1 字典管理表空间的特性90 7.2.2 字典管理表空间的缺点91 7.2.3 字典管理表空间的优化92 7.3 本地管理表空间92 7.3.1 本地管理表空间的特性92 7.3.2 管理位图块的内部结构94 7.3.3 本地管理表空间的优点94 7.4 段自动管理表空间95 7.4.1 段自动管理表空间的特性95 7.4.2 位图管理段内部结构96 7.4.3 段自动管理表空间的优化98 7.5 9i对表空间的管理优化98 7.5.1 自动undo管理的表空间98 7.5.2 完全本地的临时表空间99 7.6 Oracle 10g对表空间的优化99 7.7 小结99 7.8 附录99 第8章 关于Oracle数据库中行迁移/行链接的问题101 8.1 行迁移/行链接的简介101 8.2 行迁移/行链接的检测方法106 8.3 行迁移/行链接的清除方法108 第9章 HWM与数据库性能的探讨121 9.1 什么是HWM121 9.2 初始创建的table中HWM的不同情况122 9.3 insert数据时HWM的移动128 9.4 HWM对性能的影响131 9.5 何时应该降低HWM135 9.5.1 对于LMT下的FLM135 9.5.2 对于ASSM136 9.6 如何降低HWM137 9.6.1 Move137 9.6.2 DBMS_REDEFINITION142 9.6.3 Shrink143 9.6.4 小结148 9.7 其他几种会移动HWM的操作148 9.7.1 Insert Append148 9.7.2 Truncate152 第10章 调整I/O相关的等待153 10.1 Oracle数据库I/O相关竞争等待简介153 10.2 Oracle数据库I/O相关竞争等待的处理方法154 10.3 Oracle数据库I/O相关的等待事件和相应的解决方法157 10.3.1 数据文件相关的I/O等待事件158 10.3.2 控制文件相关I/O等待事件163 10.3.3 重做日志文件相关的等待事件164 10.3.4 高速缓存区相关的I/O等待事件166 10.4 小结169 第11章 Oracle在Solaris的 VxFS上的异步I/O问题171 11.1 VxFS文件系统的简介171 11.2 VxFS文件系统上如何启用异步I/O171 11.3 如何检测在VxFS文件系统上是否支持异步I/O172 11.4 如何查看VxFS文件系统上异步I/O的性能173 11.5 如何转换VxFS文件系统上数据文件为支持异步I/O的 数据文件174 第12章 关于Freelists和 Freelist Groups的研究177 12.1 什么是Freelists177 12.2 Freelists是否已经过时178 12.3 Freelists存储在哪里178 12.4 有多少种free list180 12.5 进程请求空闲块的过程182 12.6 块在free list间的移动184 12.7 关于free list将导致大量空间浪费的误解185 12.8 关于Freelists和Freelist Groups的一个比喻186 12.9 与Freelists和Freelist Groups相关的等待事件186 第三篇 内存调整篇 第13章 自动PGA管理──原理及优化193 13.1 什么是PGA内存自动管理193 13.2 PGA Advice功能199 13.3 自动PGA内存管理相关初始化参数201 第14章 32bit Oracle SGA扩展原理和 SGA与PGA的制约 关系203 14.1 如何识别32bit的Oracle203 14.2 为何存在1.7GB的限制204 14.3 32bit下SGA与PGA之间的制约关系207 第15章 KEEP池和RECYCLE池213 15.1 Oracle的数据缓冲池213 15.2 KEEP池和RECYCLE池214 15.2.1 KEEP池215 15.2.2 RECYCLE池219 15.3 小结221 第16章 深度分析数据库的热点块问题223 16.1 热点块的定义223 16.2 数据缓冲区的结构223 16.3 如何确定热点对象224 16.4 热点问题的解决228 16.5 热点块的其他相关症状230 16.6 小结231 第17章 Shared Pool原理及性能分析233 17.1 Shared Pool的基本原理233 17.2 Shared Pool的设置说明233 17.2.1 基本知识234 17.2.2 Shared Pool的Free List管理235 17.2.3 了解X$KSMSP视图240 17.3 诊断和解决ORA-04031错误244 17.3.1 什么是ORA-04031错误244 17.3.2 内存泄露245 17.3.3 绑定变量和cursor_sharing246 17.3.4 使用Flush Shared Pool缓解共享池问题247 17.3.5 shared_pool_reserved_size参数的设置及作用247 17.3.6 其他249 17.3.7 模拟ORA-04031错误249 17.4 Library Cache Pin及Library Cache Lock分析252 17.4.1 Library Cache Pin等待事件253 17.4.2 Library Cache Lock等待事件258 17.5 诊断案例一259 17.6 诊断案例二267 17.7 小结269 第四篇 诊断案例篇 第18章 一次性能调整过程总结273 18.1 系统环境273 18.2 基本的调优过程273 18.2.1 db file scattered read273 18.2.2 db file sequential read274 18.2.3 Enqueue275 18.2.4 Latch Free275 18.3 小结281 第19章 电信业Oracle优化手记283 19.1 一条SQL语句要运行2年怎么办283 19.2 优化的传统定律和新时尚285 19.2.1 index和表同一个表空间(过时)286 19.2.2 定期重建索引(过时)287 19.2.3 裸设备应该取代文件系统(过时)287 19.2.4 初始参数设置cursor_sharing=similar(不一定 有效)288 19.2.5 初始参数设置fast=true(有效)289 19.3 联机重做日志的优化289 19.3.1 联机重做日志组内创建多个成员289 19.3.2 加大redo log的容量290 第20章 一次诊断和解决CPU利用率高的问题分析291 20.1 问题的具体描述291 20.2 问题的详细诊断解决过程292 20.3 小结296 第21章 一次异常内存消耗问题的诊断及解决297 21.1 问题发现297 21.2 解决过程297 21.2.1 环境介绍297 21.2.2 问题现象297 21.2.3 对比分析299 21.2.4 假设和分析300 21.2.5 找到根源302 21.2.6 解决问题303 21.3 小结305 第22章 如何捕获问题SQL解决过度CPU消耗问题307 22.1 检查当前情况307 22.2 使用Top工具辅助诊断308 22.3 检查进程数量309 22.4 登录数据库309 22.5 捕获相关SQL311 22.6 创建新的索引以消除全表扫描313 22.7 观察系统状况314 22.8 性能何以提高315 22.9 小结317 第23章 一条SQL导致数据库整体性能下降的诊断及解决319 23.1 现象319 23.2 诊断与解决319 第24章 Library Cache Lock成因和解决方法的探讨327 24.1 几个相关的概念327 24.1.1 什么是库高速缓存(Library Cache)327 24.1.2 一个SQL语句的处理流程327 24.1.3 硬分析(Hard Parse)328 24.1.4 软分析(Soft Parse)328 24.1.5 分析树328 24.1.6 执行计划329 24.2 了解Library Cache Lock329 24.2.1 几种容易引起Library Cache Lock的情况329 24.2.2 几种防患的方法330 24.3 解决问题的方法330 24.3.1 使用X$KGLLK和systemstate事件解决问题331 24.3.2 使用v$session和systemstate事件解决问题341 24.4 小结348 第五篇 SQL优化及其他 第25章 Oracle数据库优化之索引(Index)简介351 25.1 索引的作用352 25.2 索引管理的常见问题353 25.3 索引的管理360 25.4 一些索引管理的脚本363 第26章 CBO成本计算初探367 26.1 建立测试数据367 26.2 CBO计算成本原理初探369 26.3 初始化参数以及优化器模式对执行计划的影响371 26.3.1 初始化参数db_file_multiblock_read_count371 26.3.2 初始化参数optimizer_index_cost_adj373 26.3.3 优化器模式FIRST_ROWS对执行计划的影响374 26.4 小结375 第27章 Bitmap索引377 27.1 Bitmap索引的概念377 27.2 建立测试例子378 27.3 Bitmap索引的特点380 27.3.1 Bitmap索引比B树索引要节省空间380 27.3.2 Bitmap索引建立的速度比较快382 27.3.3 基于规则的优化器无法使用Bitmap索引382 27.3.4 Bitmap索引存储NULL值384 27.3.5 通过Bitmap索引访问表记录385 27.3.6 Bitmap索引对批量DML操作只需要索引一次390 27.3.7 Bitmap索引的锁机制390 27.4 Bitmap索引的适用范围390 27.5 Bitmap索引的使用限制391 27.6 Bitmap Join索引简介391 第28章 翻页SQL优化实例395 28.1 系统环境395 28.2 优化效果395 第29章 使用物化视图进行翻页性能调整405 29.1 系统环境405 29.2 问题描述405 29.3 捕获排序SQL语句406 29.4 确定典型问题SQL407 29.5 选择解决办法409 29.6 进一步的调整优化410 29.7 小结412 第30章 如何给Large Delete 操作提速近千倍413 30.1 背景描述413 30.1.1 任务描述413 30.1.2 数量级统计和描述413 30.2 背景知识--Bulk Binding414 30.2.1 什么是Bulk Binding414 30.2.2 Bulk Binding的优点是什么415 30.2.3 如何进行批量绑定(Bulk Binds)415 30.3 优化过程详解420 30.3.1 第一次优化--处理庞大的IN-LIST操作420 30.3.2 第二次优化--分段操作422 30.3.3 第三次优化--拆分DELETE操作423 30.3.4 第四次优化--使用FORALL处理批量作业424 30.3.5 第五次优化--使用FORALL+原子级操作426 30.4 小结430 第31章 Web分页与优化技术431 31.1 什么是Web分页431 31.2 表数据普通查询分页431 31.3 FIRST_ROWS对分页的影响434 31.4 带排序需求的分页439 31.5 分页的速度优化445 31.6 分页中的注意事项450 31.6.1 真实案例──表中存在union all的视图时,可能 选择错误的执行计划450 31.6.2 真实案例──rowid分页中,执行计划的错误选 择与处理452 31.6.3 真实案例──使用rownum得到意想不到的结果455 31.7 小结456 第32章 Oracle数据封锁机制研究457 32.1 数据库锁的基本概念457 32.2 Oracle多粒度封锁机制介绍457 32.2.1 Oracle的TX锁(事务锁、行级锁)458 32.2.2 TM锁(表级锁)459 32.3 Oracle 多粒度封锁机制的监控461 32.3.1 系统视图介绍461 32.3.2 监控脚本462 32.4 Oracle 多粒度封锁机制示例463 32.4.1 操作同一行数据引发的锁阻塞463 32.4.2 实体完整性引发的锁阻塞465 32.4.3 参照完整性引发的锁阻塞466 32.4.4 外键未加索引引发的锁阻塞468 32.4.5 部分回滚对锁的影响470 32.4.6 锁的排队机制472 32.4.7 ITL Slot不足引发的锁阻塞474 32.4.8 Bitmap索引引发的锁阻塞475 32.4.9 死锁分析475 32.4.10 表级锁的使能476 32.4.11 row_locking参数478 32.5 Oracle 多粒度封锁机制总结478 |
商品评论(0条)