Ubuntu系统下Oracle数据库资源占用过高优化策略
PARALLEL_MAX_SERVERS设置为CPU核心数的1/2-1/3)。/etc/sysctl.conf):fs.file-max = 655360 # 增加系统最大文件句柄数
kernel.sem = 250 32000 100 128 # 调整信号量参数
net.core.somaxconn = 1024 # 增加TCP连接队列长度
修改后执行sysctl -p使配置生效。noatime减少访问时间更新,data=writeback提升写入性能)。示例挂载命令:mount -o noatime,data=writeback /dev/sdb1 /u01/app/oracle/oradata
systemctl disable <service_name>禁用服务。db_cache_size)占SGA的50%-70%(如SGA=2G,缓冲池设为1.2G);shared_pool_size)占SGA的20%-30%(如SGA=2G,共享池设为0.5G);pga_aggregate_target)设为SGA的1/3-1/2(如SGA=2G,PGA设为0.8G)。ALTER SYSTEM SET sga_target=2G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=800M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
启用自动内存管理(MEMORY_TARGET)可简化配置(如MEMORY_TARGET=3G)。PROCESSES=300、SESSIONS=335),避免过多连接导致内存耗尽。示例命令:ALTER SYSTEM SET PROCESSES=300 SCOPE=SPFILE;
ALTER SYSTEM SET SESSIONS=335 SCOPE=SPFILE;
使用连接池(如Tomcat JDBC连接池、Oracle UCP)复用连接,减少连接创建/销毁开销。EXPLAIN PLAN查看SQL执行计划,识别全表扫描、索引缺失等问题。示例:EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 30;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
重点关注TABLE ACCESS FULL(全表扫描),需添加索引优化。SELECT *,明确列出所需列(减少数据传输量);:dept_id代替硬编码值),减少硬解析(硬解析会消耗大量CPU和共享池内存);CREATE INDEX idx_emp_dept ON employees(department_id));ALTER INDEX idx_emp_dept REBUILD),提升索引效率;DBA_INDEXES视图查看使用频率);CREATE TABLE sales (sale_id NUMBER, sale_date DATE, amount NUMBER)
PARTITION BY RANGE (sale_date) (
PARTITION p2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
PARTITION p2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),
PARTITION p2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'))
);
查询时可只扫描相关分区(如SELECT * FROM sales WHERE sale_date BETWEEN '2024-01-01' AND '2024-12-31'),减少I/O。ALTER TABLE sales PARALLEL (DEGREE 4); -- 设置表并行度为4
SELECT /*+ PARALLEL(sales, 4) */ COUNT(*) FROM sales; -- 使用并行提示
注意:并行处理会增加CPU负载,需根据系统资源调整。@?/rdbms/admin/awrrpt.sql -- 生成AWR报告(HTML格式)
@?/rdbms/admin/addmrpt.sql -- 生成ADDM报告
重点关注“Top 5 Timed Events”部分,针对性解决。DBMS_STATS包收集表、索引的统计信息(如EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT')),帮助优化器生成更好的执行计划;DELETE FROM logs WHERE create_time < SYSDATE - 365),释放表空间。