Debian上Oracle如何进行性能调优
导读:Debian上Oracle性能调优实战指南 一 操作系统与内核调优 共享内存与信号量:在**/etc/sysctl.conf**中设置共享内存与信号量,示例值(请按内存与实例规模调整): kernel.shmall = 2097152...
Debian上Oracle性能调优实战指南
一 操作系统与内核调优
- 共享内存与信号量:在**/etc/sysctl.conf**中设置共享内存与信号量,示例值(请按内存与实例规模调整):
- kernel.shmall = 2097152
- kernel.shmmax = 2147483648
- kernel.shmmni = 4096
- kernel.sem = 250 32000 100 128
- fs.file-max = 65536
- net.ipv4.ip_local_port_range = 1024 65000
- 使配置生效:执行sysctl -p。这些参数确保Oracle对共享内存、进程/文件句柄的需求得到满足。
- 资源限制:在**/etc/security/limits.conf**为oracle用户放宽限制:
- oracle soft nproc 16384
- oracle hard nproc 16384
- oracle soft nofile 65536
- oracle hard nofile 65536 并在oracle用户的**~/.bash_profile或~/.bashrc**中设置环境变量(示例):
- export ORACLE_BASE=/u01
- export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
- export PATH=$ORACLE_HOME/bin:$PATH
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
- I/O 调度器:针对数据库负载,优先使用deadline或none(在具备智能RAID/控制器时none表现良好)。查看与设置方式:
- 查看:cat /sys/block/sdX/queue/scheduler
- 临时设置:echo deadline > /sys/block/sdX/queue/scheduler
- 启动项设置:在GRUB_CMDLINE_LINUX加入elevator=deadline后更新grub并重启。
- 基础监控:部署并使用top、vmstat、iostat持续观察CPU、内存、I/O,作为调优前后对比依据。
二 数据库内存与实例参数
- 内存目标:优先启用自动内存管理(AMM),设置MEMORY_TARGET与MEMORY_MAX_TARGET;或分别调节SGA_TARGET与PGA_AGGREGATE_TARGET。示例(需重启或按策略联机调整):
- ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
- ALTER SYSTEM SET MEMORY_MAX_TARGET=8G SCOPE=SPFILE;
- 或:ALTER SYSTEM SET SGA_TARGET=4G SCOPE=SPFILE;
- 或:ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=BOTH;
- 共享池与保留区:在负载较高、共享池抖动时可适度增大SHARED_POOL_SIZE,并设置SHARED_POOL_RESERVED_SIZE用于保留常用对象,减少反复解析。
- 诊断与基线:定期生成AWR/ADDM报告定位瓶颈与验证调优成效:
- @?/rdbms/admin/awrrpt.sql
- @?/rdbms/admin/addmrpt.sql
- 典型等待与参数联动:当出现大量db file scattered read(常伴随全表扫描/快速索引扫描)时,结合工作负载评估DB_FILE_MULTIBLOCK_READ_COUNT,使其与存储单次最大I/O能力匹配(如 DB_BLOCK_SIZE × DB_FILE_MULTIBLOCK_READ_COUNT ≈ 存储max I/O size),避免过大导致错误成本选择;同时甄别SQL是否真的需要全表扫描。
三 SQL与索引优化
- 执行计划与统计信息:使用EXPLAIN PLAN或DBMS_XPLAN查看计划,配合AUTOTRACE验证;定期收集统计信息保证CBO选择合理计划:
- EXPLAIN PLAN FOR ; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
- SET AUTOTRACE ON EXPLAIN;
- EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=> USER, tabname=> ‘SALES’);
- 索引策略:为高频过滤/连接列建立必要索引,使用覆盖索引减少回表,定期清理无用/低效索引;当碎片明显或结构变更后可重建索引回收空间与提升扫描效率。
- SQL编写要点:避免*SELECT ,使用绑定变量降低解析开销;必要时使用提示(如/* INDEX(…) /、/ PARALLEL(…) */)引导计划,但应谨慎评估并与基线对比。
- 并行处理:在大表扫描/聚合/报表场景按表或会话设置并行度,加速吞吐;OLTP短事务慎用并行,避免资源争用。
四 存储与I/O优化
- 存储硬件:优先使用SSD/NVMe与具备缓存与条带的RAID控制器,降低I/O时延并提高吞吐;确保重做日志与数据文件物理分离,避免日志写入与数据读写相互干扰。
- 文件布局与条带化:按业务将热点对象分散到不同磁盘/阵列,利用条带化实现负载均衡;通过视图识别热点文件与对象,必要时迁移数据文件或调整索引/分区策略。
- I/O调度与参数联动:如前述,数据库磁盘优先deadline/none;结合DB_FILE_MULTIBLOCK_READ_COUNT与存储最大I/O能力进行匹配,减少全表扫描与多块读的成本偏差。
五 连接与会话及监控
- 监听器高负载:编辑**$ORACLE_HOME/network/admin/listener.ora**,在LISTENER段下按需提升并发能力(示例):
- MAX_CONNECTIONS_PER_LISTENER = 4096
- LISTENER_CONCURRENT_SESSIONS = 4096
- LISTENER_LOG_LEVEL = 16
- 变更后执行:lsnrctl stop → lsnrctl start;同时结合数据库参数(如processes、sessions、open_cursors)评估是否需要同步上调,并在低峰期变更、准备回滚方案。
- 连接与会话监控:利用v$session、v$process等视图观察活跃会话、等待事件与资源占用,配合AWR/ADDM与操作系统监控形成闭环优化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian上Oracle如何进行性能调优
本文地址: https://pptw.com/jishu/762768.html
