Oracle在CentOS上的性能调优技巧
调整内核参数以提升系统对Oracle的支持,关键参数包括:
fs.file-max=6815744(增大系统最大文件句柄数,应对高并发IO)、vm.swappiness=10(降低内存换出到交换空间的倾向,保留更多内存给Oracle)、kernel.shmmax(设为物理内存的85%,如$(free|grep Mem|awk '{print int($2*1024*0.85)}'),控制单个共享内存段的最大大小)、kernel.shmall(设为shmmax/4096,如$(free|grep Mem|awk '{print int(($2*1024*0.85)/4096)}'),控制共享内存总页数);net.core.somaxconn=4096(增大TCP连接队列长度,避免连接超时)、net.ipv4.ip_local_port_range=9000 65500(扩大本地端口范围,支持更多并发连接)、kernel.sem=250 32000 100 128(调整信号量参数,提升进程间通信效率)。sysctl -p使参数生效。noatime,nodiratime选项(避免每次访问文件更新访问时间,减少IO开销);systemctl stop firewalld)、SELinux(setenforce 0,若无需安全增强),减少系统资源消耗。$ORACLE_HOME/bin/sysresv -h或vm.nr_hugepages = 物理内存×0.8/2MB(如128GB物理内存设为32768);/etc/security/limits.conf,添加* soft memlock 104857600(软限制)、* hard memlock 104857600(硬限制,单位KB,需大于SGA大小);memory_target、memory_max_target参数,通过pfile创建spfile;SELECT * FROM v$huge_pages_status;确认HugePages使用率接近100%。ALTER SYSTEM SET sga_target=4G SCOPE=BOTH;(动态调整SGA目标大小)、ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=BOTH;(动态调整PGA总大小)。/u01/oradata放数据文件、/u02/oradata放redo logs),减少IO争用。parallel_max_servers(并行服务器进程数)、parallel_min_servers(最小并行进程数),针对大查询启用并行处理(如ALTER TABLE sales PARALLEL (DEGREE 4);),提升查询速度。ALTER SYSTEM SET shared_pool_size=1G SCOPE=BOTH;(共享池,缓存SQL/PLSQL代码)、ALTER SYSTEM SET db_cache_size=2G SCOPE=BOTH;(缓冲区缓存,缓存数据块)、ALTER SYSTEM SET large_pool_size=512M SCOPE=BOTH;(大池,支持并行查询、RMAN备份);pga_aggregate_target,避免PGA内存不足导致磁盘排序(可通过V$PGA_MEMORY_USAGE视图监控PGA使用情况)。processes(最大进程数)、sessions(最大会话数),公式为sessions = processes × 1.1 + 5(预留10%缓冲)。例如,ALTER SYSTEM SET processes=200 SCOPE=SPFILE;、ALTER SYSTEM SET sessions=220 SCOPE=SPFILE;,修改后重启数据库生效。CREATE INDEX idx_employee_name ON employees(name);),使用WHERE子句过滤数据(如SELECT * FROM employees WHERE department_id=10;);SELECT *(明确列出所需列,减少IO)、使用绑定变量(如SELECT * FROM employees WHERE department_id=:dept_id;,减少硬解析)、避免子查询(改用JOIN替代,提升查询效率);EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id=30;查看查询计划,识别全表扫描、索引未使用等问题。ALTER INDEX idx_name REBUILD;(如索引碎片率超过30%),提升索引访问效率;V$OBJECT_USAGE视图监控索引使用情况,删除未使用或重复的索引(如DROP INDEX idx_unused_column;),减少索引维护开销。EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME');(如用户schema),更新表、索引的统计信息(如行数、块数、分布),确保优化器生成最佳执行计划。PARTITION BY RANGE(sale_date)),定期删除旧分区(如ALTER TABLE sales DROP PARTITION p2020;)、添加新分区(如ALTER TABLE sales ADD PARTITION p2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'));),减少全表扫描范围。@?/rdbms/admin/awrrpt.sql生成AWR报告(分析一段时间内的性能变化)、@?/rdbms/admin/addmrpt.sql生成ADDM报告(提供优化建议),定位性能瓶颈(如CPU瓶颈、IO瓶颈);