[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。