拓扑园

  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队-Oracle脚本合集(文章)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL相关
  • Linux
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
Oracle数据库恢复专家团队:TEL:18562510581(微信同号);QQ:284833194;QQ群:496333360
天高任鸟飞
  1. 首页
  2. Oracle基础知识
  3. Oracle核心经典分析
  4. 正文

Oracle execute to parse,关于Execute to Parse %:比例太低的优化思路

2023年2月20日 280点热度 0人点赞 0条评论

目录

  • 参照:
  • 1、查看问题
  • 2、解析Execute to Parse %
  • 3、关于session_cached_cursors参数的调整:
    • (1)open_cursors:
    • (2)session_cached_cursors:
  • 4、通过下面语句查看验证了session_cached_cursors的使用率,如果100%设置200%,说明不够用,需要增大。
  • 5、再次验证session_cached_cursors是否合理:
    • (1)获取session cursor cache hits 的值
    • (2)获取parse count (total)   的值
    • (3)通过下面的语句来判断open_cursors的大小是否合理,

参照:

https://blog.csdn.net/Ruishine/article/details/118729526
https://blog.csdn.net/zuixinnet/article/details/9066609
https://blog.csdn.net/notbaron/article/details/78408372
https://blog.csdn.net/weixin_36053926/article/details/113327767

1、查看问题

AWR报告中Execute to Parse %:比例太低,如下所示:只有39.37%

Instance Efficiency Percentages (Target 100%)

2、解析Execute to Parse %

表示SQL语句解析后被重复执行命中率 计算公式=100*(1-Parses/Executions)

如果该值偏小,说明分析(硬解析与软解析)的比例较大,快速解析(即软软解析)较少。

Execute to parse %,该参数主要体现的是sql的执行次数与解析次数的比率。

可以把 Execute to Parse %和Soft Parse %这两个参数放在一起看。

①如果两个参数同时很低时,说明硬解析次数多,建议使用绑定变量。
②如果Soft Parse%高,而Execute to Parse %比低时(<40%),说明执行解析比率低,可以通过静态sql、动态绑定、调整session_cached_cursor参数、调整open_cursor等方法来减少软解析。

3、关于session_cached_cursors参数的调整:

(1)open_cursors:

该参数含义是同一个session同时打开最多在使用的游标数。在Oracle10.2.0.1.0版本中默认为300。

(2)session_cached_cursors:

就是说的是一个session可以缓存多少个cursor,让后续相同的SQL语句不再打开游标,从而避免软解析的过程来提高性能。

(绑定变量是解决硬解析的问题),软解析同硬解析一样,同样消耗资源.所以这个参数非常重要。在Oracle10.2.0.1.0版本中默认为20。

现在需要改大这个参数,以便于进行更多的软解析,这样可以省去open一个新的session cursor和close一个现有session cursor所需要消耗的资源和时间。

session_cached_cursor :表示一个会话中可以缓存多少个cursor。让后续相同的sql语句不在打开游标,从而避免软解析来提高性能(软解析与硬解析同样消耗资源)。

session cursor cache :用来存储关闭了的cursor。当一个cursor关闭之后,oracle会检查这个cursor的request次数是否超过3次,如果超过了三次,就会放入session cursor cache,这样在下次parse的时候,就可以从session cursor cache中找到这个statement, session cursor cache的管理也是使用LRU。

session_cached_cursors这个参数是控制session cursor cache的大小的。session_cached_cursors定义了session cursor cache中存储的cursor的个数。这个值越大,则会消耗的内存越多

 

4、通过下面语句查看验证了session_cached_cursors的使用率,如果100%设置200%,说明不够用,需要增大。

SELECT 'session_cached_cursors' PARAMETER,
LPAD(VALUE, 5) VALUE,
DECODE(VALUE, 0, ' n/a', TO_CHAR(100 * USED / VALUE, '990') || '%')
USAGE
FROM (SELECT MAX(S.VALUE) USED
FROM V$STATNAME N, V$SESSTAT S
WHERE N.NAME = 'session cursor cache count'
AND S.STATISTIC# = N.STATISTIC#),
(SELECT VALUE FROM V$PARAMETER WHERE NAME =
'session_cached_cursors')
UNION ALL
SELECT 'open_cursors',
LPAD(VALUE, 5),
TO_CHAR(100 * USED / VALUE, '990') || '%'
FROM (SELECT MAX(SUM(S.VALUE)) USED
FROM V$STATNAME N, V$SESSTAT S
WHERE N.NAME IN
('opened cursors current', 'session cursor cache count')
AND S.STATISTIC# = N.STATISTIC#
GROUP BY S.SID),
(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors');

5、再次验证session_cached_cursors是否合理:

session_cached_cursors的值也不是越大越好,我们可以通过下面两条语句进一步验证该参数是否合理:

(1)获取session cursor cache hits 的值

SQL> SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%cursor%';

(2)获取parse count (total)   的值

SQL> SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%parse%';

Sessioncursor cache hits就是系统在高速缓存区中找到相应cursors的次数,parse count(total)就是总的解析次数,二者比值越高,性能越好。

如果比例比较低,并且有较多剩余内存的话,可以考虑加大该参数。

(3)通过下面的语句来判断open_cursors的大小是否合理,

SQL>SELECT MAX(A.VALUE) AS HIGHEST_OPEN_CUR, P.VALUE AS MAX_OPEN_CUR FROM V$SESSTAT A, V$STATNAME B, V$PARAMETER P WHERE A.STATISTIC# = B.STATISTIC#  AND B.NAME = 'opened cursors current'  AND P.NAME = 'open_cursors'  GROUP BY P.VALUE;

综上所述可以确定需要加大参数session_cached_cursors来提高oracle数据库的性能,但是参数session_cached_cursors并不是越大越好,太大会引起pga缓存碎片,消耗内存,然后session cursor cache的管理也是使用LRU。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年11月18日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号