[20260101]Oracle连接占用内存疑问(21c).txt

[20260101]Oracle连接占用内存疑问(21c).txt

--//以前测试过11.2.0.4数据库打开连接什么都不做占用内存的测试,每个会话占用仅仅2.5M,而生产系统也看到平均每个会话占用5M。

1.当时的测试如下:

--//在远程连接数据库,数据库版本11.2.0.4.
--//补充一点,测试的数据库都使用hugepage。
$ seq 150 | xargs -i{} echo "sqlplus -s -l scott/book@book <<< 'host sleep 60' &" | bash &
--//说明一下我这台客户端很旧(rh4.3) ,xargs 命令仅仅支持-i(小写),一般现在的版本使用大写-I.

# smem -tk -U oracle -P "oraclebook"
  PID User     Command                         Swap      USS      PSS      RSS
61976 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.5M
62054 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62082 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.5M
62096 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.5M
62116 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
61882 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.5M
61894 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
61902 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
61934 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
61988 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.5M

62366 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62376 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62390 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
62424 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
62438 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62450 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
62402 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
62412 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62226 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.6M
62420 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
62444 oracle   oraclebook (LOCAL=NO)              0     2.4M     2.5M    20.7M
-------------------------------------------------------------------------------
  150 1                                           0   364.1M   379.3M     3.0G
--//可以发现每个连接消耗2.5M上下.再次说明RSS的累计没有任何意义.

--//当时生产系统的情况:
#  smem -tk -U oracle -P "oraclexxxx1" -s pss
--//注意-s pss 要小写.
  PID User     Command                         Swap      USS      PSS      RSS
