“优化 Debian 上的 Oracle”通常指Oracle Database 在 Debian(或类 Debian)系统上的性能、稳定性与资源利用优化。下面从系统层、Oracle 层、运维层三个维度给你一份可落地的优化清单(以 Oracle 19c / 21c 常见场景为主,也适用于 11g/12c 思路)。
Oracle 对共享内存、信号量、文件句柄要求高:
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
# 交换行为(避免过早 swap)
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
执行:
sysctl -p
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft memlock unlimited
oracle hard memlock unlimited
并确保:
session required pam_limits.so
在 /etc/pam.d/common-session 中。
xfs 或 ext4(xfs 更优)/ 和数据盘混用defaults,noatime,nodiratime,discard
避免 SGA 被 swap:
grep Huge /proc/meminfo
计算并配置:
vm.nr_hugepages = <按 SGA 计算>
Oracle 官方有脚本 hugepages_settings.sh。
ALTER SYSTEM SET SGA_TARGET = 8G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G SCOPE=SPFILE;
如启用 AMM:
MEMORY_TARGET
MEMORY_MAX_TARGET
(生产不推荐 AMM,推荐 SGA + PGA 分离)
ALTER SYSTEM SET PROCESSES=1000 SCOPE=SPFILE;
ALTER SYSTEM SET OPEN_CURSORS=2000;
ALTER SYSTEM SET SESSIONS=1100;
ALTER SYSTEM SET DB_CACHE_SIZE=4G;
ALTER SYSTEM SET LOG_BUFFER=16M;
SELECT group#, bytes/1024/1024 MB FROM v$log;
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
开启自动:
SELECT * FROM dba_autotask_client;
慢 SQL:
SELECT * FROM v$sql ORDER BY elapsed_time DESC;
常见问题:
解决:
apt install alien libaio1 unixodbc
Oracle 安装前:
ln -s /usr/bin/basename /bin/basename
示例 oracle.service:
[Unit]
Description=Oracle Database
[Service]
User=oracle
Type=forking
ExecStart=/u01/app/oracle/product/19c/bin/dbstart
ExecStop=/u01/app/oracle/product/19c/bin/dbshut
[Install]
WantedBy=multi-user.target
@?/rdbms/admin/awrrpt.sql
htop, iostat -x 1, vmstat 1/u01/app/oracle/diag请告诉我:
我可以直接给你针对性参数模板或调优脚本。