ITPub博客

首页 > 数据库 > Oracle > [20260321]oracle后台进程SA.txt

[20260321]oracle后台进程SA.txt

原创 Oracle 作者:lfree 时间:2026-03-21 21:27:41 0 删除 编辑

[20260321]oracle后台进程SA.txt

--//启动一台大内存的oracle数据库,发现后发现后台启动一个ora_sa00_<sid>进程,紧接着马上消失(实际上1-2秒后消失)。
--//上网查询后发现该进程负责sga memory alloc,如果sga配置非常大上T,在启动时有可能看到该进程。
--//理论讲在测试环境应该可以看到,只不过很快消失,简单测试看看。
--//按照kimi的建议要求配置pre_page_sga=true,sga分配内存大于256M,这些很容易满足。
--//转抄kimi的解析:

--//1. SA00 是 Oracle 后台进程
--//ora_sa00_<sid> 是 Oracle 数据库实例启动时创建的后台进程,其中:
--//
--//ora_ 是 Oracle 进程的标准前缀
--//sa00 是 SGA 内存预分配进程(SGA Allocator)
--//<sid> 是数据库实例的 SID(System Identifier)
--//
--//根据 Oracle 官方文档和 MOS 说明,从 Oracle 12c(12.1.0.2)开始,当参数 PRE_PAGE_SGA 设置为 TRUE(默认值)时,SA00 进程会在实
--//例启动期间预分配 SGA 内存,以避免后续访问时的页面错误(page fault)。
--//
--//2. SA00 进程的功能
--//SA00 进程的主要作用是:
--//
--//预分配 SGA 内存:在数据库实例启动时,SA00 会"触摸"(touch)所有 SGA 内存页面
--//避免页面错误:确保后续进程访问 SGA 时不会遇到主要的 page fault
--//提高性能:通过预分配减少运行时的内存分配开销

1.环境:
SYS@book> @ ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

SYS@book> @ hidez pre_page_sga|^use_large_pages
NUM N_HEX CON_ID NAME            DESCRIPTION                                    DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD
--- ----- ------ --------------- ---------------------------------------------- ------------- ------------- ------------ ----- ---------
180    B4      0 use_large_pages Use large pages if available (TRUE/FALSE/ONLY) FALSE         ONLY          ONLY         FALSE FALSE
193    C1      0 pre_page_sga    pre-page sga for process                       TRUE          TRUE          TRUE         FALSE FALSE
--//另外内核参数调整使用hugepage。

2.测试:
--//关闭数据库,在启动数据库前执行:
--//加入ts.awk过滤,加入时间戳。
$ rm p7.txt
$ watch -n 0.1 "pgrep -l ora_sa00_book|ts.awk | tee -a p7.txt"

--//相当于0.1秒执行1次pgrep -l ora_sa00_book|ts.awk | tee -a p7.txt。
--//启动数据库略。
--//如果执行查看watch界面,可以看到但是很快消失。

$ cat p7.txt
[2026-03-21 11:21:44] 8142 ora_sa00_book
--//仅仅看到1行。

--//查看alert日志:
VKTM running at (1)millisec precision with DBRM quantum (100)ms
2026-03-21T11:21:44.617947+08:00
GEN0 started with pid=6, OS id=8128
Starting background process MMAN
2026-03-21T11:21:44.632592+08:00
MMAN started with pid=7, OS id=8132
Starting background process GEN1
Starting background process GEN2
2026-03-21T11:21:44.667888+08:00
GEN2 started with pid=11, OS id=8146
Starting background process VOSD
Starting background process DIAG
2026-03-21T11:21:44.673751+08:00
GEN1 started with pid=9, OS id=8144_8149
Starting background process OFSD
Starting background process DBRM
Starting background process VKRM
Starting background process SVCB
2026-03-21T11:21:44.685515+08:00
--//在alert日志文件中没有记录。
--//很明显该进程的作用先按照sga需求分配内存,可以不必等待分配完成启动数据库提供给其他用户使用。特别是大sag配置的服务器,
--//就很容易看到该进程,而且估计可以同时启动多个.

3.其他:
--//这很容易联想到11g遇到的一个问题,如果你没有配置使用hugepages,并且pre_page_sga=true(缺省11g是false),如果sga配置很大
--//启动将是一场灾难,启动数据库要很长一段时间,因为11g没有该进程,必须等待内存分配完成才启动完成。

4.继续:
--//取消使用hugepages设置:
SYS@book> alter system set use_large_pages=FALSE scope=spfile ;
System altered.

--//关闭数据库,修改内核参数配置:
# sysctl -p /etc/sysctl.d/98-oracle.conf
....
vm.nr_hugepages = 0
vm.nr_overcommit_hugepages = 0

# grep -i pages /proc/meminfo
AnonPages:         40024 kB
AnonHugePages:      4096 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//注:实际上不修改设置也可以,主要测试环境内存配置不高。

$ watch -n 0.1 "pgrep -l ora_sa00_book|ts.awk | tee -a p8.txt"
--//重新启动数据库:

$ cat p8.txt
[2026-03-21 15:00:31] 6786 ora_sa00_book
[2026-03-21 15:00:31] 6786 ora_sa00_book
[2026-03-21 15:00:31] 6786 ora_sa00_book
--//可以看出kimi的建议不对,use_large_pages=FALSE也会启用SA后台进程,另外发现出现3行,说明SA后台进程的执行很"慢"。
--//可以想象采用hugepages的好处,实际上以前的blog提到现在的数据库无论大小上线开始强烈建议配置hugepages。

--//查看alert日志:
2026-03-21T15:00:31.557567+08:00
VKTM running at (1)millisec precision with DBRM quantum (100)ms
Starting background process MMAN
2026-03-21T15:00:31.570985+08:00
GEN0 started with pid=6, OS id=6778
2026-03-21T15:00:31.582148+08:00
MMAN started with pid=7, OS id=6782
Starting background process GEN1
Starting background process GEN2
2026-03-21T15:00:31.607687+08:00
GEN2 started with pid=11, OS id=6790
Starting background process VOSD
Starting background process DIAG
2026-03-21T15:00:31.612732+08:00
GEN1 started with pid=9, OS id=6788_6793
Starting background process OFSD
Starting background process DBRM
Starting background process VKRM
Starting background process SVCB
Starting background process PMAN
Starting background process DIA0
Starting background process DBW0
Starting background process LGWR
Starting background process CKPT
Starting background process SMON
Starting background process RECO
Starting background process LREG
Starting background process PXMN
Starting background process FENC
Starting background process MMON
Starting background process MMNL
2026-03-21T15:00:31.629322+08:00

5.收尾还原。
SYS@book> alter system set use_large_pages=only scope=spfile ;
System altered.

--//关闭数据库,修改内核参数配置:
# sysctl  -p /etc/sysctl.d/98-oracle.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
vm.nr_hugepages = 530
vm.nr_overcommit_hugepages = 512

6.ts.awk代码:

$ cat $(which ts.awk)
# /bin/bash
gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3114115/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969407