CentOS环境下Oracle数据库性能优化技巧
调整CentOS内核参数以匹配Oracle的内存与I/O需求,关键参数包括:
kernel.shmmax(单个共享内存段最大值,建议设为物理内存的85%)、kernel.shmall(共享内存总页数,shmmax/4096取整);fs.file-max(系统最大文件数,建议≥6815744);fs.aio-max-nr(异步I/O请求数,建议≥1048576);net.ipv4.ip_local_port_range(客户端端口范围,建议设为9000-65500);vm.swappiness(交换空间使用倾向,建议设为10以减少磁盘交换)。sysctl -p使参数生效。noatime(不更新访问时间)、nodiratime(不更新目录访问时间)、data=writeback(减少日志开销)等选项,提升文件读写效率;systemctl stop firewalld)、SELinux(setenforce 0),减少系统资源消耗。SGA是Oracle共享内存区域,需根据业务类型(OLTP/OLAP)分配:
SHARED_POOL_RESERVED_SIZE(预留5%-10%给大SQL)避免碎片;ALTER SYSTEM SET SGA_TARGET=4G SCOPE=BOTH启用自动共享内存管理(ASMM),简化配置。PGA用于存储会话私有内存(如排序、哈希连接),建议:
PGA_AGGREGATE_TARGET),根据应用负载设置(如OLTP设为500M-1G,OLAP设为1G-2G);V$PGA_TARGET_ADVICE视图预测最佳值(选择命中率>90%的最小值);减少内存碎片,提升SGA访问效率:
内存大小(MB)/2MB(如8G内存需4096个);/etc/sysctl.conf:vm.nr_hugepages=4096;hugetlb组:usermod -aG hugetlb oracle,重启生效。lvcreate -i 4 -I 64 -L 100G -n data vg01),提升并行I/O能力;DISK_ASYNCH_IO=TRUE(默认开启),允许后台进程(如DBWn)异步写入,提升吞吐量;LOG_BUFFER=64M-128M(大事务场景),减少日志写入冲突。:emp_id替代硬编码值,减少硬解析(硬解析消耗大量CPU与Latch);WHERE子句过滤数据,避免全表扫描。WHERE、JOIN、ORDER BY子句中的高频列创建索引(如CREATE INDEX idx_emp_name ON employees(name));ALTER INDEX idx_emp_name REBUILD定期重建,提升索引效率;V$OBJECT_USAGE视图监控索引使用情况,删除未使用或重复的索引,减少维护开销。将大表分成多个分区(如按时间、范围、哈希),提升查询与维护效率:
CREATE TABLE sales (id NUMBER, sale_date DATE) PARTITION BY RANGE (sale_date) (...);TEMPORARY TABLESPACE(如CREATE USER scott IDENTIFIED BY tiger TEMPORARY TABLESPACE temp);ALTER TABLESPACE temp_group ADD TEMPFILE '/u01/oradata/temp01.dbf' SIZE 1G)。定期生成AWR(自动工作负载仓库)报告(SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(...))),分析性能瓶颈(如CPU、I/O、SQL);使用ADDM(自动数据库诊断监视器)获取优化建议。
DBMS_STATS.GATHER_SCHEMA_STATS收集表、索引的统计信息,确保优化器生成最佳执行计划;ALTER TABLE table_name COALESCE)、索引碎片(ALTER INDEX index_name REBUILD);