留言点赞前三名送《Oracle Database 12cR2 性能调整与优化》

《ORACLE DATABASE 12CR2性能调整与优化(第5版)》ios

     Richard Niemiec(理查德·尼米克) 著  算法

     董志平 刘永甫 吕学勇 译sql

    清华大学出版社   2019-04-01出版   订价 168.00元shell


做者简介:数据库

    Richard Niemiec(理查德·尼米克)是优选知名的IT 专家,他是Oracle ACE 总监、Oracle 认证大师,还曾经是 TUSC 的首席执行官和创始人之一。TUSC 始创于1988 年,总部在美国芝加哥,是专一于Oracle 业务解决方案 的系统集成商,跻身于全美发展速度很快的500 强之列,在美国各地有10 家分号。Richard 还曾经担任Rolta 国 际董事会执行顾问,Rolta TUSC 总裁和Rolta EICT 靠前总裁。 TUSC 是Oracle 公司在2002 年、2004 年、2007 年、2008 年、2010 年、2011 年和2012 年的年度合做伙伴(很后两年是Rolta TUSC)。Rolta 是基于IT 的地理空间 解决方案的靠前市场领头羊,可知足基础设施、电信、电力、机场、国防、国土安全、城市发展、城市规划和环 境保护等多种行业的需求。 编程

    Richard 是靠前Oracle 用户组(IOUG)的前任主席,也是中西部Oracle 用户组(MOUG)的现任主席。在过去的 30 年间,他为弘扬Oracle 技术而频频发表演说,到过美国几乎全部的主要城市,还到过不少靠前大都市。他6 次被 评为Oracle 合做者/优选用户大会很好演讲者,10 次被评为中西部用户大会很好演讲者,还曾经被评为Oracle 全 球大会很好演讲者。在过去的25 年间,他为不少名列财富500 强的客户设计过系统架构并实施过优化,这些客户 包括ACT、玛氏公司、麦当劳、诺基亚、Navteq(MapQuest)、密西根大学、AT&T 和百事可乐。他在数据处理方 面的经验,从创新和架构延伸到教学和咨询,重点是执行方向、数据库管理和架构、性能优化、项目管理和技术 教育。他是优选很早荣获Oracle 大师认证(OCM)的6 强人之一,常常与Oracle 开发团队一道工做,特别是在beta 测试的过程当中。2011 年,他撰写的《Oracle Database 11g 性能调整与优化》一书被评为Oracle 丛书中的很畅销书, 在此以前,该书的8i、9i 和10g 版也被评为性能优化类中的很畅销书。 数组

    Richard于2006年得到全国贫困家庭学生成功者奖,于2007年得到普渡大学校友杰出电气和计算机工程师奖, 还两次荣获 IOUG 有名的 Chris Wooldridge 奖。他于1998 年入选美国企业家名人堂。缓存


中译本译者简介:安全

    注:上图最后一张照片是本书译者吕学勇先生造访本书做者Richard Niemiec的公司TUSC时与其合影。性能优化


目录列表:

 

第1章 Oracle Database 12cR1和12cR2新特性介绍(针对DBA和开发人员)  1

1.1 Oracle Database 12cR1(12.1.0.1) 4 

1.1.1 VARCHAR2和NVARCHAR2的大小限制增长到32K 4 

1.1.2 局部索引 4 

1.1.3 不可视列 5 

1.1.4 相同列上的多个索引 5 

1.1.5 获取前x行 6 

1.1.6 可插拔数据库(PDB) 7 

1.1.7 Oracle数据库云服务(数据库即服务) 9 

1.1.8 PDB级别:MEMORY_LIMIT和MEMORY_MINIMUM(12cR2) 14 

1.1.9 在导入时改变压缩方式 14 

1.1.10 自适应查询优化 15 

1.1.11 PGA_AGGREGATE_LIMIT 15 

1.1.12 UNION / UNION ALL的并发执行 16 

1.1.13 调用者权限函数能够作结果集缓存 16 

1.1.14 新的DBMS_UTILITY.EXPAND_SQL_TEXT包 16 

1.1.15 列的默认值能够基于序列 16 

1.1.16 用于智能闪存的多个SSD设备 16 

1.1.17 基于成本的优化器统计信息的并发收集 16 

1.1.18 加强的系通通计信息 17 

1.1.19 用于可能失控的查询的资源管理器 17 

1.1.20 自动数据优化(ADO) 17 

1.1.21 全局索引维护:DROP和TRUNCATE分区操做 18 

1.1.22 ASM磁盘清理 18 

1.1.23 在线操做能力的提高 18 

1.1.24 数据卫士的改进 19 

1.1.25 RMAN改进 19 

1.2 Oracle Database 12cR1(12.1.0.2) 19 

1.2.1 IM内存数据库 19 

1.2.2 不错索引压缩 22 

1.2.3 自动大表缓存 22 

1.2.4 FDA对容器数据库的支持 22 

1.2.5 全数据库缓存 22 

1.2.6 JSON支持 22 

1.2.7 FIPS 140加密参数 22 

1.2.8 PDB子集克隆 22 

