Ubuntu系统上Oracle数据库性能优化技巧
ALTER SYSTEM SET SGA_TARGET=2G SCOPE=SPFILE;设置SGA目标大小,ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=BOTH;设置PGA聚合目标;MEMORY_TARGET(总内存目标)与MEMORY_MAX_TARGET(最大内存限制),如ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;;SHARED_POOL_SIZE(共享池大小)避免共享池碎片,设置SHARED_POOL_RESERVED_SIZE(保留大小)保留常用对象(如PL/SQL代码、SQL语句),减少重复解析开销。FILESYSTEMIO_OPTIONS=SETALL,启用异步I/O提升磁盘读写效率(尤其适用于高并发场景);DB_BLOCK_SIZE(数据库块大小)。OLTP系统推荐8KB(适合小事务、高频查询),数据仓库推荐32KB(适合大批量数据扫描);EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 1;生成执行计划,再用SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);查看,识别全表扫描、索引缺失等瓶颈;SELECT *(仅查询所需列,减少数据传输量);使用绑定变量(如SELECT * FROM employees WHERE department_id = :dept_id;)减少硬解析(硬解析会消耗大量CPU与共享池资源);WHERE条件过滤无关行,降低内存占用。CREATE INDEX idx_emp_department ON employees(department_id);),加速数据定位;ALTER INDEX idx_emp_department REBUILD;重建碎片化索引(碎片率超过30%时需重建),优化索引结构;DBA_INDEXES视图识别未使用或重复的索引(如SELECT * FROM DBA_INDEXES WHERE USED='NO';),用DROP INDEX idx_unused;删除,减少索引维护开销(如INSERT、UPDATE、DELETE时的索引更新成本)。CREATE TABLE sales (sale_id NUMBER, sale_date DATE) 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')));;ALTER TABLE sales ADD PARTITION p2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD'));)或删除(ALTER TABLE sales DROP PARTITION p2023;)分区,保持分区效率。ALTER TABLE sales PARALLEL (DEGREE 4);),利用多核CPU并行处理查询、DML操作;PARALLEL提示强制Oracle以并行方式执行(如SELECT /*+ PARALLEL(sales, 4) */ * FROM sales WHERE sale_date > TO_DATE('2024-01-01', 'YYYY-MM-DD');),提升大批量数据处理速度。noatime,nodiratime(减少文件访问时间更新带来的磁盘写入)、data=writeback(提升写入效率)选项(如mount -o noatime,nodiratime,data=writeback /dev/sdb1 /u01/app/oracle/oradata);deadline,NVMe使用noop,减少调度延迟)、增大磁盘队列长度(vm.dirty_ratio设置为10-20%,vm.dirty_background_ratio设置为5-10%)、提高预读扇区数(blockdev --setra 4096 /dev/sdb,提升顺序读取性能);systemctl stop bluetooth),通过ulimit -n增大进程打开文件数限制(如设置为65536),避免资源争抢。@?/rdbms/admin/awrrpt.sql生成自动工作负载库报告,分析数据库性能统计数据(如SQL执行时间、缓存命中率、I/O等待),识别性能瓶颈;@?/rdbms/admin/addmrpt.sql生成自动数据库诊断监视器报告,基于AWR数据提供优化建议(如调整内存参数、优化SQL语句);V$ACTIVE_SESSION_HISTORY视图查看当前活动会话的历史信息,诊断短期性能问题(如锁等待、I/O瓶颈)。