Ubuntu环境下Oracle数据库性能调优的最佳实践
vm.swappiness建议设置为10以下,减少交换空间使用)。SGA_TARGET(共享全局区,包含数据缓冲区、共享池等)和PGA_AGGREGATE_TARGET(程序全局区,用于排序、哈希操作),建议SGA_TARGET占总内存的60%-70%,PGA_AGGREGATE_TARGET占20%-30%(如16GB内存可设为SGA_TARGET=10G、PGA_AGGREGATE_TARGET=3G)。MEMORY_TARGET(总内存目标)和MEMORY_MAX_TARGET(最大内存目标),简化内存配置(如ALTER SYSTEM SET MEMORY_TARGET=12G SCOPE=SPFILE; ALTER SYSTEM SET MEMORY_MAX_TARGET=12G SCOPE=SPFILE;)。内存需求/2MB,如8GB需4096个),编辑/etc/sysctl.conf添加vm.nr_hugepages=4096,重启生效;Oracle配置中设置USE_LARGE_PAGES=TRUE。noatime,nodiratime(避免每次读取更新访问时间)、data=writeback(提高写入效率)选项(如mount -o noatime,nodiratime,data=writeback /dev/sdb1 /u01)。/u01/oradata存数据、/u02/redo存Redo日志、/u03/archive存归档),避免争用带宽。mq-deadline/bfq,Oracle更适合deadline(SATA SSD)或none(NVMe),减少I/O等待时间(通过cat /sys/block/sdX/queue/scheduler查看当前调度器,echo deadline | sudo tee /sys/block/sdX/queue/scheduler修改)。DISK_ASYNCH_IO=TRUE(Oracle参数),并在/etc/fstab中添加aio=1,提升并行I/O性能(如/dev/sdb1 /u01 ext4 defaults,aio=1 0 0)。WHERE子句、JOIN字段)创建索引,避免全表扫描;使用覆盖索引(包含查询所需所有列)减少表访问次数。ALTER INDEX idx_name REBUILD;),删除未使用或重复索引(通过DBA_INDEXES视图识别)。SELECT *,明确列出所需列,减少数据传输量;使用绑定变量(如:dept_id)替代硬编码,降低硬解析开销(减少library cache争用)。EXPLAIN PLAN分析执行计划,识别全表扫描、索引跳转等瓶颈;通过查询提示(如/*+ INDEX(table_name index_name) */)引导优化器选择最优路径。RANGE (sale_date))、列表分区(如按地区LIST (region))或哈希分区(如按ID均匀分布),提升查询性能(仅扫描相关分区)和管理效率(如快速删除旧分区ALTER TABLE sales DROP PARTITION p2020;)。ALTER TABLE ... EXCHANGE PARTITION)快速迁移数据。ALTER TABLE table_name PARALLEL (DEGREE 4);)、使用并行提示(SELECT /*+ PARALLEL(table_name, 4) */ * FROM table_name)、设置会话并行策略(ALTER SESSION SET parallel_degree_policy=AUTO;)。SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(...));)。V$系列视图监控实时性能(如V$SESSION查看会话状态、V$SQL查看SQL执行统计、V$IOSTAT_FILE查看磁盘I/O详情)。iostat(查看磁盘I/O利用率、等待时间)、iotop(实时查看进程I/O占用)、vmstat(查看内存、CPU使用情况)辅助诊断。