Ubuntu环境下Oracle数据库性能提升方法
PARALLEL提示(如SELECT /*+ PARALLEL(table_name, 4) */ * FROM table_name)或调整表/查询的并行度,提高大数据量查询和事务处理效率。MEMORY_TARGET(当前总内存)和MEMORY_MAX_TARGET(上限)参数,让Oracle自动在SGA和PGA之间动态分配内存。适用于简化管理,尤其适合内存需求波动的场景。设置示例:ALTER SYSTEM SET MEMORY_MAX_TARGET=13G SCOPE=SPFILE; -- 上限设为13GB
ALTER SYSTEM SET MEMORY_TARGET=12.8G SCOPE=SPFILE; -- 当前总内存设为12.8GB
ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE; -- 关闭SGA手动管理
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;-- 关闭PGA手动管理
SHUTDOWN IMMEDIATE; STARTUP; -- 重启生效
DB_CACHE_SIZE):命中率<70%时需增大(公式:1-(物理读/(逻辑读+一致性读))),可通过ALTER SYSTEM SET DB_CACHE_SIZE=2G SCOPE=BOTH调整;SHARED_POOL_SIZE):使用率<90%时需增大(查询V$LIBRARYCACHE和V$ROWCACHE),避免硬解析;LOG_BUFFER):根据日志写入频率调整(通常2MB-16MB),过大易导致争用。PGA_AGGREGATE_TARGET(OLTP系统约20%,DSS系统约50%-70%),优化排序、哈希连接等操作的内存使用。SELECT *(仅查询所需列),使用绑定变量(减少硬解析,降低库缓存争用),例如:-- 不推荐(硬解析)
SELECT * FROM employees WHERE department_id = 30;
-- 推荐(绑定变量)
SELECT employee_id, name, salary FROM employees WHERE department_id = :dept_id;
WHERE、JOIN、ORDER BY子句中的列)创建索引,提高查询效率。例如:CREATE INDEX idx_dept_id ON employees(department_id);
同时需定期维护索引:重建碎片多的索引(ALTER INDEX idx_dept_id REBUILD)、删除无效索引(SELECT * FROM USER_INDEXES WHERE STATUS='UNUSED')。PARTITION BY RANGE(sale_date)),将数据分散到多个分区,减少单表扫描量。例如: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 (MAXVALUE)
);
分区后可针对特定分区查询,提高效率。/u01/oradata/ORCL/datafile/u02/oradata/ORCL/redo/u03/oradata/ORCL/controlfileasync I/O(异步I/O)提高I/O并发性能,通过FILESYSTEMIO_OPTIONS=SETALL参数开启(需在SPFILE中设置并重启)。@?/rdbms/admin/awrrpt.sql脚本生成自动工作负载存储库(AWR)报告,分析数据库性能趋势(如SQL执行时间、等待事件、内存使用情况)。@?/rdbms/admin/addmrpt.sql脚本生成自动数据库诊断监视器(ADDM)报告,识别性能瓶颈(如CPU瓶颈、I/O瓶颈、SQL低效)并提供优化建议。1-(物理读/(逻辑读+一致性读)))、共享池使用率(SELECT SUM(GETS-GETMISSES)/SUM(GETS) FROM V$ROWCACHE)、PGA命中率(SELECT ROUND(PGA_CACHE_HIT_RATIO,2) FROM V$PGASTAT WHERE NAME='cache hit percentage'),及时调整参数。net.core.rmem_max、net.core.wmem_max)、文件系统(如fs.file-max、vm.dirty_ratio)参数,提高系统吞吐量。例如:# 增加TCP缓冲区大小
echo "net.core.rmem_max=16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max=16777216" >> /etc/sysctl.conf
sysctl -p
apache2、mysql),减少系统资源竞争。vm.nr_hugepages参数设置(如echo 1024 > /proc/sys/vm/nr_hugepages),并在Oracle初始化参数中设置USE_LARGE_PAGES=TRUE。