Ubuntu上Oracle数据库性能调优技巧
SGA_TARGET=8G(缓存数据块、共享SQL等)、PGA_AGGREGATE_TARGET=2G(排序、哈希操作内存),可通过ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;命令修改,重启数据库生效。MEMORY_TARGET和MEMORY_MAX_TARGET参数简化内存配置,让Oracle自动分配SGA与PGA内存(如ALTER SYSTEM SET memory_target=10G SCOPE=SPFILE; ALTER SYSTEM SET memory_max_target=20G SCOPE=SPFILE;),适用于需要动态调整内存的场景。vm.swappiness参数(如设置为10)减少系统使用交换空间的倾向,避免内存不足时频繁换页;使用sync; echo 1 > /proc/sys/vm/drop_caches命令清理文件系统缓存,释放内存供Oracle使用。WHERE、JOIN、ORDER BY的列创建索引(如CREATE INDEX idx_emp_dept ON employees(department_id);),优先选择高选择性列(如唯一值多的列),避免为低选择性列(如性别)创建索引。ALTER INDEX idx_emp_dept REBUILD;),删除未使用或重复的索引(通过DBA_INDEXES视图识别),减少索引维护开销。CREATE INDEX idx_emp_name_dept ON employees(name, department_id);),使查询无需访问表数据,直接从索引获取结果,提升查询效率。EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id=30;生成执行计划,再用SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);查看,识别全表扫描、索引未使用等瓶颈。SELECT *(明确列出所需列,如SELECT name, salary FROM employees),减少不必要的数据读取;使用绑定变量(如SELECT * FROM employees WHERE department_id=:dept_id;)替代硬编码,降低硬解析开销(减少library cache争用)。SELECT /*+ INDEX(emp idx_emp_dept) */ * FROM employees WHERE department_id=30;),强制使用指定索引,适用于优化器误判的场景。noatime,nodiratime参数(避免每次读取文件更新访问时间,减少磁盘写入),例如mount -o noatime,nodiratime /dev/sdb1 /u01。none(禁用调度器,发挥NVMe的高并发优势),SATA SSD推荐deadline(平衡吞吐与延迟),可通过echo deadline | sudo tee /sys/block/sdX/queue/scheduler临时修改,永久生效需添加udev规则。/u01/oradata存数据文件、/u02/redo存Redo日志、/u03/archive存归档日志),避免互相抢占I/O带宽,减少争用。SALES表)按范围(如SALE_DATE)、列表(如REGION)或哈希分区,将数据分散到多个分区中,提升查询性能(如查询某时间段数据只需扫描对应分区)。例如,按日期范围分区: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 employees PARALLEL (DEGREE 4);),让Oracle使用多个进程并行处理查询,充分利用多核CPU资源,提升查询速度。SELECT /*+ PARALLEL(employees, 4) */ * FROM employees WHERE department_id=30;),强制Oracle以并行方式执行查询,适用于特定SQL的优化。ALTER SESSION SET parallel_degree_policy=AUTO;命令开启自动并行度调整,让Oracle根据系统负载动态分配并行进程数。@?/rdbms/admin/awrrpt.sql脚本生成自动工作负载存储库(AWR)报告,收集数据库性能数据(如SQL执行时间、I/O等待、CPU使用率),分析整体性能趋势。@?/rdbms/admin/addmrpt.sql脚本生成自动数据库诊断监视器(ADDM)报告,基于AWR数据识别性能瓶颈(如SQL执行慢、锁争用、I/O瓶颈),并提供优化建议。