ITPub博客

首页 > 数据库 > Oracle > [20161121]关于使用hugepage的讨论.txt

[20161121]关于使用hugepage的讨论.txt

原创 Oracle 作者:lfree 时间:2016-11-21 15:43:18 0 删除 编辑

[20161121]关于使用hugepage的讨论.txt

--ITPUB上的讨论, 请问使用HugePage性能提示明显吗?链接:http://www.itpub.net/thread-2071616-1-1.html
--我的观点使用总比不用好,当然你没有性能问题,也可以不用,通过一个简单的测试看说明内存的使用。

1.环境:
$ cat /etc/sysctl.conf| grep -i nr_hugepages
vm.nr_hugepages = 305

SCOTT@book> show parameter use_large_pages
NAME            TYPE    VALUE
--------------- ------- ------
use_large_pages string  TRUE

SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


2.重启数据库:
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

SYS@book> show parameter processes
NAME                      TYPE    VALUE
------------------------- ------- ------
aq_tm_processes           integer 0
db_writer_processes       integer 3
gcs_server_processes      integer 0
global_txn_processes      integer 1
job_queue_processes       integer 0
log_archive_max_processes integer 4
processes                 integer 150

--建立1个脚本,a.sh
#! /bin/bash
for i in $(seq 100)
do
        sqlplus -s scott/book <<EOF > /dev/null &
select sysdate from dual;
host sleep 200
commit;
quit;
EOF
done

--执行前:
$ cat /proc/meminfo | grep -i page
AnonPages:        193124 kB
PageTables:        13912 kB
AnonHugePages:     51200 kB
HugePages_Total:     305
HugePages_Free:       89
HugePages_Rsvd:       89
HugePages_Surp:        0
Hugepagesize:       2048 kB

--执行后:
$ cat /proc/meminfo | grep -i page
AnonPages:        859888 kB
PageTables:        68740 kB
AnonHugePages:     51200 kB
HugePages_Total:     305
HugePages_Free:       82
HugePages_Rsvd:       82
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//PageTables使用了68740 kB,大约68M。

3.修改参数use_large_pages=false,重启数据库,也就是关闭hugepage的使用。

SYS@book> alter system set use_large_pages=false scope=spfile ;
System altered.

--重启数据库:

--执行前:
$ cat /proc/meminfo | grep -i page
AnonPages:        606504 kB
PageTables:        38904 kB
AnonHugePages:     51200 kB
HugePages_Total:     305
HugePages_Free:      305
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//HugePages_Free=305,表示没有使用hugepage。

--执行后:
$ cat /proc/meminfo | grep -i page
AnonPages:       1012584 kB
PageTables:       118872 kB
AnonHugePages:     51200 kB
HugePages_Total:     305
HugePages_Free:      305
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//PageTables使用了118872 kB,大约118M。实际上连接越大差距越大。

4.你也许会讲差距并不大,原因很容易解析。
a.连接数量不多,我仅仅测试100个连接。
b.访问的数据块很少,实际上我执行的语句根本不访问数据表dual。但是登录我审计是开的,至少存在少量sql语句。这样很容易解析为
  什么仅仅相差2倍。

$ getconf PAGE_SIZE
4096
--普通页面大小4K。而使用hugepage=2048K,有2048/4=512倍的差异。但是我访问的块很少,数据块8K。我估计访问的块很离散。
--这样对以4K的页面存在8/4=2项,而对于使用hugapage仅仅1项,这样存在2倍差异还是很明显的。

c.存在512倍差异不大可能的,我估计至少20倍以上差异还是存在。顺便帖一个生产系统的情况:

#  cat /proc/meminfo | grep -i page
AnonPages:      21392820 kB
PageTables:      1587204 kB
HugePages_Total:   80000
HugePages_Free:     5390
HugePages_Rsvd:     3983
HugePages_Surp:        0
Hugepagesize:       2048 kB
#  ps -ef | grep oracleXXXX|wc
   3629   32661  265027

--可以发现PageTables: 1587204 kB, 1587204/1024=1550.00390625M,将近1.5G,如果不使用hugepage,Pagesize可以达到30G,这样还是
--很巨大的.可以发现HugePages_Free:5390,5390块没用,浪费还是很严重的,5390*2=10780M,将近10G,也就是我们生产系统存在一定的
--浪费。反正不缺这点内存,也没时间纠正这个错误。

--说明一下,这些仅仅是我的猜测,OS的东西好多不是很了解。

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

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969349