好的。主要是参考了Oracle技术支持给的几篇文档整理的。
其中提到的第二种方法目前没有用。
一、硬件环境与软件环境
1、硬件环境:CPU xeon 2.7GHz+RAM 16G
2、软件环境:RHEL AS 3.0 (kernel 2.4.21-4.Elsmp)+Oracle 10g(10.1.0.3)
二、方法
方法一:使用Hugetlb 和 Remap_file_pages(依赖于数据块大小(blocksize),最大可以将SGA空间调整到14G)
方法二:增加Oracle SGA的地址空间(单纯使用这种方法在RHEL 3.0 smp kernel上可以将SGA区空间最大增加到2.7G。)
三、步骤(方法一)
1、启动数据库,查看原有主要参数配置情况:
为了不更改原有的初始化参数文件,在本次实验中将初始化参数文件导出,更改导出的参数文件的配置,在启动数据库时以导出的参数文件启动。
启动sqlplus,导出初始化参数文件:
SQL>create pfile from spfile
在本次实验中,导出的参数文件为initZBDB.ora,打开参数文件,可以看到主要的参数设置情况:
db_block_size=8192
db_file_multiblock_read_count=16
sga_target=1228931072
pga_aggregate_target=408944640
db_cache_size=905969664
java_pool_size=16777216
large_pool_size=16777216
shared_pool_size=285212672
sort_area_size=1048576
2、配置linux
(1)添加如下内容到/etc/rc.local:
umount /dev/shm
mount -t ramfs ramfs /dev/shm
chown oracle:dba /dev/shm
(2)增加“max locked memory”ulimit
为了适应VLM 窗口大小(默认为512M)需要调整Oracle锁定的内存地址空间的大小(在默认情况下为4k)在本次实验中将Oracle锁定的内存设置为接近4G,添加如下内容到/etc/security/limits.conf:
oracle soft memlock 4194303
oracle hard memlock 4194303
注:在32位的Oracle中,锁定内存的大小不能超过4G。
(3)切换到Oracle用户,输入如下命令,使第(2)步的设置生效:
$ ulimit
(4)输入“ulimit -l”可以查看当前设置的结果
3、配置Oracle
(1)修改initZBDB.ora文件中如下参数设置,如果参数文件中没有,则添加下述参数设置。
use_indirect_data_buffers=true
db_block_buffers=800000(本次实验计划将SGA区调整到6G左右,由于db_block_size=8192,所以设置db_block_buffers为800000)
将db_cache_size参数设置注释,使用VLM技术增大SGA到2.6G时db_cache_size参数将失效,必须使用db_block_buffers参数。
# db_cache_size=905969664
将sga_target参数注释:
# sga_target=1228931072
(2)以initZBDB.ora参数文件启动并关闭数据库,查看参数设置是否生效:
SQL>startup pfile=’/opt/oracle/product/10.1.0/db_1/dbs/initZBDB.ora’
显示内容如下:
Total System Global Area 6878658560 bytes
Fixed Size 777812 bytes
Variable Size 6876832172 bytes
Database Buffers 0 bytes
Redo Buffers 1048576 bytes
注:此处database buffers为0是正常的,适用VLM技术后即会如此。
4、配置hugetlb
(1)确保shmmax参数已经设置的足够大,在实验中,在安装数据库时,已经将shmmax参数设置为4G-1,可以通过如下命令查看shmmax参数设置:
# sbin/sysctl –a | grep shm
可以通过如下命令更改其大小:
# vi /etc/sysctl.conf
执行下述命令,使得更改生效:
# sbin/sysctl –p
(2)执行下述命令查看当前共享内存段的大小
#ipcs
显示内容如下:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1572864 oracle 660 337641472 16
0x154b1f50 1605633 oracle 660 4096 0
------ Semaphore Arrays --------
key semid owner perms nsems
0x8eded478 1933312 oracle 660 104
------ Message Queues --------
key msqid owner perms used-bytes messages
(3)关闭oracle
(4)将337641472 bytes转换为MB为单位,约等于338 MB
(5)在这个数值的基础上加一个小的数,比如加4,结果为342MB
(6)将这个数值写入到/proc/sys/vm/hugetlb_pool文件中:
echo 342 >/proc/sys/vm/hugetlb_pool
注:可以将上述命令添加到rc.local文件中,这样每次系统启动后都可立即获取内存。
(7)启动Oracle
SQL>startup pfile=’/opt/oracle/product/10.1.0/db_1/dbs/initZBDB.ora’
(8)执行命令:#. cat /proc/meminfo,在最下方,可以看到显示的内容如下:
HugePages_Total:171
HugePages_Free: 171
Hugepagesize: 2048
5、增加Oracle SGA地址空间(可选)(方法二)
不论是否使用大内存技术都可以通过这种方法增大SGA区的大小,但是,使用这种方法增大SGA区的使用空间的同时,相应的会减少PGA区的使用空间,如果SGA区大小增大到一定程度会导致PGA区分配失败,即使系统还有可用内存,因为Oracle使用的地址空间是有限的。因此建议使用下面给出的建议值进行调整。降低SGA当前的起始地址0x50000000
(1)cd $ORACLE_HOME/rdbms/lib
(2)genksms -s 0x15000000 >ksms.s (新的起始位置)
(3)make -f ins_rdbms.mk ksms.o
(4)make -f ins_rdbms.mk ioracle