影响数据库性能与稳定性的几个重要参数 --待补充

作者介绍:老虎刘,原oracle 研发部门 Real-World Performance TEAM 成员,现在售后部门SSC专职做数据库性能优化,主要为银行、通信、证券、制造等大型企业提供服务。

今天谈谈下面这几个参数对数据库性能和稳定性的影响:

cursor_sharing:游标共享

_optim_peek_user_binds:绑定变量窥视

_optimizer_adaptive_cursor_sharing:自适应游标共享(简称ACS),一般还包括另外两个_optimizer_extended_cursor_sharing和_optimizer_extended_cursor_sharing_rel 参数)

_optim_peek_user_binds和ACS:

在10g,因为没有ACS,一般建议客户关闭绑定变量窥视功能的情况多一些。

在11g,很多客户还是将绑定变量窥视和ACS都关闭了,原因有的是数据库从1g升级而来,升级后没有改,还有就是因为ACS早期版本有一些bug。其实这是两个很好的参数,可以在代码写的不是太好的情况下,也能获得比较好的性能。虽然ACS可能还有一些小bug没有解决(有的bug是在很特殊的情况下才会触发),到了11204版本应该都不是大问题了。老虎刘建议还是都开启比较好。

最重要的参数还在下面,如果做到了下面这两点,上面两个参数就显得不是那么重要了:

首先,cursor_sharing这个参数对系统性能和稳定性都非常重要,可惜经常被忽略,建议使用该参数的默认值:

    即 cursor_sharing=EXACT  (而不是FORCE或similar)

    这要求应该使用绑定变量的地方,必须使用绑定变量。这个对于OLTP系统来说是铁律,不容置疑,cursor_sharing=FORCE通常就是为了解决该使用绑定变量而没有使用绑定变量的情况。前年在网上看到一个广为流传的某水果公司的AWR报告,居然设置 cursor_sharing= FORCE ,令人感叹啊。

其次,还有一个重要的补充条件:

不该使用绑定变量的地方,不用绑定变量:对那些唯一值较少的字段,特别是数据分布不均的情况,不建议使用绑定变量。如type、status等字段,我们建议使用常量:where type=1 and status=2。

这种情况如果使用了绑定变量,就是绑定变量窥视和ACS发挥作用的时候。

如果cursor_sharing=FORCE;或者cursor_sharing=EXACT,但是在数据分布不均的字段上也使用了绑定变量(两者基本上是等同的,虽然后一种略好于前一种情况),那么就要考虑“绑定变量窥视”和“自适应游标”两个参数的影响了。

看下面几种情况:

1、关闭“绑定变量窥视”(默认是开启):

ACS同时失效,这时系统的稳定性好(不会因为绑定变量的不同,发生执行计划改变),但是整体性能会下降:因为不能窥视绑定变量,只能按照字段是数据分布均匀的情况来计算,在能否使用索引,返回行源的估值上,都会出现较大的偏差,有时可能会配合使用hint来提高SQL性能。

2、如果开启了“绑定变量窥视”而不开启ACS(默认是开启):

那么系统就会极不稳定:比如硬解析窥视到一个绑定变量适合全表扫描的执行计划,不管接下来的绑定变量是否能使用索引,都会一直全表扫描下去,直到下次硬解析时再次窥视绑定变量才可能重新生成新的执行计划。

3、如果开启“绑定变量窥视”,同时开启ACS:

这种情况在解决了一部分稳定性的同时,兼顾了性能。也是11g新增的ACS比10g没有ACS进步的地方:执行计划不再从一而终,而是会根据绑定变量的不同,不是很及时的做出调整:比如第一次窥视到的绑定变量适合全表扫描,那么第二次即使使用的绑定变量适合走索引,也还是会使用全表扫描的执行计划,下一次再次执行就会纠正为使用索引的执行计划(具体请参考ACS的实现原理)。

绑定变量窥视和ACS这两个参数是与直方图信息紧密联系在一起的,关闭直方图收集,也就相当于关闭了绑定变量窥视和ACS,即使开启了这两个参数。

直方图能较为准确的反映数据分布不均字段的数据分布情况,一般使用默认选项(auto),某些特殊情况可以补充或去掉某些字段的直方图信息。一些客户在数据库级关闭收集直方图的做法是不建议的。

总结:

最佳实践:

