Ubuntu环境下Oracle数据库资源分配最佳实践
调整Ubuntu内核参数以匹配Oracle的内存、I/O需求,避免因系统限制导致性能瓶颈。编辑/etc/sysctl.conf文件,添加或修改以下关键参数:
kernel.shmall:共享内存总页数(每页4KB),需大于SGA大小(如kernel.shmall=2097152对应8GB);kernel.shmmax:单个共享内存段最大大小(建议为物理内存的1/2~1/4,如kernel.shmmax=536870912对应512MB);kernel.shmmni:系统中共享内存段的最大数量(建议4096);vm.swappiness:降低交换空间使用倾向(0~100,值越小越少用swap,建议10);net.ipv4.tcp_tw_reuse:允许快速回收TIME-WAIT状态的TCP连接(提升网络吞吐量,设为1)。sudo sysctl -p使参数生效。通过/etc/security/limits.conf文件为Oracle用户设置进程数、文件描述符数等限制,避免资源争抢。添加以下内容:
oracle soft nproc 2048:每个Oracle用户的最大进程数(软限制);oracle hard nproc 16384:每个Oracle用户的最大进程数(硬限制);oracle soft nofile 1024:每个Oracle用户的最大文件描述符数(软限制);oracle hard nofile 65536:每个Oracle用户的最大文件描述符数(硬限制)。/etc/profile.d/oracle.sh脚本,添加ORACLE_BASE、ORACLE_HOME等路径配置。Oracle内存分为SGA(共享内存区)和PGA(进程全局区),合理分配是性能核心。推荐以下配置:
memory_target和memory_max_target参数自动分配SGA与PGA内存,简化管理。执行SQL命令(需SPFILE):ALTER SYSTEM SET memory_target = 16G SCOPE=SPFILE; -- 总内存目标(建议为物理内存的1/2~2/3)
ALTER SYSTEM SET memory_max_target = 32G SCOPE=SPFILE; -- 最大允许内存
ALTER SYSTEM SET sga_target = 0 SCOPE=SPFILE; -- 关闭SGA单独管理
ALTER SYSTEM SET pga_aggregate_target = 0 SCOPE=SPFILE; -- 关闭PGA单独管理
重启数据库使配置生效。sga_target、db_cache_size)和PGA大小(如pga_aggregate_target),适合对内存分配有精细需求的场景。启用大页内存可减少内存碎片,提高内存访问效率。步骤如下:
大页数量 = 物理内存(KB) / 大页大小(默认2MB)(如16GB内存需16384个2MB大页);/etc/sysctl.conf,添加vm.nr_hugepages=16384;/etc/default/grub,在GRUB_CMDLINE_LINUX中添加default_hugepagesz=2M hugepagesz=2M hugepages=16384;sudo update-grub && sudo reboot;grep HugePages_ /proc/meminfo。EXPLAIN PLAN FOR SELECT ...查看执行计划,找出全表扫描、索引缺失等问题;:id),减少SQL硬解析(降低CPU开销)。对于大量数据操作(如批量插入、聚合查询),启用并行处理提高CPU利用率。通过ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4(并行度为4)或修改表属性(如PARALLEL 4)开启并行。
noatime,nodiratime(避免每次读取文件更新访问时间)、data=writeback(提高写入效率)等参数挂载。例如:mount -o noatime,nodiratime,data=writeback /dev/sdb1 /u01
将数据文件、控制文件、Redo日志、归档日志放置在不同磁盘或LVM卷上,避免互相抢占I/O带宽。例如:
/u01/oradata:数据文件;/u02/redo:Redo日志;/u03/archive:归档日志;/u04/temp:临时表空间。根据存储设备类型选择合适的I/O调度器:
none(无调度器,发挥NVMe的高并发优势);deadline(平衡吞吐与延迟)。cat /sys/block/sdX/queue/scheduler;修改调度器:echo deadline | sudo tee /sys/block/sdX/queue/scheduler(永久生效需添加udev规则)。iostat(查看磁盘I/O)、vmstat(查看内存/CPU)等工具监控系统资源;alert.log)、监听日志,及时处理错误;cron定时执行。