章 Oracle体系结构概述 1 1.1 Oracle数据库进程结构 2 1.2 Oracle数据库逻辑结构 3 1.3 Oracle数据库物理结构 5 1.4 Oracle数据库逻辑结构与物理结构的耦合关系 6 1.5 本章小结 8 第2章 SQL执行计划 9 2.1 看懂SQL执行计划前需要掌握的概念 9 2.2 SQLPlus的执行计划设置 12 2.2.1 设置Autotrace(自动跟踪)参数 12 2.2.2 在SQLPlus中显示SQL执行计划 13 2.3 使用TOAD、SQL Developer工具 21 2.3.1 TOAD分析工具 21 2.3.2 SQL Developer分析工具 22 2.4 SQL解析 24 2.4.1 Oracle SQL的硬解析和软解析 27 2.4.2 动态分析采样 28 2.5 关于RBO与CBO 28 2.6 关于执行计划中的索引访问方法 30 2.6.1 索引扫描(INDEX UNIQUE SCAN) 31 2.6.2 索引范围扫描(INDEX RANGE SCAN) 32 2.6.3 索引跳跃扫描(INDEX SKIP SCAN) 33 2.6.4 索引快速全扫描(INDEX FAST FULL SCAN) 34 2.7 通过DBMS_XPLAN包查看以往SQL的执行计划 35 2.8 常用Hints(提示) 36 2.8.1 与优化器模式相关的Hint 37 2.8.2 与表访问相关的Hint 40 2.8.3 与索引访问相关的Hint 40 2.8.4 与表连接顺序相关的Hint 47 2.9 实践案例:位图索引对性能的影响 48 2.10 实践案例:分区索引对性能的影响 52 2.10.1 关于分区索引的说明 52 2.10.2 分区索引实验 54 2.11 如何更好地判断SQL效率 71 2.12 本章小结 72 第3章 Oracle数据库存储结构 73 3.1 逻辑存储结构 73 3.1.1 块(Block) 73 3.1.2 区(Extent) 74 3.1.3 段(Segment) 75 3.1.4 表空间(Tablespace) 75 3.1.5 4种逻辑存储结构的关系 76 3.2 Oracle物理存储结构 76 3.3 本章小结 77 第4章 Oracle表空间 78 4.1 表空间管理 78 4.1.1 表空间(TABLESPACE)的类型 79 4.1.2 表空间(TABLESPACE)的管理 80 4.1.3 表空间(TABLESPACE)的创建 82 4.2 表空间的查看 88 4.2.1 表空间固定信息的查看 89 4.2.2 表空间动态信息的查看 90 4.3 表空间管理准则 91 4.4 创建表空间应遵循的一般原则 92 4.5 表空间创建模板及其删除应用场景分析 94 4.5.1 表空间创建模板语句 95 4.5.2 表空间删除的4种方式及其应用场景分析 96 4.6 关于表空间创建的数据文件DATAFILE参数 98 4.6.1 SIZE子句 99 4.6.2 EXTENT分区分配方案 99 4.6.3 关于REUSE(重复使用)的说明 99 4.7 关于表空间参数的其他说明 101 1.段Segment管理策略 101 2.Table/Segment/Extent/Block之间的关系 101 3.TABLESPACE和DATAFILE之间的关系 101 4.8 回收表空间中浪费的空间 101 4.8.1 查看表空间碎片率 102 4.8.2 得到表空间的DDL(创建)语句 103 4.8.3 表空间属性PCTINCREASE(百分比)参数的修改 105 4.8.4 回收表空间碎片 105 4.8.5 Oracle移动索引到其他表空间 112 4.9 TABLE的碎片回收 113 4.9.1 与回收TABLE碎片有关的两个存储过程 113 4.9.2 表碎片回收处理 118 4.10 Oracle 11g undo_retention(撤销保留时间) 120 4.10.1 关于undo 的参数 121 4.10.2 undo_retention(撤销保留时间)状态说明及参数调整 122 4.11 本章小结 123 第5章 自动存储管理(ASM) 125 5.1 ASM概述 125 5.1.1 ASM冗余 125 5.1.2 ASM进程 126 5.1.3 ASM实例和数据库实例对应关系 127 5.1.4 Cluster(集群) ASM 架构 127 5.2 ASM实例搭建 128 5.2.1 环境介绍 128 5.2.2 创建裸设备以及创建ASM磁盘组 129 5.2.3 安装Oracle 网络基础架构win64_11gR2_grid组件 133 5.2.4 后续处理 134 5.3 ASM实例管理 136 5.3.1 查看可用分区 137 5.3.2 加入ASM磁盘 138 5.3.3 开启CSS服务 139 5.3.4 新建ASM DiskGroup给数据库使用 139 5.4 磁盘组的管理 143 5.4.1 磁盘组的创建与删除 144 5.4.2 ASM磁盘的添加和删除 147 5.4.3 磁盘组信息的查询 149 5.4.4 磁盘组的重新平衡 150 5.4.5 磁盘组的加载和卸载 150 5.4.6 目录管理 151 5.4.7 别名管理 152 5.5 如何使用ASM磁盘组 153 5.5.1 创建数据文件 153 5.5.2 添加重做日志文件 157 5.5.3 创建数据库 159 5.6 本章小结 159 第6章 Oracle的内存结构 160 6.1 Oracle内存结构 160 6.1.1 SGA(系统全局区) 161 6.1.2 PGA(程序全局区) 163 6.1.3 UGA(用户全局区) 165 6.2 SGA组件介绍 165 6.2.1 固定SGA(Fixed SGA) 166 6.2.2 块缓冲区(Database Buffer Cache) 166 6.2.3 数据高速缓存的工作原理过程 167 6.2.4 重做日志缓冲区(Redo Log Buffer) 168 6.2.5 共享池(Shared Pool) 169 6.2.6 大池(Large Pool) 170 6.2.7 Java池(Java Pool) 170 6.2.8 流池(Stream Pool) 170 6.3 PGA结构 171 6.3.1 Private SQL Area(私有SQL区) 171 6.3.2 Work Area(工作区) 172 6.3.3 Session Memory 173 6.3.4 自动PGA管理 174 6.4 Oracle 11g系统进程介绍 175 6.4.1 数据库写进程(DBWn) 177 6.4.2 日志文件写进程(LGWR) 178 6.4.3 检查点进程(CKPT) 179 6.4.4 系统监控进程(SMON) 180 6.4.5 进程监控进程(PMON) 180 6.4.6 恢复进程(RECO) 180 6.4.7 作业队列进程(CJQn) 181 6.4.8 归档进程(ARCn) 181 6.4.9 队列监控进程(QMNn) 182 6.4.10 调度进程(Dnnn) 182 6.4.11 内存管理进程(MMAN) 182 6.4.12 恢复写入进程 (RVWR) 182 6.4.13 内存管理进程(MMON) 183 6.4.14 其他后台进程 183 6.5 自动共享内存管理(ASMM) 183 6.6 关于11g与12c内存管理 185 6.6.1 Orodo内存管理形式 186 6.6.2 11g下的AMM内存管理 187 6.7 本章小结 188 第7章 Oracle的内存分析与调整 189 7.1 Oracle 内存工作机制 189 7.2 内存使用情况分析 190 7.2.1 剩余内存 190 7.2.2 内存击中率 190 7.3 SQL效率及其他指标查看分析 193 7.3.1 检查占用CPU时间比较长的SQL语句 193 7.3.2 执行效率 差的SQL语句 194 7.3.3 识别低效率执行的语句 195 7.3.4 V$sqlarea视图提供的执行细节 196 7.3.5 查看数据库db_cache_size及各类pool_size值 198 7.4 Oracle内存调整——系统全局区SGA 199 7.5 Oracle内存调整——共享池(Shared Pool) 201 7.5.1 共享池(Shared Pool)相关视图 201 7.5.2 共享池(Shared Pool) 207 7.5.3 库高速缓存(Library Cache) 208 7.5.4 数据缓冲区(Buffer Cache) 215 7.5.5 重做日志缓冲区(Redo Log Buffer) 221 7.5.6 大池 222 7.5.7 Java池 222 7.5.8 流池 223 7.6 本章小结 223 第8章 Oracle动态性能指标 224 8.1 主要与Oracle动态性能指标相关的基础概念 224 8.2 从v$sysstat视图获取负载间档 228 8.2.1 Buffer Cache Hit Ratio(DB缓存命中率) 229 8.2.2 Soft Parse Ratio(软解析比率) 229 8.2.3 In-Memory Sort Ratio(内存排序率) 230 8.2.4 Parse To Execute Ratio(SQL解析执行比率) 230 8.2.5 Parse CPU To Total CPU Ratio(CPU花费比率) 230 8.2.6 Parse Time CPU To Parse Time Elapsed(锁竞争比率) 230 8.3 其他计算统计以衡量负载方式 231 8.3.1 Blocks Changed For Each Read(每次读引起的块改变) 231 8.3.2 Rows For Each Sort(每个排序引发的排序行量) 232 8.3.3 Oracle获取当前数据库负载情况信息 232 8.4 本章小结 234 第9章 Oracle的索引与性能 235 9.1 Oracle数据库索引类型 235 9.1.1 Btree索引 235 9.1.2 位图索引(Bitmap Index) 236 9.1.3 位图连接索引(Bitmap Join Index) 237 9.1.4 基于函数的索引(Function-Based Index) 237 9.1.5 应用域索引(Application Domain Index) 239 9.1.6 Hash索引 242 9.1.7 分区索引 242 9.2 索引典型操作 243 9.2.1 典型创建操作 243 9.2.2 典型删除操作 243 9.2.3 典型移动操作 244 9.2.4 得到创建索引的SQL语句 244 9.2.5 查看数据库中的索引及跳过设置 246 9.2.6 通用索引删除脚本 246 9.3 有无索引及不同类型索引对查询效率高低影响实验 247 9.4 关于索引的建议 251 9.5 普通表转分区表实验及分区表相关信息查询 254 9.5.1 普通表转分区表实验环境搭建 254 9.5.2 普通表转分区表 255 9.5.3 查看Oracle都有哪些分区表 258 9.5.4 表分区查询 259 9.6 本章小结 259 0章 Oracle性能实验 260 10.1 信息收集、库加压处理 260 10.1.1 信息收集处理 260 10.1.2 给数据库加压处理及瓶颈解决过程 270 10.1.3 存储过程使用绑定 272 10.1.4 将UPDATE命令加载到共享池并以并行方式执行 273 10.1.5 通过并发给数据库加压 273 10.1.6 查找SESSION ID及serial# 274 10.1.7 杀掉SESSION ID 275 10.1.8 通过merge命令加压 275 10.1.9 批量数据加压处理 277 10.2 信息查看跟踪SQL语句 278 10.2.1 比率相关 278 10.2.2 等待、锁及阻塞相关 286 10.2.3 获取SQL语句相关 302 10.2.4 资源消耗相关 310 10.2.5 游标相关 313 10.3 日常需要记录的监控点以及监控语句 315 10.4 关于Oracle的I/O 318 10.5 实验结论 319 10.5.1 调优过程 319 10.5.2 调优前后SPFILE参数文件对比 323 10.5.3 实验总结 326 10.6 本章小结 326 1章 AWR报告 327 11.1 AWR报告综述 327 11.2 什么情况下会用到AWR 332 11.3 如何生成AWR报告 333 11.4 分析AWR报告 336 11.4.1 AWR报告头 336 11.4.2 Cache Sizes报告 337 11.4.3 Load Profile报告 337 11.4.4 Instance Efficiency Percentages报告 339 11.4.5 Shared Pool Statistics报告 341 11.4.6 Top 5 Timed Foreground Events(前5个严重等待事件)报告 341 11.4.7 SQL ordered by Elapsed Time报告 347 11.4.8 SQL ordered by CPU Time报告 348 11.5 使用脚本自动生成AWR报告 349 11.5.1 查快照snap_ID 349 11.5.2 建立脚本并执行 350 11.6 本章小结 351 2章 Oracle的ADDM报告 352 12.1 Oracle性能调优综述 352 12.2 Oracle ADDM报告概述 353 12.2.1 使用addmrpt.sql来创建ADDM报告 353 12.2.2 使用DBMS_ADVISOR程序包来创建ADDM报告 354 12.3 ADDM报告实验 358 12.3.1 负荷环境搭建 358 12.3.2 次采集快照并施加负荷 359 12.3.3 采集第2次快照 359 12.3.4 创建一个优化任务并执行 360 12.3.5 查询建议结果 361 12.3.6 ADDM报告解释 361 12.4 本章小结 365 3章 Oracle 11g R2 RAC集群部署实验 367 13.1 总体规划 367 13.1.1 部署环境 367 13.1.2 网络配置 368 13.1.3 Oracle软件组件 368 13.1.4 数据库配置 369 13.1.5 存储组件 369 13.2 服务器规划 370 13.2.1 通过StartWind 6.0虚拟磁盘 370 13.2.2 划分Oracle安装目录DB(F:)和虚拟内存(G:) 370 13.2.3 修改虚拟内存(两个节点都设置) 371 13.2.4 修改winrac1和winrac2的hosts文件 372 13.2.5 修改注册表,禁用媒体感知功能 372 13.3 网络规划 373 13.3.1 修改网卡名(两个节点都设置) 373 13.3.2 修改网卡优先级并配置IP 374 13.3.3 测试两点的连通性 375 13.4 存储规划 376 13.4.1 规划磁盘阵列 376 13.4.2 共享安装目录DB(F:)和C盘 377 13.5 安装Grid软件前的设置和检查 378 13.5.1 服务器时间同步 378 13.5.2 检测节点之间能否相互访问共享 378 13.5.3 检查Grid安装是否符合条件 379 13.6 Grid及数据库软件的安装 382 13.6.1 安装win64 grid 11.2.0.4.0集群管理软件 383 13.6.2 Clusterware安装校验(检查CRS资源状态) 387 13.6.3 安装DATABASE软件 388 13.6.4 创建ASM磁盘组 391 13.6.5 DBCA建立数据库 394 13.7 Oracle RAC集群管理常用操作 398 13.8 本章小结 401 4章 Oracle特殊问题的解决案例 402 14.1 ORA-00257 archiver error 402 14.2 由于恢复区空间不足导致ORA-03113错误 404 14.3 解决Oracle SYSAUX空间占用严重问题 405 14.3.1 清理SYSAUX下的历史统计信息 406 14.3.2 清理SYAUX表空间中无效的ASH(活动会话历史)信息 407 14.3.3 检查SYSAUX表空间可收缩的数据文件 408 14.3.4 SYSAUX清理后的检查 409 后记 411 |