cursor_sharing=EXACT + 合理使用绑定变量(合理就是:类似ID、account_no等唯一值等于或接近表行数的字段,必须使用绑定变量;而type、status等唯一值少且数分别不均的字段,不使用绑定变量)。

绑定变量窥视和ACS保持默认开启状态。

特殊情况:

1、字段唯一值有一定的数量(介于少与多之间),比如1000个,如果数据分布均匀,则可以使用绑定变量。如果字段分布不均,则把占比多的几个值,使用常量,其他值使用绑定变量。

2、字段唯一值少,还有经常互相转变的情况,比如常见的工单处理表:没有处理的状态是0,处理后的状态是1,夜间统计信息收集后,由于字段值的不稳定,统计信息经常不能反映表的实时数据分布情况,这种情况谈是否使用绑定变量已没有意义,涉及这类表的SQL,可以关闭字段上的直方图收集,再配合rownum和hint 来提高SQL效率和稳定性,必要时还可以使用dynamic_sampling(动态采样)来辅助优化器做出正确的执行计划。

最差组合:

cursor_sharing=FORCE

_optim_peek_user_binds=TRUE(开启绑定变量窥视)

_optimizer_adaptive_cursor_sharing=FALSE(关闭ACS,还有其他两个参数也要一起设置)

执行计划不稳定的同时还会带来低性能。

以上言论仅代表个人,如与oracle公司文档冲突,以oraclce公司文档为准。如有不当之处敬请指正,提前感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22.04 源码安装 PCL13+VTK-9.3+Qt6,踩坑记录

Ubuntu 22.04LTS;cmake-3.25.0;VTK-9.3;PCL-1.13;Qt6.6 PCL可以通过 apt 命令直接安装(sudo apt install libpcl-dev),apt 命令安装的 VTK 是简略版,没有对 Qt 支持的包,所以笔者使用源码安装 PCL 和 VTK。 1. 安装 VTK 1) 安装 ccmake 和 VTK 依赖项: sudo apt-g…

查询并保存大批量数据怎么办?——分页查询、批量插入、多线程和数据分片共同应用以提效

大家开发中会遇到这样一种场景,从某个数据库中查出大量的数据,对这些数据进行某种处理后,存储到另一个数据库中。如果只是简简单单的“流水账”代码,就会耗时很久。这时候就需要采用一些方法来提升效率。 处理大量数据时&#xf…

向openHarmony设备添加perf文件

1. 下载Linux内核源码 先执行apt-cache search命令查询可用的Linux源码包,然后执行apt install命令安装对应的源码包。 sudo apt-cache search linux-source sudo apt install linux-source-xxx 2. 下载交叉编译工具 sudo apt install gcc-arm-linux-gnueabi su…

分库分表之后如何设计主键ID(分布式ID)?

文章目录 1、数据库的自增序列步长方案2、分表键结合自增序列3、UUID4、雪花算法5、redis的incr方案总结 在进行数据库的分库分表操作后,必然要面临的一个问题就是主键id如何生成,一定是需要一个全局的id来支持,所以分库分表之后,…

光纤SAN交换机ZONE的概念

Zone是FC-SAN交换机上的一种独有的逻辑配置,通过配置特定的设备加入zone,从而允许设备之间互相通信。当交换机上配置了zone时,同在一个zone里的设备之间可以互相通信,没有加入任何zone的设备不能与其他设备通信。 早期交换机厂商根…

Stylized Modular Character (Female)(程式化的模块化角色(女性)“运动型”)

一套程式化的角色模块化部件。 在这样的插槽中定制: 头 躯干 手 裤子 靴子 头发 每个插槽都有 2 到 5 个在 URP 中工作的 PBR 材料的选项。 该项目基于官方 Unity Standard Assets 包中的 Ethan 默认角色。 不包含动画。 皮肤网格的 SSS 是由自发光贴图伪造的。 如果…

c++笔记容器和迭代器

C中的迭代器是一个功能强大的工具,用于遍历和操作容器中的元素。深入理解迭代器的类型、特性和用法,以及如何与各类容器配合使用,是编写高效、健壮C代码的关键。下面将深入探讨迭代器的概念、与容器的配合使用、以及注意事项。 迭代器类型 …

怎样查看自己的Windows电脑最近弄了哪些内容

一、需求说明 有时候我们的电脑别人需要使用,你不给他使用又不行,且你也不在电脑身边,你只能告诉他自己的电脑密码让他操作,此时你并不不知道他操作了哪些内容。 还有一个种情况是自己不在电脑旁边,且电脑没有锁屏&…