1.2.9 快速Home目录建立:建立“黄金映像” 22 

1.3 Oracle Database 12cR2(12.2) 23 

1.3.1 应用开发 23 

1.3.2 下降迁移到Oracle的成本和问题的加强功能 23 

1.3.3 可用性 24 

1.3.4 大数据 25 

1.3.5 压缩和存档 26 

1.3.6 Oracle RAC和GI 26 

1.3.7 安全 27 

1.4 Oracle 12c中新的后台进程 27 

1.5 Exadata——新版本X6! 27 

1.6 版本对比 28 

1.7 新特性回顾 31 


第2章 索引的基本原理(针对DBA和初级开发人员) 33 

2.1 索引的基本概念 34 

2.2 不可视索引 36 

2.3 相同列上的多个索引 38 

2.4 复合索引 41 

2.5 索引抑制 42 

2.5.1 使用不等于运算符(<>、!=) 43 

2.5.2 使用IS NULL或IS NOT NULL 43 

2.5.3 使用LIKE 44 

2.5.4 使用函数 45 

2.5.5 比较不匹配的数据类型 45 

2.6 选择性 46 

2.7 聚簇因子 46 

2.8 二元高度 47 

2.9 使用直方图 50 

2.10 快速全扫描 51 

2.11 跳跃式扫描 51 

2.12 索引的类型 52 

2.12.1 B树索引 52 

2.12.2 位图索引 53 

2.12.3 哈希索引 55 

2.12.4 索引组织表 56 

2.12.5 反向键索引 56 

2.12.6 基于函数的索引 56 

2.12.7 分区索引 57 

2.12.8 12cR2中分区索引的新特性 59 

2.12.9 位图链接索引 60 

2.13 快速重建索引 60 

2.14 在线重建索引 60 

2.15 要诀回顾 61 


第3章 可插拔数据库、磁盘实施方法和ASM(针对DBA) 63 

3.1 可插拔数据库(Oracle 12c新增) 64 

3.1.1 CDB或PDB建立的对象 65 

3.1.2 建立PDB的多种方法 66 

3.1.3 可插拔数据库的一些强大命令 66 

3.1.4 在PDB中使用ALTER SYSTEM和其余一些命令 70 

3.1.5 在可插拔数据库中使用In-Memory(IM) 71 

3.1.6 可插拔数据库在12cR2中的其余新特性 71 

3.1.7 子集备库(12cR2新增特性) 71 

3.2 磁盘阵列 72 

3.2.1 使用磁盘阵列改进性能和可用性 72 

3.2.2 所需的磁盘数量 72 

3.2.3 可用的RAID级别 73 

3.2.4 更新的RAID 5 73 

3.2.5 SSD固态硬盘 74 

3.2.6 ASM存储管理(条带/镜像) 74 

3.3 传统文件系统的安装和维护 75 

3.3.1 考虑成本 75 

3.3.2 分开存储数据和索引文件 75 

3.3.3 避免I/O磁盘争用 76 

3.4 Oracle 12c热图和自动数据优化(ADO) 77 

3.5 Oracle 12c I/O性能跟踪视图(Outliers) 78 

3.6 Oracle大文件表空间 78 

3.7 ASM简介 79 

3.7.1 IT部门内各个角色之间的沟通 80 

3.7.2 ASM实例 80 

3.7.3 ASM初始化参数 81 

3.7.4 12c版本中ASM的安装 82 

3.7.5 srvctl命令加强 88 

3.7.6 ASM磁盘清洗(scrubbing) 91 

3.7.7 ASM再平衡加强 92 

3.7.8 ASM快速镜像再同步 94 

3.7.9 ASM过滤驱动器(Filter Driver) 94 

3.7.10 ASM和权限 101 

3.7.11 ASM和多路径 103 

3.7.12 大文件和ASM 104 

3.8 使用分区来避免磁盘争用 104 

3.8.1 得到关于分区的更多信息 106 

3.8.2 其余类型的分区 106 

3.8.3 (本地)分区索引 109 

3.8.4 部分索引 109 

3.8.5 全局索引维护:删除或截断分区操做 111 

3.8.6 其余分区选项 111 

3.8.7 使用索引分区 113 

3.8.8 导出分区 113 

3.9 消除碎片(按需操做——当心使用!) 114 

3.9.1 使用正确的区块大小 114 

3.9.2 正确设定PCTFREE以免链化(Chaining)现象 115 

3.9.3 使用自动段空间管理(ASSM) 115 

3.10 增长日志文件尺寸和LOG_CHECKPOINT_INTERVAL以提升速度 116 

3.11 肯定重作日志文件的大小是否存在问题 116 

3.11.1 肯定日志文件的大小和检查点的时间间隔 117 

3.11.2 其余有帮助的重作日志命令 117 

3.12 在不一样的磁盘和控制器上存放多个控制文件 118 

3.13 磁盘I/O的其余注意事项和提示 119 

3.14 设计阶段须要注意的问题 119 

3.15 要诀回顾 120 


第4章 经过初始化参数调优数据库(针对DBA) 123 

4.1 升级到Oracle 12c以后 124 

