Oracle Database在CentOS下的性能调优技巧
调整CentOS内核参数以匹配Oracle数据库的资源需求,关键参数包括:
kernel.shmmax(单进程最大共享内存,建议设为物理内存的85%)、kernel.shmall(共享内存总页数,shmmax/4096取整)、kernel.shmmni(共享内存段最大数量,默认4096,无需修改);kernel.sem(信号量集合,格式为SEMMSL(每集合信号量数,250)、SEMMNS(总信号量数,32000)、SEMOPM(每进程操作数,100)、SEMMNI(信号量集合数,128));fs.file-max(系统最大文件描述符,建议65536以上)、oracle soft nofile/oracle hard nofile(Oracle用户软/硬限制,分别设为1024/65536);net.ipv4.ip_local_port_range(客户端端口范围,9000-65500)、net.core.rmem_default/net.core.wmem_default(读/写缓冲区默认大小,262144)、net.core.rmem_max/net.core.wmem_max(读/写缓冲区最大值,4194304/1048576);fs.aio-max-nr(异步I/O请求数,1048576)。sysctl -p使参数生效。禁用防火墙(systemctl stop firewalld && systemctl disable firewalld)和SELinux(setenforce 0并修改/etc/selinux/config中SELINUX=disabled),减少系统资源消耗。
SGA是Oracle共享内存区域,需根据服务器内存大小合理分配:
ALTER SYSTEM SET sga_target=12G SCOPE=BOTH;ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=BOTH;MEMORY_TARGET),简化内存分配(如ALTER SYSTEM SET memory_target=14G SCOPE=BOTH)。减少内存页表项数量,提升内存访问效率:
内存大小(MB)× 0.8 × 0.8 / 2(如16GB内存设为5120);/etc/sysctl.conf:vm.nr_hugepages=5120,执行sysctl -p生效;/etc/security/limits.conf中添加oracle hard memlock 8G(根据HugePages大小调整)。根据应用负载调整最大连接数,避免过多连接导致资源竞争:
ALTER SYSTEM SET processes=200 SCOPE=SPFILE(进程数);ALTER SYSTEM SET sessions=220 SCOPE=SPFILE(会话数,通常比processes多20%);调整日志缓冲区大小,提升事务提交性能:
ALTER SYSTEM SET log_buffer=64M SCOPE=BOTH(默认1MB,适用于高并发事务场景)。db_file_multiblock_read_count:控制全表扫描时每次I/O读取的块数,建议设为DB_BLOCK_SIZE×8(如8KB块大小设为64);disk_asynch_io:启用异步I/O(ALTER SYSTEM SET disk_asynch_io=true SCOPE=BOTH),提升写进程(DBWn)效率;log_archive_max_processes:归档模式下增加ARCH进程数(如ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH),提升归档速度。SELECT * FROM employees WHERE department_id=:dept_id,减少硬解析(降低CPU开销);EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id=10),识别全表扫描、索引缺失等问题。CREATE INDEX idx_emp_dept ON employees(department_id));ALTER INDEX idx_emp_dept REBUILD),提升索引访问效率;DBA_INDEXES视图查看未使用的索引(SELECT * FROM dba_indexes WHERE used='NO'),删除冗余索引。CREATE TABLE sales (sale_id NUMBER, sale_date DATE) PARTITION BY RANGE (sale_date) (...)),提升查询性能(仅扫描相关分区);CREATE INDEX idx_sales_date ON sales(sale_date) LOCAL),减少索引维护开销。@?/rdbms/admin/awrrpt.sql),分析top SQL、等待事件等;@?/rdbms/admin/addmrpt.sql),针对性解决性能瓶颈。DBMS_STATS包收集表、索引的统计信息(EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME')),帮助优化器生成最佳执行计划;ALTER TABLE table_name COALESCE)、回收未使用空间(ALTER TABLE table_name DEALLOCATE UNUSED)。