SQL游标的应用场景及使用方法

SQL游标的应用场景及使用方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨SQL中游标的应用场景及使用方法。游标在SQL中是一种重要的数据…

Pytest集成Allure生成测试报告

# 运行并输出报告在Report文件夹下 查看生成的allure报告 1. 生成allure报告:pycharm terminal中输入命令:产生报告文件夹 pytest -s --alluredir../report 2. pycharm terminal中输入命令:查看生成的allure报告 allure serve ../report …

傻瓜交换机多网段互通组网、设备无法配置网关案例

记录一下: 一、傻瓜交换机多网段互通组网 1、客户在核心交换机上创建了VLAN10,VLAN20。 VLAN10:IP192.168.10.254 VLAN20:IP192.168.20.254 在核心交换机下挂了一台傻瓜交换机,傻瓜交换机接入了一台OA服务器IP&#…

Python基础之IO流和序列化讲解

文章目录 1 IO流1.1 简介1.1.1 定义1.1.2 同步&异步IO 1.2 输入输出1.2.1 输出格式美化1.2.2 str.format()1.2.3 旧式字符串格式化1.2.4 读取键盘输入 1.3 文件操作1.3.1 读和写文件1.3.1.1 open()1.3.1.2 读取其他文件1.3.1.2.1 二进制文件1.3.1.2.2 字符编码 1.3.2 文件对…

【linux/shell实战案例】在shell中插入Python代码及EOF解析

目录 一.什么情况需要在shell中插入Python代码 二.如何在shell中插入Python代码 三.什么是内联输入重定向&#xff1f; 四.什么是EOF 五.为什么要用EOF 六.<<EOF和<<-EOF的区别 七.案例代码 一.什么情况需要在shell中插入Python代码 shell不好处理的数据或…

前端requestAnimationFrame动画

题目:我们来实现一个最简单的需求,将一个元素从屏幕左边均匀地移动到屏幕右边。 一、CSS实现 用 css 实现是最合理也是最高效的,示例代码如下。 @keyframes move_animation1 {0% { left: 0px; }100% { left: calc(100% - 60px); } } @keyframes move_animation {0% { tra…

压缩pdf在线工具,压缩pdf大小的软件

如何有效地压缩PDF文件大小却是个问题&#xff0c;为了获得最佳的压缩效果&#xff0c;我们必须依赖专业的压缩工具&#xff0c;采用错误的方法可能会对文件内容产生负面影响&#xff0c;甚至导致文件无法打开&#xff0c;今天&#xff0c;我将分享一些独特的压缩技巧&#xff…

【leetcode——有效的括号】

最近换实习很久不刷leetcode。。真的有点手生了&#xff0c;还是要坚持刷阿&#xff01; 有效的括号这道题就是实现了一个相互匹配&#xff0c;那么基本上就是用字典&#xff0c;那么如何灵活的用字典&#xff0c;可以使用括号对应数字取加和判断&#xff0c;也可以就单独压入…

如何在Spring Boot中实现OAuth2认证

如何在Spring Boot中实现OAuth2认证 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何在Spring Boot应用中实现OAuth2认证&#x…

HP UX服务器监控指标解读(SSH)

在当今复杂多变的IT环境中&#xff0c;服务器的性能和稳定性是企业运营的关键。HP UX作为一款高性能的Unix服务器操作系统&#xff0c;其监控管理显得尤为重要。监控易作为一款功能强大的监控软件&#xff0c;为HP UX服务器提供了全面的监控解决方案。本文将针对监控易中HP UX服…

在编译 PHP 8.3.8 时遇到 configure: error: Package requirements (libxml-2.0 >= 2.9.0)

configure: error: Package requirements (libxml-2.0 > 2.9.0) were not met: 在编译 PHP 8.3.8 时遇到 configure: error: Package requirements (libxml-2.0 > 2.9.0) were not met 错误时&#xff0c;可能是因为 pkg-config 无法找到 libxml2 的开发文件或路径。以下…

小程序接口报错ERR_CERT_COMMON_NAME_INVALID

收到 ERR_CERT_COMMON_NAME_INVALID 错误&#xff0c;可能是因为使用了不受信任的证书或自签名证书。以下是一些可能的解决方法&#xff1a; 1. 检查域名配置&#xff1a; • 确保 manifest.json 中的合法域名配置正确。 • 确认微信小程序后台也添加了对应的域名。 2. 使用…