4.2 使用SEC_CASE_SENSITIVE_LOGON 125 

4.3 与性能相关的重要的内存初始化参数 126 

4.4 PDB级:MEMORY_LIMIT和MEMORY_MINIMUM 128 

4.5 内存数据库(INMEMORY_SIZE) 129 

4.6 在不重启数据库的状况下修改初始化参数 133 

4.7 修改PDB级别的初始化参数 136 

4.8 经过Oracle实用程序洞察初始化参数 137 

4.9 用企业管理器查看初始化参数 137 

4.10 优化DB_CACHE_SIZE来提升性能 138 

4.11 使用V$DB_CACHE_ADVICE优化DB_CACHE_SIZE 140 

4.12 设定DB_BLOCK_SIZE来反映数据读的大小 143 

4.13 把SGA_MAX_SIZE设置为主内存大小的25%~50% 144 

4.14 优化SHARED_POOL_SIZE以获取最佳性能 144 

4.14.1 使用存储过程来优化共享SQL区域的使用 145 

4.14.2 设定足够大的SHARED_POOL_SIZE以保证充分利用DB_CACHE_SIZE 146 

4.14.3 保证数据字典缓存可以缓存足够对象 146 

4.14.4 保证库缓存的重载率为0,并使命中率在95%以上 147 

4.14.5 使用可用内存来判断SHARED_POOL_SIZE是否设置正确 149 

4.14.6 使用X$KSMSP表详细观察共享池 150 

4.14.7 关于缓存大小须要记住的要点 151 

4.14.8 与初始化参数相关的等待 151 

4.15 在Oracle中使用多个缓冲池 152 

4.15.1 与DB_CACHE_SIZE相关并为数据分配内存的池 152 

4.15.2 修改LRU算法 153 

4.15.3 与SHARED_POOL_SIZE相关并为语句分配内存的池 153 

4.16 调整PGA_AGGREGATE_TARGET以优化内存的使用 154 

4.17 修改SGA大小以免换页(Paging)和交换(Swapping) 155 

4.18 了解Oracle优化器 155 

4.19 建立足够的调度程序(Dispatcher) 156 

4.19.1 要有足够的打开游标(OPEN_CURSORS) 157 

4.19.2 不要让DDL语句失败(使用DDL锁超时机制) 157 

4.20 两个重要的Exadata初始化参数(仅针对Exadata) 157 

4.21 25个须要深思熟虑的重要初始化参数 157 

4.21.1 历年的初始化参数 159 

4.21.2 查找未公开的初始化参数 160 

4.22 理解典型的服务器 161 

4.22.1 典型服务器的建模 161 

4.22.2 Oracle Application数据库选型 162 

4.23 要诀回顾 166 


第5章 Oracle企业管理器云控制器(针对DBA和开发人员) 169 

5.1 Oracle企业管理器(EM)基础和经过Oracle云访问OEM 170 

5.2 从All Targets和其余分组开始 173 

5.3 使用OEM的Performance菜单进行监控和优化 175 

5.3.1 Performance选项卡:Top Activity 175 

5.3.2 Performance选项卡:SQL | SQL Performance Analyzer 176 

5.3.3 Performance选项卡:Real-Time ADDM 178 

5.3.4 Performance选项卡:SQL | Access Advisor 181 

5.3.5 Performance选项卡:管理Optimizer Statistics 182 

5.3.6 Performance选项卡:AWR | AWR Administration 182 

5.3.7 Performance选项卡:ASH Analytics 184 

5.4 使用OEM Administration菜单进行监控和优化 185 

5.4.1 Database Administration选项卡:Storage | Tablespaces 185 

5.4.2 Database Administration选项卡:In-Memory Central和Initialization Parameters 187 

5.4.3 Database Administration选项卡:所有初始化参数 188 

5.4.4 Database Administration选项卡:Resource Manager (Consumer Groups) 188 

5.5 使用OEM Database或Cluster Database菜单进行监控和优化 189 

5.5.1 Database选项卡:Job Activity 189 

5.5.2 Cluster Database选项卡:Configuration | Database Topology 190 

5.6 监控主机 190 

5.7 监控应用服务器和Web应用 191 

5.8 真正应用测试(数据库回放) 193 

5.9 小结 194 

5.10 要诀回顾 194 


第6章 使用EXPLAIN PLAN、TRACE和SQL计划管理(针对开发人员和DBA) 195 

6.1 Oracle的SQL跟踪(SQL TRACE)实用工具 196 

6.1.1 对简单查询使用SQL跟踪的简单步骤 196 

6.1.2 TRACE输出部分 200 

6.1.3 深刻探讨TKPROF输出 201 

6.2 使用DBMS_MONITOR 203 

6.3 单独使用EXPLAIN PLAN 207 

6.3.1 对简单查询使用的另外一个EXPLAIN示例 208 

6.3.2 EXPLAIN PLAN—— 自顶而下仍是从下往上读取 209 

6.3.3 在开发者产品中利用跟踪/EXPLAIN发现有问题的查询 213 

6.3.4 PLAN_TABLE表中的重要列 214 

