![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能调优-Oracle-SQL
Oracle-SQL性能调优
戒掉贪嗔痴(薛双奇)
10年以上DBA从业经验,Oracle ACE,中国DBA联盟成员,青学会专家顾问,Oracle,MySQL,PostgreSQL DBA,大数据运维工程师。
熟悉20种数据库的运维及管理:横跨关系数据库,NoSQL数据库,搜索引擎,大数据等。
获得IT类认证十几张。
擅长数据库系统架构涉及,容量规划,灾备系统建设,故障诊断及性能优化。
展开
-
【Oracle】28.dbsnake-printsql脚本的用法
由此可见此脚本对于正在运行的进程,则可以通过进程号找到正在运行的SQL,同时打印它的SQL文本和执行计划,非常好用。同时它还打印了会话ID,以及。杀死会话的SQL语句,太智能了。我们可以看出,通过理解原理,编写脚本。此脚本由DBSNAKE,编写,我这里只测试及学习如何使用。是DBA运维过程中的比较高端而且非常有价值的一项工作。4.查看进程3023 的SQL和执行计划是什么。3.通过TOP查看 SPID;原创 2024-02-05 10:21:30 · 446 阅读 · 0 评论 -
【Oracle】27.使用display_cursor_9i.sql脚本查看执行计划
(3)2:TEST03表的结果集和TEST01表的索引先做嵌套循环连接。得到TEST01中需要取值的ID和TEST03表的和TEST01 ID 相同的子集。(5)1:前面得到的TEST01的子集 和 TEST01根据ID取到的结果集做嵌套循环连接。display_cursor_9i.sql 脚本的使用:SQL_HASH_VALUE,子游标号0输入一次。(4)5:根据上一步得到的ID,找到TEST01里面需要访问的数据。(6)0:从上面的结果集中取ID,NAME 列的值。上述SQL脚本由崔华老师提供。原创 2024-02-02 17:31:21 · 374 阅读 · 0 评论 -
【Oracle】26.使用10046事件查看Oracle执行计划小事牛刀
同时也可以看到执行计划,对象ID,解析调用执行情况,SQL_ID,SQL_HASH_VALUE,SQL_TEXT;card:实际返回结果集的行数。3.使用tkprof翻译trace文件。1.10046 事件的两种玩法。pr:物理读,数据文件读取数据。cr:逻辑读,内存查找数据。2.使用10046事件方法一。10046使用方法二。原创 2024-02-02 16:45:22 · 459 阅读 · 0 评论 -
【Oracle】25.谨慎使用set autotrace traceonly explain
(2)如下可以查看DML执行计划但不执行。4.针对DML语句的执行计划如何查看.1.SELECT 语句执行计划查询。2.INSERT 语句执行计划查询。而又不真实执行DML语句呢。(1) 会执行DML语句。--3.检查,果然执行。原创 2024-02-01 16:40:25 · 400 阅读 · 0 评论 -
【Oracle】24.Oracle11g使用STATSPACK
1.环境准备--创建独立的表空间存储statspack数据create tablespace perfstat datafile '/oracle/app/oracle/oradata/fermdg/perfstat.dbf' size 200M; Tablespace created.--执行安装statspack脚本文件,会提示输入perfstat用户的密码,默认表空间,临时表空间SQL> start ?/rdbms/admin/spcreate.sql Enter原创 2024-02-01 16:17:24 · 478 阅读 · 0 评论 -
23.Oracle查询转换总结
oracle强大的查询转换功能是其他DB所不能媲美的。通过查询转换功能,让SQL能使用更优秀的执行计划,但是有时候查询转换后的SQL并总是最优的,此时需要使用相反的HINT让它不进行相应的查询转换。通过灵活应用查询转换,让SQL走出更高效的执行化。1.Oracle查询转换总结。原创 2024-01-31 11:43:15 · 401 阅读 · 0 评论 -
22.对IN做子查询展开或视图合并
UNNEST(@"SEL$335DD26A"):说明走了子查询展开的执行计划。MERGE(@"SEL$3"):说明做了视图合并。1.什么是对IN做子查询展开或视图合并?2.对IN做子查询展开或视图合并的例子。原创 2024-01-31 11:12:11 · 378 阅读 · 0 评论 -
21.查询转换之-INLIST-FILTER
不做子查询展开的执行计划中出现FILTER;子查询最后一步被执行。能做子查询展开的,优先执行子查询,并且该走索引的会走索引。2.IN-LIST-FILTER执行计划的案例。1.什么是IN-LIST-FILTER?原创 2024-01-31 10:40:53 · 433 阅读 · 0 评论 -
20.查询转换之-INLIST EXPANSION/OR EXPANSION
使用 /*+USE_CONCAT*/ 的HINT 强制走IN-LIST-EXPANSION;(3)禁用IN-LIST-ITERATOR后不加HINT的执行计划。(2)查看IN-LIST-EXPANSION的执行计划。(4)不走IN-LIST-EXPANSION的执行计划。我们在当前会话中禁用IN-LIST-ITERATOR;2.IN-LIST-EXPANSION的案例。(5)给name 列创建一个索引。(7)使用UNION ALL 查询。(6)去掉HINT继续查看。--让之前的执行计划失效。原创 2024-01-31 10:09:00 · 321 阅读 · 0 评论 -
19.no_unnest 子查询不展开的优化案例
排序内存和逻辑读都有减少,时间缩短为原理的1/2;由此可见,对于子查询展开和不展开执行效率不同,Oracle有时候也会选错执行计划。但是我们可以通过HINT调整SQL的执行计划,让它走指定的执行计划,从而优化SQL;GGRISKCLASS 表优化前和前面的结果连接方式时NEST LOOP,优化后Hash Join.2.优化后SQL 加HINT;/*+NO_UNNEST*/,不做子查询展开。优化前:11s,优化后5s;原创 2024-01-30 11:13:09 · 408 阅读 · 0 评论 -
18.Oracle查询转换之-IN-LIST ITERATOR
1.什么是IN-LIST ITERATOR。3.INLIST ITERATRO注意点。2.带IN的SQL语句示例。原创 2024-01-29 15:50:48 · 503 阅读 · 0 评论 -
17.正在运行的数据库是否能开启执行计划自动捕获Doc ID 1520337.1
1.执行计划基线可以开启的理由。执行计划基线管理是可以开启的。开启后人工介入的机会增多。原创 2024-01-26 11:02:30 · 351 阅读 · 0 评论 -
16.绑定变量过多导致无法生成AWR快照的案例Doc ID 2226216.1
语句主要通过关联查询基表 x$kewrattrnew,x$kewrsqlidtab以及 v$sql_bind_capture,将结果插入到。到这里,我们可以确认 awr快照生成任务进程m00x发起 wrh$_sql_bind_metadata 表。x$kqlfbc 基表是绑定变量的内存缓存表,而当数据库里面语句使用了大量的绑定变量,SQL可以使用绑定变量,但是不要过度使用绑定变量。的插入语句执行超时,导致AWR快照生成失败。1.检查AWR快照,发现部分快照未生成。建议适量使用绑定变量。原创 2024-01-25 17:59:09 · 440 阅读 · 0 评论 -
15.查询转换之-表移除技术
SQL语句中出现该表,但由于SELECT语句没有使用该表的字段,执行计划中也没有。表移除的好处是,虽然是做多表关联,但是只取其中一个表里面的数据。通过表移除,减少访问表的次数,提升效率。表移除的直观的结果是,2.表移除的案例SQL。出现该表,未访问该表。原创 2024-01-25 15:24:25 · 346 阅读 · 0 评论 -
14.查询转换之--连接因式分解
连接因式分解技术,使得UNION ALL的SQL减少访问大表的次数,提供更优秀的执行计划。连接因式分解关键词:VIEW |VW_JF_SET;2.连接因式分解的SQL 样例。1.什么是连接因式分解。原创 2024-01-25 10:34:08 · 393 阅读 · 0 评论 -
13.查询转换之-星型转换技术
开启星型转换,能够先计算维度表的数据,得到较小的结果集,然后再和事实表。做通过主键访问,避免全表扫描事实表。2.星型转换的SQL样例。原创 2024-01-25 00:02:36 · 359 阅读 · 0 评论 -
12.查询转换-视图合并技术
如果不做视图合并最优:/*+no_merge(view_1)*/视图合并并不总是是最优的执行计划,要视图具体情况来看。如果视图合并最优:/*+merge(view_1)*/2.简单视图合并的例子。原创 2024-01-24 15:48:10 · 453 阅读 · 0 评论 -
11.enq: TX - row lock contention 模拟
gv$active_session_history 会话历史表中记录了发送等待的SESSION_ID,SQL_ID引起阻塞的SESSION_ID.但是没有记录引起阻塞的SQL的SQL_ID;如上语句能够直接找到出现行锁争用的SQLID,从而找到相关SQL语句。--3.查询引发锁的源头的会话ID;原创 2024-01-24 14:54:31 · 418 阅读 · 0 评论 -
10.Oracle一些参数设置的建议值
设置事件:10949,关闭直路劲读。1.一些参数设置的经验总结。原创 2024-01-24 10:45:00 · 443 阅读 · 0 评论 -
9.SQL性能优化之子查询展开
1.什么是子查询展开。原创 2024-01-24 10:34:52 · 485 阅读 · 0 评论 -
8.使用SQL优化顾问SAA进行SQL性能诊断
SQL优化顾问SAA,有时候可以给出正确的优化建议,但是有时候不能给出好的优化建议。6.查看使用优化建议前后的资源成本对比信息。1.SQL 平均运行事件24.17s。4.使用SAA 创建优化任务。2.5小时内运行12次;原创 2024-01-23 14:00:04 · 397 阅读 · 0 评论 -
7.等待事件:recovery area: computing obsolete files
闪回区归档文件使用过大,会出现等待事件:recovery area: computing obsolete files。1.等待事件:recovery area: computing obsolete files。要让这个等待事件消失,只能通过rman擅长过期的归档文件。3.闪回区使用率检查。平均每次等待10s;原创 2024-01-23 11:37:48 · 397 阅读 · 0 评论 -
6.使用SPM替换SQL的执行计划
(2)执行旧SQL和新SQL,让执行计划加载到计划基线中。(3)如果要删除固定的执行计划。(7)ACCEPTED字段说明。--(9)固定完执行计划检查。--(5)变更前执行计划。(10)再次查看执行计划。(1)启用执行计划基线。原创 2024-01-22 19:50:25 · 361 阅读 · 0 评论 -
5.SQLHC.sql脚本的用法
sqlhc_20240119_185004_2gs6gb92zcb51_2_diagnostics.html --表,索引的统计信息。sqlhc_20240119_185004_2gs6gb92zcb51_4_sql_detail.html --执行计划和SQL文本。sqlhc_20240119_185004_2gs6gb92zcb51_1_health_check.html表,索引的统计信息。11g有11g的脚本,19c有19c的脚本。收集完后,自动打包生成如下文件。--可以看到执行计划非常漂亮。原创 2024-01-21 14:53:25 · 602 阅读 · 0 评论 -
4.连接谓词推入(VIEW PUSHED PREDICATE)引发的SQL性能慢
0.5s执行计划,由此可见,视图外部和视图连接的表的基数不能太大,否则视图和外部的基表走嵌套循环连接的效率极低。那么遇到上述 连接谓词推进导致的问题,执行时间:4分13s,同时还有两个连接谓词推入的执行计划。且在这步和下部的执行计划消耗的CPU高。如上开启和关闭的方法,仅针对当前SQL或当前会话生效。我们可以尝试取消或启用连接谓词推入进行对比,选出更好的执行计划。发现执行计划中连接谓词推入。7.关闭连接谓词推入。原创 2024-01-21 14:34:33 · 422 阅读 · 0 评论 -
3.Oracle-HINT1
熟记常用Hint,对oracle优化很重要。1.oracle里面常用hint学习。原创 2023-12-03 20:15:27 · 363 阅读 · 0 评论 -
2.表统计信息,索引统计信息,列统计信息相关知识
无论是表的统计信息,索引的统计信息,列的统计信息都是非常重要的,是CBO生成执行计划时的重要依据。(3)16进制的数据通过Oracle的函数转为为10进制方便读取的方法。(2)修改聚簇因子的大小干预SQL走索引扫描还是全表扫描。(1)获取给定SQL_ID的SQL对应的绑定变量的值。这些经典的语句对于性能优化非常重要。(4)表的历史统计信息收集查看。原创 2023-08-26 17:39:30 · 308 阅读 · 0 评论 -
1.ANALYZE和DBMS_STATS包收集统计信息的对比
任何迁移后,或者导入数据后都必须及时收集统计信息,否则可能因为统计信息不准确导致CBO无法选择最优的执行计划,从而导致SQL性能差。收集统计信息建议使用DBMS_STATS包,有很多丰富的存储过程包可以收集各个维度的统计信息。6.ANALYZE 和 DBMS_STATS 包的区别。5.用DBMS_STATS包收集统计信息。4.使用ANALYZE收集统计信息。3.收集系统内部表的统计信息。2.什么是系统统计信息。原创 2023-08-26 17:30:21 · 127 阅读 · 0 评论