Linux Oracle最佳实践分享
导读:Linux 上 Oracle 数据库最佳实践 一 安装与基础环境 使用受支持的 Linux x86-64 版本(如 Oracle Linux 8.2+ 或兼容的 RHEL),安装必要的依赖包(如 gcc、glibc-devel、libai...
Linux 上 Oracle 数据库最佳实践
一 安装与基础环境
- 使用受支持的 Linux x86-64 版本(如 Oracle Linux 8.2+ 或兼容的 RHEL),安装必要的依赖包(如 gcc、glibc-devel、libaio-devel、sysstat、unixODBC 等),创建 oinstall、dba 组与 oracle 用户,设置目录 /u01/app 及权限,准备图形化安装环境(X11 转发或本地 GUI)。这些步骤能确保安装器前置条件满足并降低后续故障率。
- 内核与资源限制建议(示例为常见 11g/12c 基线,需按内存与负载调整):
- 共享内存与信号量:
- kernel.shmmax:接近物理内存一半(字节),如 32GB 内存可设 17179869184
- kernel.shmall:ceil(物理内存/页面大小),如 32GB/4KB=8388608
- kernel.shmmni:4096
- kernel.sem:250 32000 100 128
- 文件与 AIO:
- fs.file-max:6815744
- fs.aio-max-nr:1048576
- 网络:
- net.core.rmem_default:262144
- net.core.rmem_max:4194304
- net.core.wmem_default:262144
- net.core.wmem_max:1048576
- net.ipv4.ip_local_port_range:9000 65500
- 用户限制(/etc/security/limits.conf):
- oracle soft nproc 2047;oracle hard nproc 16384
- oracle soft nofile 1024;oracle hard nofile 65536
- 使配置生效:执行 sysctl -p,并在 /etc/pam.d/login 加载 pam_limits.so,在 oracle 用户的 ~/.bash_profile 设置 ulimit -u 16384 -n 65536 与 umask 022。
- 共享内存与信号量:
二 存储与文件系统
- 存储类型优先选用 SSD/NVMe 或高性能阵列(如 RAID10),为 重做日志(Redo) 与 控制文件 提供独立的高 IOPS 磁盘,数据文件与归档日志分离,降低写放大与争用。
- 文件系统建议 XFS/EXT4,挂载选项推荐:noatime,nodiratime,barrier=1(XFS 默认开启写入屏障),大块顺序写负载可适当增大 stripe/条带 与对齐;避免在高并发写入路径使用 NFS(除非经过充分验证与调优)。
- 使用 ASM(Automatic Storage Management)可简化磁盘管理与条带化,提升 I/O 并行度;若采用 ASM,优先使用 ASMlib 或厂商多路径(如 DM-MPIO/PowerPath)确保路径冗余与路径故障切换稳定。
三 内存 进程与并发
- 内存配置以总内存为上限,优先保障 SGA_TARGET + PGA_AGGREGATE_TARGET 之和不超过物理内存的 70%~80%,为 OS 与其他进程预留余量;开启 自动内存管理(AMM) 或 自动共享内存管理(ASMM) 以简化调优。
- 典型建议:
- SGA:优先分配给 DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE 等,OLTP 场景通常提高 DB_CACHE_SIZE 收益更明显。
- PGA:启用 PGA_AGGREGATE_TARGET 与 WORKAREA_SIZE_POLICY=AUTO,OLAP/批量排序可适当提高 PGA。
- 进程与会话:
- 合理设置 PROCESSES/SESSIONS/TRANSACTIONS,避免过大导致内存压力或过小引发连接排队。
- 使用 Dedicated Server 模式(默认),避免共享服务器(MTS)在复杂 SQL 与高并发下的争用与可观测性下降。
- 网络与连接:
- 优化 TCP/RDMA 栈与端口范围,启用 SQL*Net 加密/校验 提升链路安全;对跨机房/长距离链路适当增大 SDU/TDU 与 SEND/RECV 缓冲(需谨慎压测)。
四 SQL 与索引 分区 统计信息
- SQL 编写与执行:
- 仅查询必要列(避免 **SELECT ***),优先 JOIN 替代复杂子查询,合理使用 绑定变量 降低硬解析,避免在索引列上使用函数/表达式导致索引失效。
- 使用 EXPLAIN PLAN/DISPLAY_CURSOR 与 SQL Tuning Advisor 定位高成本操作(如全表扫描、哈希碰撞、隐式转换),必要时通过 SQL Profile/SQL Plan Baseline 稳定执行计划。
- 索引与分区:
- 为高频过滤/排序/连接列建立合适索引(如 B-Tree),低基数列可用 位图索引(谨慎在 OLTP 并发写入场景使用),关联查询可考虑 函数索引/复合索引;定期清理 冗余/未使用索引。
- 大表按业务时间/地域等做 分区(Range/List/Hash),配合 分区裁剪 与 局部索引 提升扫描效率与维护效率。
- 统计信息与计划稳定性:
- 定期收集对象统计信息(如 DBMS_STATS.GATHER_SCHEMA_STATS),对 数据倾斜 对象使用 直方图;在变更窗口前冻结/导入计划基线,避免回归。
五 备份恢复 高可用 监控与维护
- 备份恢复:
- 采用 RMAN 制定 全量+增量 策略,定期执行 归档日志备份 与 控制文件/SPFILE 自动备份;在独立存储保留多份备份并定期 恢复演练 验证可用性与完整性。
- 高可用与容灾:
- 关键系统建议部署 Oracle Data Guard(物理/逻辑)实现主备切换与读写分离;跨地域容灾可结合 Far Sync 降低 RPO;对极致可用与横向扩展需求评估 Oracle RAC 与共享存储架构。
- 监控与日常维护:
- 利用 AWR/ASH/ADDM 定期巡检(如每日/每周),关注 Top SQL、等待事件、I/O 与内存命中率;结合 OEM/Cloud Control 实现可视化与阈值告警。
- 例行任务:重建/重组 高碎片索引、清理 回收站、归档与 Purge 审计/跟踪文件、滚动补丁与 OPatch 升级、验证 备份可恢复性 与 容量水位。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Oracle最佳实践分享
本文地址: https://pptw.com/jishu/777756.html