6.3.5 使用DBMS_XPLAN 215 

6.3.6 未公开的TRACE初始化参数 216 

6.4 使用STORED OUTLINES(存储纲要) 217 

6.5 使用SQL计划管理(SPM)和SPM示例 218 

6.5.1 SPM术语 218 

6.5.2 使用SPM 219 

6.5.3 使用固定的SQL计划基线 223 

6.5.4 从STORED OUTLINES移植到SQL计划管理 223 

6.5.5 自适应计划(Oracle 12c新特性)和SPM 225 

6.6 要诀回顾 231 


第7章 基本的提示语法(针对开发人员和DBA) 235 

7.1 最经常使用的提示 236 

7.1.1 慎用提示 237 

7.1.2 首先修正设计方案 237 

7.2 可用提示及归类 238 

7.2.1 执行路径提示 238 

7.2.2 访问方法提示 238 

7.2.3 查询转换提示 239 

7.2.4 链接操做提示 239 

7.2.5 并行执行提示 239 

7.2.6 其余提示 240 

7.3 指定提示 240 

7.4 指定多个提示 241 

7.5 使用别名时,提示别名而非表名 241 

7.6 提示 242 

7.6.1 Oracle的演示样板:HR方案 242 

7.6.2 FIRST_ROWS提示 242 

7.6.3 ALL_ROWS提示 243 

7.6.4 FULL提示 243 

7.6.5 INDEX提示 244 

7.6.6 NO_INDEX提示 245 

7.6.7 INDEX_JOIN提示 246 

7.6.8 INDEX_COMBINE提示 246 

7.6.9 INDEX_ASC提示 246 

7.6.10 INDEX_DESC提示 247 

7.6.11 INDEX_FFS提示 247 

7.6.12 ORDERED提示 248 

7.6.13 LEADING提示 249 

7.6.14 NO_EXPAND提示 249 

7.6.15 DRIVING_SITE提示 250 

7.6.16 USE_MERGE提示 250 

7.6.17 USE_NL提示 251 

7.6.18 USE_HASH提示 252 

7.6.19 QB_NAME提示 253 

7.6.20 PUSH_SUBQ提示 253 

7.6.21 PARALLEL提示 254 

7.6.22 NO_PARALLEL提示 255 

7.6.23 PARALLEL_INDEX提示 255 

7.6.24 APPEND提示 255 

7.6.25 NOAPPEND提示 256 

7.6.26 CACHE提示 256 

7.6.27 NOCACHE提示 257 

7.6.28 RESULT_CACHE提示 257 

7.6.29 CURSOR_SHARING_EXACT提示 258 

7.6.30 INMEMORY、NO_INMEMORY及其余IM提示 258 

7.6.31 USE_INVISIBLE_INDEXES提示 259 

7.6.32 CONTAINERS提示 260 

7.6.33 WITH_PLSQL提示 260 

7.7 杂项提示及注意事项 260 

7.7.1 未公开的提示 262 

7.7.2 如何在视图中使用提示 263 

7.7.3 关于提示和STORED OUTLINES(或SPM)的注意事项 263 

7.8 提示为何不起做用 263 

7.9 提示一览 264 

7.10 要诀回顾 265 


第8章 查询优化(针对开发人员和初级DBA) 267 

8.1 应该优化哪些查询?查询V$SQLAREA和V$SQL视图 268 

8.1.1 从V$SQLAREA视图中选出最糟糕的查询 268 

8.1.2 从V$SQL视图中选出最糟糕的查询 270 

8.2 使用Oracle 12c视图定位占用大量资源的会话和查询 271 

8.2.1 从V$SESSMETRIC视图中选出当前最占用资源的会话 271 

8.2.2 查看可用的AWR快照 272 

8.2.3 从DBA_HIST_SQLSTAT视图中发现最糟糕的查询 272 

8.3 什么时候应该使用索引 272 

8.3.1 从DBA_HIST_SQLTEXT视图中选择查询文本 273 

8.3.2 从DBA_HIST_SQL_PLAN视图中选出查询的EXPLAIN PLAN 274 

8.4 忘记了索引怎么办 275 

8.4.1 创建索引 275 

8.4.2 不可视索引(Invisible Index) 276 

8.4.3 查看表上的索引 276 

8.4.4 在列上正确创建索引了吗 276 

8.5 创建了差的索引怎么办 277 

8.6 删除索引时保持谨慎 279 

8.7 在SELECT和WHERE子句中的列上创建索引 280 

8.8 使用索引快速全扫描 281 

8.9 使查询“魔术”般加速 283 

8.10 在内存中缓存表 283 

8.11 使用结果集缓存(Result Cache) 285 

8.12 在多个索引间选择(使用选择性最佳的索引) 285 

8.13 索引合并 287 

8.14 可能被抑制的索引 289 

8.15 基于函数的索引 290 

8.16 虚拟列(Virtual Column) 291 

8.17 “古怪”的OR 291 

8.18 使用EXISTS函数和嵌套子查询 292 

8.19 表就是视图 293 

8.20 SQL和“大一统”理论 293 