29000 oracle   oraclexxxx1 (DESCRIPTION=(L        0     2.1M     2.1M    18.5M
116067 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
 9658 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
58779 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
82193 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
82937 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
83543 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
86108 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
101419 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
126643 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
128585 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
61510 oracle   oraclexxxx1 (LOCAL=NO)             0     2.3M     2.3M    20.5M
112481 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
112483 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
97264 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
111967 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
112505 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.3M
109834 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
109847 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
109851 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
109855 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
111860 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
111862 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
111965 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
111806 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
103363 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
101308 oracle   oraclexxxx1 (LOCAL=NO)             0     2.4M     2.4M    21.4M
...
119918 oracle   oraclexxxx1 (LOCAL=NO)             0     7.0M     7.1M    36.1M
  682 oracle   oraclexxxx1 (LOCAL=NO)             0     7.1M     7.1M    34.4M
 4524 oracle   oraclexxxx1 (LOCAL=NO)             0     7.1M     7.1M    37.0M
70387 oracle   oraclexxxx1 (LOCAL=NO)             0     7.1M     7.2M    37.3M
33543 oracle   oraclexxxx1 (LOCAL=NO)             0     7.2M     7.2M    31.8M
93193 oracle   oraclexxxx1 (LOCAL=NO)             0     7.2M     7.3M    34.9M
84138 oracle   oraclexxxx1 (LOCAL=NO)             0     7.3M     7.3M    32.4M
114216 oracle   oraclexxxx1 (LOCAL=NO)             0     7.3M     7.3M    35.1M
107901 oracle   oraclexxxx1 (LOCAL=NO)             0     7.4M     7.4M    35.6M
74966 oracle   oraclexxxx1 (LOCAL=NO)             0     7.4M     7.4M    35.5M
91516 oracle   oraclexxxx1 (LOCAL=NO)             0     7.6M     7.6M    35.2M
67260 oracle   oraclexxxx1 (LOCAL=NO)             0     7.6M     7.7M    35.9M
20245 oracle   oraclexxxx1 (LOCAL=NO)             0     7.7M     7.8M    36.2M
105204 oracle   oraclexxxx1 (LOCAL=NO)             0     7.8M     7.8M    37.3M
26185 oracle   oraclexxxx1 (LOCAL=NO)             0     6.1M     8.2M    43.3M
101757 oracle   oraclexxxx1 (LOCAL=NO)             0     8.7M     8.9M    36.8M
76951 oracle   oraclexxxx1 (LOCAL=NO)             0     8.9M     9.6M    44.9M
33285 oracle   oraclexxxx1 (LOCAL=NO)             0    12.2M    12.2M    40.4M
46048 oracle   oraclexxxx1 (LOCAL=NO)             0     6.4M    13.0M    48.2M
83094 oracle   oraclexxxx1 (LOCAL=NO)             0     6.9M    13.4M    52.2M
20360 oracle   oraclexxxx1 (LOCAL=NO)             0    36.4M    36.4M    62.1M
-------------------------------------------------------------------------------
 4247 2                                           0    18.8G    18.8G   110.3G
--//18.8*1024/4247 = 4.53M. 平均5M的估计的量还是充足的.

2.21.c的情况:

$ grep -i huge  /proc/meminfo
AnonHugePages:     65536 kB
HugePages_Total:     522
HugePages_Free:        7
HugePages_Rsvd:        7
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//数据库使用hugepage。

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.

# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

$ cat a.sh
free -k >| aa.txt
seq 150 | xargs -IQ -P 150 bash -c "sqlplus -s -l scott/book@book01p <<< 'host sleep 60' &"
sleep 15
free -k >>aa.txt

# smem -tk  -P "oraclebook" -U oracle
  PID User     Command                         Swap      USS      PSS      RSS
 4995 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    30.1M
 5147 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 5151 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4455 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4467 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4474 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4483 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4489 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4503 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4505 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4509 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4535 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4544 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4558 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4572 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4593 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4598 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4625 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4632 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4637 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4651 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4655 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4666 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.3M
 4677 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
 4691 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.7M    31.2M
...
 5121 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.2M
 5134 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.2M
 5145 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.2M
 4449 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.2M
 5141 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.3M
 5156 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.3M
 4463 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.3M
 5100 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.3M
 5105 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.3M
 4697 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.4M
 5030 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.3M
 4495 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.4M
 5114 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.4M
 5112 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.4M
 4549 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.6M
-------------------------------------------------------------------------------
  150 1                                           0     1.4G     1.4G     4.6G
--//基本什么没做,每个连接消耗9.7M.

$ cat aa.txt
              total        used        free      shared  buff/cache   available
Mem:        8010488     1756800     4496352        8884     1757336     5920400
Swap:       1048572           0     1048572

              total        used        free      shared  buff/cache   available
Mem:        8010488     4178816     2058436        8884     1773236     3483848
Swap:       1048572           0     1048572

--//(4178816-1756800)/150/1024 = 15.77M,启动1个使用连接接近16M,当然这里面包含sleep以及sqlplus。

# smem -tk  -P "oraclebook|sqlplus|sleep" -U oracle
  PID User     Command                         Swap      USS      PSS      RSS
 7999 oracle   sleep 60                           0    88.0K    88.0K   608.0K
 8147 oracle   sleep 60                           0    88.0K    88.0K   608.0K
 8384 oracle   sleep 60                           0    88.0K    88.0K   608.0K
...
 8520 oracle   sleep 60                           0    92.0K    92.0K   612.0K
 7777 oracle   sqlplus -s -l                      0     5.1M     5.2M    15.4M
 7780 oracle   sqlplus -s -l                      0     5.1M     5.2M    15.4M
 7784 oracle   sqlplus -s -l                      0     5.1M     5.2M    15.4M
 7786 oracle   sqlplus -s -l                      0     5.1M     5.2M    15.4M
...
 7861 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.2M
 7885 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.2M
 8045 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.3M
 8283 oracle   oraclebook (LOCAL=NO)              0     9.6M     9.8M    31.3M
 8279 oracle   oraclebook (LOCAL=NO)              0     9.7M     9.8M    31.3M
-------------------------------------------------------------------------------
  451 1                                           0     2.2G     2.2G     6.9G

--// 9.8+5.2+88/1024 = 15.09,基本接近。
--//注:总计451,多了1个,完成后执行:

# smem -tk  -P "oraclebook|sqlplus|sleep" -U oracle
  PID User     Command                         Swap      USS      PSS      RSS
 2659 oracle   tmux new-session -s oracle         0     5.9M     6.1M     7.0M
-------------------------------------------------------------------------------
    1 1                                           0     5.9M     6.1M     7.0M

# ps -fp 2659
UID        PID  PPID  C STIME TTY          TIME CMD
oracle    2659     1  0 10:56 ?        00:00:02 tmux new-session -s oracle -n bashsqlplus -d
--//因为命令里面包含sqlplus字符串。

3.小结:
--//可以看出21c,每个连接比原来多消耗将近7M。如果升级到21c,连接数量很多的话,比如4000个连接,相当于多消耗将近
--//7*4000=28000M,接近28G,这是一个非常大的量。当然现在许多服务器内存都很大,这也许是不用考虑的情况。

--//后记:使用pmap -x 查看,可以发现如下:

$ pmap -x 3570 | grep "rw---" | sort -k2 -nr | head -10
00007f6630e25000    6400    5952    5952 rw---   [ anon ]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00007f66322b2000    2564    1392    1392 rw---   [ anon ]
00007f6636aa5000    1656    1560    1560 rw---   [ anon ]
00007f6630ca5000    1024    1024    1024 rw---   [ anon ]
00007f6630ba5000    1024     956     956 rw---   [ anon ]
00007ffe065f7000     644     512     512 rw---   [ stack ]
00007f6631669000     512      24      24 rw---   [ anon ]
00007f6630da5000     512     480     480 rw---   [ anon ]
000000001a413000     468      28      24 rw--- oracle
000000001a488000     344     196     196 rw---   [ anon ]

--//注意看下划线,启动多个连接查看,每个地址都不一样,对比11g,相当于每个连接增加6400K。

请使用浏览器的分享功能分享到微信等