[ linux-008 ] Oracle查询慢优化(2)

223 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情

接上一章节,关于oracle页面查询慢的相关优化措施

方法07

sort_area_size设置

oracle不建议设置sort_area_size参数。除非实例被配置成了共享服务器模式。默认值已经足够满足大多数OLTP系统。如果是OLAP、批任务、创建大的索引,可能需要作出相应的调整。

oracle建议通过设置pga_aggregate_size后自动配置sql工作区的大小

设置sort_area_size的时候不是65536了,这次设置成1M,也就是1048576

show parameter sort_area_size; (65536)

alter system set sort_area_size=65535000 scope=spfile;

alter system set workarea_size_policy=MANUAL scope=spfile;

查看系统在某个时刻这些参数到底被自动地调整到了什么值

select x.ksppinm name,y.ksppstvl value,x.ksppdesc describ 

 from sys.x$ksppi x,sys.x$ksppcv y 

 where x.inst_id=userenv('Instance') and y.inst_id=userenv('Instance') and x.indx=y.indx and x.ksppinm like '%pool_size%';

方法08

调整重做日志大小

方法09

白名单配置(oracle白名单,只允许置注定客户端)

方法10

内存设置MEMORY_TARGET,调整SGA+PGA

Oracle官方文档推荐:

MEMORY_TARGET=物理内存 x 80%

MEMORY_MAX_SIZE=物理内存 x 80%

后两步是禁用SGAPGA的自动管理. 让ORACLE对内存实行自动调节. 还可以设置MEMORY_MAX_TARGET参数限制Oracle可自动分配的最大

alter system set memory_target = 128G scope=spfile;

alter system set memory_max_target=128G scope=spfile;

alter system set sga_target = 0 scope=spfile;

alter system set pga_aggregate_target = 0 scope=spfile;

show parameter target;

默认无memory_target和memroy_max_target参数

报错处理

ORA-00845: MEMORY_TARGET not supported on this system

MEMORY_TARGET 不能大于tmpfs

tmpfs是一种虚拟内存文件系统,而不是块设备。是基于内存的文件系统

Swap是通过硬盘虚拟出来的内存空间

根据df  -h可以看到系统tmpfs

vi /etc/fstab tmpfs /dev/shm tmpfs defaults,size=128G 0 0

mount -o remount,size=4G /dev/shm

umount /dev/shm mount /dev/shm

总结

以上是提升oracle查询性能的另外几个办法,需要注意的是有的可能无法显著提高查询效率,但仍是我们需要了解的一种优化手段。对某个查询优化零点几秒,在大规模的应用场景中,能提升的查询性能可能会指数级增长,所以我们依然秉承一种观点,优化是无止境的,优化的方式也是多种多样的,不能只靠单一的方法,选择合适的方法,不断迭代升级系统的性能,这就是我们程序员需要做的