一起养成写作习惯!这是我参与「掘金日新计划 · 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%
后两步是禁用SGA和PGA的自动管理. 让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查询性能的另外几个办法,需要注意的是有的可能无法显著提高查询效率,但仍是我们需要了解的一种优化手段。对某个查询优化零点几秒,在大规模的应用场景中,能提升的查询性能可能会指数级增长,所以我们依然秉承一种观点,优化是无止境的,优化的方式也是多种多样的,不能只靠单一的方法,选择合适的方法,不断迭代升级系统的性能,这就是我们程序员需要做的