在 Debian 上运行 Oracle Database(通常是 Oracle 11g/12c/19c 等),优化可以从 操作系统层、Oracle 实例层、存储与网络、运维规范 四个方面来做。下面给你一份比较系统、可落地的优化清单。
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 = 1024 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行:
sysctl -p
Oracle 用户必须有足够资源:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
并确保:
/etc/pam.d/login
session required pam_limits.so
Debian 默认服务不要太多:
systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon
减少 TLB miss,提升性能。
# /etc/sysctl.conf
vm.nr_hugepages = 4096
计算方式:
SELECT CEIL(SUM(bytes)/1024/1024/2048) FROM v$sga;
OLTP 系统示例(16G 内存)
ALTER SYSTEM SET sga_target=10G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=3G SCOPE=SPFILE;
建议:
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=600 SCOPE=SPFILE;
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
常见问题:
推荐:
挂载参数示例:
/dev/sdb /u01 ext4 defaults,noatime,nodiratime 0 0
ALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;
ALTER SYSTEM SET disk_asynch_io=TRUE SCOPE=SPFILE;
# listener.ora
LISTENER =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
Debian 不是 Oracle 官方支持系统,需手动补库:
apt install gcc make libaio1 unixodbc
常见缺:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c
SELECT * FROM v$sysstat;
SELECT * FROM v$session_wait;
@?/rdbms/admin/awrrpt.sql
如果你能告诉我:
我可以给你一套 针对性参数模板。