8.21 Oracle Database 12c中的优化变化 294 

8.21.1 Oracle 12c自适应查询优化 294 

8.21.2 自适应统计信息 300 

8.21.3 Oracle 12c统计信息收集的更新和两种新的直方图 304 

8.21.4 Oracle 12c SQL计划管理的更新 305 

8.22 Oracle自动SQL优化 306 

8.22.1 保证执行优化操做的用户能访问API 307 

8.22.2 建立优化任务 307 

8.22.3 肯定从顾问日志中能够查看到任务 307 

8.22.4 执行SQL优化任务 307 

8.22.5 查看优化任务的状态 308 

8.22.6 显示SQL优化顾问生成的报告 308 

8.22.7 检查报告输出 308 

8.23 使用SQL优化顾问自动优化SQL语句 310 

8.23.1 启用自动SQL优化顾问 310 

8.23.2 配置自动SQL优化顾问 310 

8.23.3 查看自动SQL优化的结果 311 

8.24 使用SQL性能分析器(SPA) 314 

8.25 要诀回顾 319 


第9章 表链接和其余不错优化(针对不错DBA和开发人员) 321 

9.1 数据库回放(捕获/回放) 322 

9.1.1 设置源数据库,为数据库回放捕获负载 323 

9.1.2 准备捕获负载 323 

9.1.3 捕获负载 323 

9.1.4 准备负载以回放 324 

9.1.5 为回放处理负载 325 

9.1.6 准备回放负载 325 

9.1.7 执行负载回放 325 

9.2 SQL性能分析器(SPA) 327 

9.2.1 建立SQL优化集 327 

9.2.2 建立分析任务 328 

9.2.3 执行分析任务 328 

9.2.4 查询性能分析的顾问任务 329 

9.2.5 取消正在执行的SPA分析任务 329 

9.2.6 删除SPA分析任务 329 

9.2.7 肯定活动的SQL优化集 330 

9.2.8 移除SQL优化集引用 330 

9.2.9 删除SQL优化集 330 

9.3 链接方法 331 

9.3.1 嵌套循环链接 331 

9.3.2 排序合并链接 332 

9.3.3 聚簇链接 333 

9.3.4 哈希链接 333 

9.3.5 索引合并链接 334 

9.4 表链接相关的初始化参数 336 

9.5 双表链接:等尺寸表(基于成本) 337 

9.6 双表索引链接:等尺寸表(基于成本) 340 

9.7 强制使用特定的链接方法 343 

9.8 排除多表链接中的链接记录(候选行) 345 

9.9 大小不一样的表间的双表链接 346 

9.10 三表链接:不那么有趣 349 

9.11 位图链接索引 350 

9.11.1 位图索引 351 

9.11.2 位图链接索引 352 

9.11.3 位图链接索引的最佳应用 353 

9.12 第三方产品性能优化 355 

9.13 优化分布式查询 359 

9.14 一切就绪 360 

9.15 其余优化技术 361 

9.15.1 外部表 361 

9.15.2 数据快照太旧(Snapshot Too Old):开发人员的编程问题 364 

9.15.3 设置事件以转储每次等待 365 

9.15.4 从14小时到30秒—— EXISTS操做符 366 

9.16 在块级别进行优化(不错内容) 367 

9.16.1 数据块转储中的关键部分 370 

9.16.2 索引块转储简介 376 

9.17 使用简单的数学方法进行优化 378 

9.17.1 传统的数学分析 378 

9.17.2 七步方法论 378 

9.17.3 性能推导公式 379 

9.17.4 模式分析 383 

9.17.5 数学方法总结 387 

9.18 要诀回顾 387 


第10章 使用PL/SQL提高性能(针对开发人员和DBA) 391 

10.1 利用PL/SQL函数结果集缓存提高性能(Oracle 12c中有改进) 393 

10.2 在SQL语句中定义PL/SQL子程序(Oracle 12c新特性) 401 

10.3 直接在PL/SQL表达式中引用序列 403 

10.4 自增加(Identity)字段(Oracle 12c新特性) 404 

10.5 将VARCHAR二、NVARCHAR2和RAW数据类型的优选长度增长到32K(Oracle 12c新特性) 406 

10.6 语句中容许绑定PL/SQL专用数据类型(Oracle 12c新特性) 407 

10.7 在SQL函数调用中使用命名参数 407 

10.8 使用CONTINUE语句简化循环 410 

10.9 利用编译时警告捕捉编程错误(Oracle 12c加强特性) 412 

10.10 使用本地编译提高性能 414 

10.11 使用优化的编译器使性能最优 416 

10.12 使用DBMS_APPLICATION_INFO包进行实时监控 421 

10.13 在数据库表中记录计时信息 422 

10.14 减小PL/SQL程序的单元迭代数量和迭代时间 424 

10.15 使用ROWID进行迭代处理 426 

10.16 将数据类型、IF条件排序和PLS_INTEGER标准化 428 

10.16.1 确保比较运算中的数据类型相同 428 

10.16.2 根据条件出现的频率排序IF条件 430 

10.16.3 使用PL/SQL数据类型PLS_INTEGER进行整数运算 430 

