通过memory_target和memory_max_target参数让Oracle自动分配SGA与PGA内存,简化配置流程。例如:
ALTER SYSTEM SET memory_target=16G SCOPE=SPFILE;
ALTER SYSTEM SET memory_max_target=32G SCOPE=SPFILE;
修改后需重启数据库生效。
若需更精细控制,可单独调整SGA和PGA组件:
sga_target(总SGA大小)和各子组件(如db_cache_size缓存数据块、shared_pool_size缓存SQL/PLSQL代码)。建议sga_target占物理内存的30%-70%。pga_aggregate_target(总PGA大小),建议占物理内存的5%-25%。减少内存碎片,提高内存访问效率。步骤如下:
Oracle内存需求(MB)/ 2MB(如16GB内存需8192个)。/etc/sysctl.conf:添加vm.nr_hugepages=8192,执行sysctl -p生效。/etc/security/limits.conf中添加oracle soft memlock 16G、oracle hard memlock 16G。noatime(不更新访问时间)、nodiratime(不更新目录访问时间)减少磁盘写入。例如:mount -o remount,noatime,nodiratime /dev/sda1 /u01/app/oracle/oradata
read_ahead_kb增加预读扇区数(如设置为8192KB),提升顺序读性能。根据工作负载选择合适调度器:
cat /sys/block/sda/queue/scheduler;修改调度器(如deadline):echo deadline > /sys/block/sda/queue/scheduler。增大log_buffer(如设置为16MB以上)减少日志写入磁盘的频率,提升事务提交速度。需注意:过大的日志缓冲区可能导致日志文件切换延迟。
合理设置processes(最大进程数)和sessions(最大会话数),避免过多连接导致内存耗尽。例如:
ALTER SYSTEM SET processes=300 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=335 SCOPE=SPFILE;
WHERE、JOIN、ORDER BY列创建索引(如主键、外键列)。CREATE INDEX idx_emp_name_dept ON employees(name, department_id)),避免回表查询。ANALYZE INDEX更新索引统计信息,使用ALTER INDEX ... REBUILD重建碎片化严重的索引。SELECT emp_id, name FROM employees),减少数据传输量。SELECT * FROM employees WHERE department_id = :dept_id),减少SQL硬解析(硬解析会消耗大量CPU和内存)。EXPLAIN PLAN查看SQL执行路径,识别全表扫描、索引失效等问题。PARTITION BY RANGE(sale_date)),提升查询和维护效率(如只扫描特定分区)。DBMS_STATS.GATHER_SCHEMA_STATS收集表、索引的统计信息,帮助优化器生成最优执行计划。@?/rdbms/admin/awrrpt.sql -- AWR报告
@?/rdbms/admin/addmrpt.sql -- ADDM报告
top、vmstat、iostat监控系统资源;使用Oracle Enterprise Manager(OEM)监控数据库性能指标(如SGA命中率、PGA使用率、SQL执行时间)。通过以上多层优化策略,可显著提升Ubuntu环境下Oracle数据库的性能。需注意的是,优化前应在测试环境验证配置效果,避免生产环境出现意外问题;优化过程中应持续监控性能变化,及时调整策略。