Oracle Linux 系统资源分配实践
一、总体思路与分层
二、操作系统层 cgroups v2 分配 CPU 与内存
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"sudo rebootmount -l | grep cgroup,应见 cgroup2 on /sys/fs/cgroup。sudo mkdir -p /sys/fs/cgroup/user.slice/user-1000.slice/session-1.scopeecho 512 | sudo tee /sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope/cpu.weightecho 50000 | sudo tee /sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope/cpu.maxsudo systemctl set-property oracle.service CPUWeight=512 CPUQuota=50%sudo systemctl set-property oracle.service MemoryHigh=8Gsudo systemctl set-property oracle.service MemoryMax=8.5G三、数据库层 Oracle Resource Manager 分配 CPU 与并发
BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN(plan=>'DAY_PLAN'); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(group_name=>'OLTP_USERS', comment=>'OLTP'); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(group_name=>'DSS_USERS', comment=>'DSS'); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(group_name=>'BATCH_USERS', comment=>'BATCH'); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(plan=>'DAY_PLAN', group_or_subplan=>'OLTP_USERS', mgmt_p1=>4); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(plan=>'DAY_PLAN', group_or_subplan=>'DSS_USERS', mgmt_p1=>3); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(plan=>'DAY_PLAN', group_or_subplan=>'BATCH_USERS', mgmt_p1=>2); END; /BEGIN DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(plan=>'DAY_PLAN', group_or_subplan=>'OTHER_GROUPS', mgmt_p1=>1); END; /ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DAY_PLAN' SCOPE=BOTH;PARALLEL_DEGREE_LIMIT_MTH 设为 ABSOLUTE,限制每个操作的最大并行进程数。ACTIVE_SESS_POOL_MTH 设为 ACTIVE_SESS_POOL_ABSOLUTE,限制每组最大并发活动会话,超出的会话 FIFO 排队。MAX_EST_EXEC_TIME,超过则作业不启动并报 ORA-07455,用于拦截异常大作业。四、内存与内核参数及 HugePages 配置
sysctl -w kernel.shmmax=...;持久化:写入 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf 并执行 sysctl -p。cat /proc/sys/kernel/shmmax、cat /proc/sys/kernel/shmall、ipcs -lmecho "kernel.shmmax=... >> /etc/sysctl.confHugePages ≈ SGA_TARGET / HugePage_Size(HugePage_Size 通常为 2MB 或 1GB,视内核与硬件而定)。vm.nr_hugepages=<计算值>(写入 sysctl.conf 并 sysctl -p)。五、快速落地清单