10.17 减小对SYSDATE的调用 431 

10.18 减小MOD函数的使用 432 

10.19 经过固定PL/SQL对象提高共享池的使用 433 

10.19.1 将PL/SQL对象语句固定(缓存)到内存中 434 

10.19.2 固定全部的包 434 

10.20 识别须要固定的PL/SQL对象 435 

10.21 使用和修改DBMS_SHARED_POOL.SIZES 435 

10.22 从DBA_OBJECT_SIZE中获取详细的对象信息 436 

10.23 发现无效对象 437 

10.24 发现已禁用的触发器 438 

10.25 将PL/SQL关联数组用于快速参考表查询 439 

10.26 查找和优化所使用对象的SQL 441 

10.27 在处理DATE数据类型时使用时间组件 444 

10.28 使用PL/SQL优化PL/SQL 446 

10.29 理解PL/SQL对象定位的含义 446 

10.30 使用回滚段打开大型游标 447 

10.31 使用数据库临时表提升性能 449 

10.32 限制动态SQL的使用 449 

10.33 使用管道表函数创建复杂的结果集 450 

10.34 别管调试命令 454 

10.35 “跟着感受走”:为初学者准备的例子 458 

10.35.1 PL/SQL示例 459 

10.35.2 建立过程的例子 459 

10.35.3 从PL/SQL中执行过程的例子 459 

10.35.4 建立函数的例子 460 

10.35.5 在SQL中执行get_cust_name函数 460 

10.35.6 建立程序包 460 

10.35.7 在数据库触发器中使用PL/SQL 460 

10.36 要诀回顾 461 


第11章 Oracle云、Exadata、RAC调优和并行特性的使用 463 

11.1 云计算的演进(过去和如今) 465 

11.2 Oracle云 467 

11.3 Exadata数据库一体机 474 

11.3.1 Exadata术语和基础知识 474 

11.3.2 Exadata详细信息 475 

11.3.3 Exadata存储扩展柜简介 477 

11.3.4 智能扫描(Smart Scan) 478 

11.3.5 闪存(Flash Cache) 478 

11.3.6 存储索引(Storage Indexes) 480 

11.3.7 混合列压缩 481 

11.3.8 IORM 484 

11.3.9 在Exadata中使用全部的Oracle安全优点 484 

11.3.10 最佳实践 485 

11.3.11 小结:Exadata=根本性改变! 485 

11.4 Oracle Database Appliance(ODA) 486 

11.5 M7 SPARC芯片的SuperCluster 486 

11.6 其余能够考虑的Oracle硬件 486 

11.6.1 Oracle大数据设备X6-2 486 

11.6.2 ZFS存储服务器 487 

11.6.3 StorageTek模块化磁带库系统 487 

11.7 并行数据库 487 

11.8 RAC 488 

11.8.1 Oracle RAC架构 488 

11.8.2 Oracle RAC系统的内部工做原理 489 

11.9 RAC性能优化概述 492 

11.9.1 RAC集群互连的性能 492 

11.9.2 寻找RAC等待事件——会话等待 493 

11.9.3 RAC等待事件和互连统计信息 494 

11.9.4 集群互连优化—— 硬件层 498 

11.10 并行操做 501 

11.10.1 并行操做的基本概念 501 

11.10.2 并行DML和DDL语句及操做 503 

11.10.3 管理并行服务器资源和并行语句排队 503 

11.10.4 并行和分区 504 

11.10.5 操做内并行和操做间并行 504 

11.10.6 使用操做内并行和操做间并行的示例(PARALLEL和NO_PARALLEL提示) 505 

11.10.7 使用并行操做建立表和索引的示例 506 

11.10.8 经过V$视图监控并行操做 507 

11.10.9 在并行操做中使用EXPLAIN PLAN和AUTOTRACE 509 

11.10.10 使用set autotrace on命令 511 

11.10.11 优化并行执行和初始化参数 512 

11.10.12 并行加载 514 

11.10.13 优化RAC中的并行操做 515 

11.10.14 并行操做的目标 515 

11.10.15 RAC并行使用模型 515 

11.10.16 并行相关的初始化参数 515 

11.10.17 查看并行统计数据的V$视图 515 

11.10.18 Create Table As 516 

11.10.19 并行创建索引 516 

11.10.20 性能注意事项和小结 516 

11.10.21 其余的并行操做注意事项 516 

11.11 Oracle的联机文档 517 

11.12 要诀回顾 517 


第12章 V$视图(针对开发人员和DBA) 519 

12.1 建立和受权访问V$视图 520 

12.2 获取构建V$视图的X$脚本列表 524 

12.3 使用有帮助的V$脚本 526 

12.3.1 基本的数据库信息 527 

12.3.2 基本的自动负载资料库(AWR)信息 527 

12.3.3 基本的许可信息 528 

12.3.4 数据库中已安装的数据库选项 529 

12.4 内存分配概要(V$SGA) 530 

12.4.1 设置INMEMORY_SIZE后查询V$IM_SEGMENTS 531 

12.4.2 自动内存管理与MEMORY_TARGET参数 532 

