关于我们
![]() ![]() |
Oracle数据库存储管理与性能优化
本书以Oracle 11g为蓝本,在某些实践应用中也讲到了12c版本,全面系统地介绍了大型对象关系型数据库服务器Oracle性能优化方面的大部分内容,包括看懂SQL执行计划、Oracle存储管理、Oracle内存管理、Oracle性能指标及追踪、Oracle性能报告、Oracle实战案例等内容
透彻讲述不同存储方案的工作机理并验证;性能优化方面着重在问题发生、预判、防患、分析和解决上给出可行方案。
就大多数情况而言,先期的数据库部署包括内存、存储等部署均由DBA做好,唯有SQL语句不是DBA做的,是由应用开发者书写的,这往往是导致后期数据库性能瓶颈的主要因素。因此,本书将“SQL执行计划”作为本书开篇第2章进行阐述。通过本章,可以让读者明白SQL语句到底使得数据库发生了什么,数据库都干了什么,是如何干的等细节,从而找出性能瓶颈的线索,为快速定位并解决问题提供依据。因此,看懂SQL执行计划是DBA的基本功。
本书倾向于Oracle DBA的读者,是在“仿真”环境下模拟问题、分析问题、解决问题的基础上撰写而成,因此,“仿真”环境是本书的一大亮点和特色,其主导思想是一切从实践出发,立足问题、解决问题,把实操、实践作为重点。不仅如此,书中把一些“极为抽象”的理论通俗化,便于读者理解。 另外,本书旨在让读者充分理解Oracle在性能优化方面的基础理论及原理性的知识,其中性能优化解决方案是本书重点阐述的内容,着重在问题发生、预判、防患、分析、解决上给出可行方案。 在性能优化方面,首先给出不同优化方案的工作机理,然后循着看懂SQL执行计划→内存管理实验→性能指标分析→得出性能实验结论→提出性能提升改进方案的步骤展开讲解。 在存储方面,首先给出不同存储方案的工作机理以及对性能的影响并加以验证,然后给出合理的解决方案。 在具体细节方面,针对具体问题,阐明有可能导致问题的原因并加以验证,然后给出针对具体细节的解决方案并进行验证。 本书也涉及几个有关性能的报告,由数据库自身提供。 关于《Linux下Oracle 10g 迁移到Oracle 11g的案例》是笔者于2018年为天津市海关成功实施的案例,总结出来与大家分享并以电子文档的形式赠与读者。读者完全可以参考借鉴其中的做法,极具实践指导意义。 总之,性能优化涉及数据库自身内存优化、存储优化以及外部应用优化等。是既细致又复杂,充满挑战的一件事情,要求DBA掌握必要的数据库机理,在此基础上得出自己的判断,找出问题根源。本书将有助于DBA缩短定位问题的时间,从而快速解决问题。 本书组织结构 本书共分为6个篇章: 第一篇章(第1~2章):Oracle体系结构及SQL计划篇,着重阐述Oracle体系结构及SQL执行计划方面的有关内容。 第二篇章(第3~5章):Oracle存储管理篇,着重阐述Oracle数据库存储结构、表空间、ASM自动存储管理等方面的内容。 第三篇章(第6~7章):Oracle内存管理篇,着重阐述Oracle的内存结构及分析与调整等方面的内容。 第四篇章(第8~10章):Oracle性能指标及实验篇,着重阐述Oracle动态性能指标、索引与性能、性能实验以及不合理的表结构、SQL语句对Oracle性能的影响与措施等方面的内容。 第五篇章(第11~12章):Oracle性能报告篇,着重阐述AWR及ADDM报告方面的内容。 第六篇章(第13~14章):Oracle实战案例篇,着重阐述Oracle 11g R2 RAC集群部署实验、Linux下Oracle 10g 迁移到Oracle 11g的案例以及Oracle特殊问题的解决案例等方面的内容。 配套资源 为了让读者切实学习好本书,随书提供下列配套资料。 (1)书中示例或综合实例源代码。下载包源代码的代码号与书中的代码号是一 一对应的;这样就省去了读者敲写的麻烦,通过复制粘贴操作就可在自己的环境下执行了。 (2)本书的实验环境。该环境是从一个在用的生产系统里通过exp导出的dmp文件,实实在在的真实环境而非模拟虚构(其中的敏感数据已处理),该环境除满足本书的实验要求外,其中的存储子程序(过程、函数及触发器)以及DBlink等很多东西,对于从事Oracle数据库开发的读者也具有很好的借鉴和参考价值,是非常难得的资料。 读者需要通过imp命令将该dmp文件导入到自己数据库中,具体的导入操作,请参阅下载包中的使用说明。 (3)Linux环境下,将Oracle10g 2T数据迁移到11g下的完整案例电子文档。该电子文档详细说明了一整套的数据库迁移过程,对于拟进行Oracle数据库迁移工作的读者,很有实践指导意义。 本书的整体下载包读者可通过下面的二维码和下载链接获取使用。 http://www.m.crphdm.com/2020/0818/14285.shtml 备用网盘链接:https://pan.baidu.com/s/1Jp2OdUZGoxsw96WVoG8ogQ 提取码:z8vq 作者介绍与推荐 笔者毕业于北京交通大学电气工程及自动化专业,目前供职于中国铁路北京局集团公司。自从参加工作以来,先后参与了多个铁路应用项目的开发工作,同时也与多家IT企业合作研发数据库架构设计及开发项目。通过这些项目的开发,笔者积累了一定的实践经验,并从中获取了一些数据库开发运维的心得。 除此之外,自2014年起,笔者一直在天津大学软件学院从事兼职教学工作,所授课程为Oracle和PHP,教学经验的积累也让我更清晰地明白了如何把一个知识点讲解更清楚,力求引领读者尽快掌握书中所讲内容。 适用人群 本书的读者为具有Oracle一定理论基础及实践经验且希望或正在从事DBA的人员以及应用开发人员。 致谢 面对当今信息科技的日新月异,笔者也深感追赶不上时代的脚步,本书难免有疏漏和不足的地方,敬请读者朋友批评指正,在此深表谢意。
甘长春老师毕业于北京交通大学电气工程及自动化专业,目前供职于中国铁路北京局集团公司。自从参加工作以来,先后参与了多个铁路应用项目的开发工作,同时也与多家IT企业合作研发数据库架构设计及开发项目。通过这些项目的开发,积累了一定的实践经验,并从中获取了一些数据库开发运维的心得。
除此之外,自2014年起,甘长春老师一直在天津大学软件学院从事兼职教学工作,所授课程为Oracle和PHP,教学经验的积累也让他更清晰地明白了如何把一个知识点讲解更清楚,力求引领读者尽快掌握书中所讲内容。 张建军,毕业于天津师范大学计算机科学与技术专业 ,现任天津市融创软通科技股份有限公司副总经理,教育培训事业部技术总监 ,高级工程师;Oracle认证专家,RedHad(红帽)认证专家, 截至目前有近20年的软件开发、项目管理及教育培训工作经验。
第1章 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 SQL*Plus的执行计划设置 12 2.2.1 设置Autotrace(自动跟踪)参数 12 2.2.2 在SQL*Plus中显示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 B*tree索引 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 第10章 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 第11章 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 第12章 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 第1次采集快照并施加负荷 359 12.3.3 采集第2次快照 359 12.3.4 创建一个优化任务并执行 360 12.3.5 查询建议结果 361 12.3.6 ADDM报告解释 361 12.4 本章小结 365 第13章 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 第14章 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
你还可能感兴趣
我要评论
|