12.4.3 详尽的内存分配(V$SGASTAT) 533 

12.4.4 PDB和根CDB内存分配的详细信息(V$SGASTAT) 534 

12.5 在V$PARAMETER视图里找出 spfile.ora/init.ora参数设置 534 

12.6 在PDB级别修改初始化参数 535 

12.7 肯定数据所需内存(V$SYSSTAT和V$SYSMETRIC) 536 

12.8 肯定数据字典所需内存(V$ROWCACHE) 537 

12.9 肯定共享SQL和PL/SQL所需内存(V$LIBRARYCACHE) 538 

12.10 查询V$CONTAINERS 和V$PDBS以获取容器的信息 539 

12.10.1 使用可插拔数据库时查询V$CONTAINERS 540 

12.10.2 使用可插拔数据库时查询V$PDBS 540 

12.10.3 使用结果集缓存(Result Cache) 541 

12.11 肯定须要保留在内存中(固定住)的PL/SQL对象 543 

12.12 监控V$SESSION_LONGOPS视图以定位有问题的查询 543 

12.13 经过V$SQLAREA发现有问题的查询 545 

12.14 检查用户的当前操做及其使用的资源 546 

12.14.1 查找用户正在访问的对象 547 

12.14.2 获取详细的用户信息 547 

12.15 使用索引 548 

12.16 肯定锁定问题 549 

12.16.1 杀掉有问题的会话 551 

12.16.2 找出使用多个会话的用户 552 

12.16.3 查询当前的概要文件 552 

12.17 找出磁盘I/O问题 553 

12.18 检查权限和角色 556 

12.19 等待事件V$视图 558 

12.20 一些主要的V$视图类别 561 

12.21 要诀回顾 568 


第13章 X$表(针对不错DBA) 571 

13.1 X$表介绍 572 

13.1.1 有关X$表的误解 573 

13.1.2 受权查看X$表 573 

13.2 在Oracle 12c中建立V$视图和X$表 574 

13.3 得到Oracle 12c中全部X$表的列表 577 

13.4 得到Oracle 12c中全部X$索引的列表 578 

13.5 对X$表和索引使用的提示 579 

13.6 监控共享池的空间分配 580 

13.7 建立查询脚原本监控共享池 581 

13.7.1 ORA-04031错误 581 

13.7.2 空间分配过大而引发的争用 582 

13.7.3 共享池碎片化 582 

13.7.4 共享池和Java池中空闲内存太低 584 

13.7.5 使用库缓存内存 584 

13.7.6 太高的硬解析 586 

13.7.7 互斥锁/闩锁等待和/或休眠 587 

13.7.8 其余X$表说明 588 

13.8 得到重作日志的信息 589 

13.9 设置初始化参数 589 

13.10 缓冲区缓存/数据块的详细信息 592 

13.10.1 缓存状态 593 

13.10.2 占用数据块缓存的段 595 

13.10.3 热数据块/闩锁争用和等待事件 596 

13.11 得到实例/数据库相关的信息 600 

13.12 高效使用X$表及相关策略 601 

13.13 Oracle的内部主题 601 

13.13.1 跟踪 601 

13.13.2 DBMS_TRACE包 605 

13.13.3 事件 606 

13.13.4 转储 607 

13.13.5 oradebug命令 607 

13.13.6 trcsess工具 609 

13.14 阅读跟踪文件 609 

13.14.1 等待信息和响应时间 612 

13.14.2 递归调用 613 

13.14.3 模块信息 613 

13.14.4 提交 613 

13.14.5 UNMAP 613 

13.14.6 绑定变量 614 

13.14.7 错误 614 

13.15 X$表分组 615 

13.16 X$表与非V$固定视图的联系 628 

13.17 常见的X$表链接 629 

13.18 X$表的命名 630 

13.19 12cR2中将来版本的影响 638 

13.20 要诀回顾 638 


第14章 使用Statspack和AWR报告调优等待、闩锁和互斥锁 641 

14.1 Oracle 12cR2(12.2)中Statspack和AWR报告的新特性 642 

14.2 安装Statspack 643 

14.2.1 perfstat帐户的安全管理 643 

14.2.2 安装以后 644 

14.2.3 收集统计数据 645 

14.2.4 运行统计数据报告 647 

14.3 AWR和AWR报告 648 

14.3.1 手动管理AWR 649 

14.3.2 AWR自动快照 650 

14.3.3 AWR快照报告 650 

14.3.4 在Oracle企业管理器云控制器中运行AWR报告 651 

14.4 Statspack和AWR输出解析 654 

14.4.1 报告头信息和缓存大小 654 

14.4.2 负载概要 654 

14.4.3 实例效率 656 

14.4.4 共享池统计 658 

14.4.5 Top等待事件 658 

14.4.6 Oracle Bug 668 

14.4.7 Oracle影子进程的生命周期 669 

14.4.8 RAC等待事件和互连统计数据 669 

14.4.9 Top SQL语句 670 

14.4.10 实例活动统计数据 672 

14.4.11 表空间和文件I/O的统计数据 676 

14.4.12 段统计数据 678 

14.4.13 其余的内存统计数据 679 

14.4.14 UNDO统计数据 684 

14.4.15 闩锁和互斥锁统计信息 684 

14.4.16 在块级别调优和查看(不错) 692 

14.4.17 数据字典和库缓存的统计数据 694 

14.4.18 SGA内存统计数据 696 

14.4.19 非默认的初始化参数 697 

14.5 AWR报告和Statspack输出结果中须要首先查看的15项内容 698 

14.5.1 管理Statspack数据 699 

14.5.2 升级Statspack 700 

14.5.3 卸载Statspack 700 

14.6 新ADDM报告的快速说明 700 

14.7 12cR2脚本 704 

14.8 要诀回顾 706 


第15章 施行快速系统审查(针对DBA) 709 

15.1 整体绩效指数(TPI) 710 

15.2 训练绩效指数(EPI) 710 

15.3 系统绩效指数(SPI) 712 

15.4 内存绩效指数(MPI) 715 

15.4.1 排名前25的“内存滥用”语句是否被优化 715 

15.4.2 十大“内存滥用”语句在全部语句中所占的比重 716 

15.4.3 缓冲区缓存命中率 717 

15.4.4 数据字典缓存命中率 718 

15.4.5 库缓存命中率 719 

15.4.6 PGA内存排序命中率 719 

15.4.7 空闲的数据缓冲区的比例 720 

15.4.8 有效地使用结果集缓存 721 

15.4.9 固定/缓存对象 722 

15.5 磁盘绩效指数(DPI) 723 

15.5.1 优化滥用磁盘读操做的前25条语句 723 

15.5.2 最滥用磁盘读操做的前10条语句占全部语句磁盘读的比例 724 

15.5.3 分离表和索引,或者使用ASM 725 

15.5.4 关键任务表管理 725 

15.5.5 分离关键的Oracle文件 726 

15.5.6 自动UNDO管理 726 

15.5.7 有效地使用可插拔数据库 728 

15.6 整体绩效指数 729 

15.7 系统综合检查示例 730 

15.7.1 评级系统 730 

15.7.2 系统审查评级类别的示例 730 

15.7.3 须要当即采起行动的问题项 731 

15.7.4 其余须要采起行动的问题项 732 

15.8 系统信息列表 732 

15.8.1 与内存有关的数值 732 

15.8.2 与磁盘有关的数值 732 

15.8.3 与CPU有关的数值 733 

15.8.4 与备份和恢复有关的信息 733 

15.8.5 命名约定和/或标准以及安全信息问题 734 

15.8.6 DBA知识评级 734 

15.9 TPI和系统检查须要考虑的其余项 735 

15.10 要诀回顾 735 


第16章 运用UNIX实用工具来监控系统(针对DBA) 737 

16.1 UNIX/Linux实用工具 738 

16.2 使用sar命令来监控CPU的使用状况 738 

16.2.1 sar -u(检查CPU的繁忙程度) 738 

16.2.2 sar -d命令(找出I/O问题) 739 

16.2.3 sar -b命令(检查缓冲区高速缓存) 742 

16.2.4 sar -q命令(检查运行队列和交换队列的长度) 742 

16.3 使用sar命令和vmstat命令监控调页/交换 743 

16.3.1 使用sar命令的-p选项报告调页活动 743 

16.3.2 使用sar命令的-w选项来报告交换和切换活动 744 

16.3.3 使用sar命令的-r选项来报告空闲内存和空闲交换空间 744 

16.3.4 使用sar命令的-g选项来报告调页活动 744 

16.3.5 使用sar -wpgr命令来报告内存资源的使用状况 745 

16.4 使用top命令找出系统上最差的用户 747 

16.5 使用uptime命令监控CPU负载 748 

16.6 使用mpstat命令辨认CPU瓶颈 749 

16.7 结合使用ps命令和选定的V$视图 749 

16.8 使用iostat命令辨认磁盘I/O瓶颈 752 

16.8.1 为磁盘驱动器sd1五、sd1六、sd17和sd18使用iostat的-d选项 752 

16.8.2 使用iostat的-D选项 752 

16.8.3 使用iostat的-x选项 753 

16.8.4 将iostat的-x选项与shell脚本中的逻辑相结合 753 

16.9 使用ipcs命令来肯定共享内存 754 

16.10 使用vmstat命令监控系统负载 755 

16.11 监控磁盘的空闲空间 756 

16.11.1 df命令 756 

16.11.2 du命令 757 

16.12 使用netstat监控网络性能 757 

16.13 修改配置信息文件 758 

16.14 改善性能的其余途径 760 

16.15 要诀回顾 760 


附录A 重要的初始化参数(针对DBA) 763 

附录B V$视图(针对DBA和开发人员) 803 

附录C X$表(针对DBA) 821 


老虎刘签名赠书规则:

   截止到本周五(2019-06-07)晚8点,成功留言,而且点赞数超过50的前三位朋友,将会获赠老虎刘签名的这本书(包邮)。

本文分享自微信公众号 - 老虎刘谈oracle性能优化(sql_tigerliu)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索