歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

Linux上SGA的最大大小

 在Linux上,全部SGA大小被限制為2G,有多種方法可以為SGA分配更多的內存,但是最可靠和靈活的方法需要使用到共享內存文件,如在RHEL2.1下的shmfs或RHEL3、4、5下的ramfs,本文描述在Red Hat企業版Linux以及它的克隆版本上創建非常大的高速緩存的方法。

    Red Hat企業版Linux(RHEL)2.1
    創建一個共享內存文件系統(shmfs)
    shmfs是一個內存文件系統,因此它可以與Red Hat Linux AS2.1支持的虛擬內存的最大大小一樣大,雖然理論上企業版內核支持超過64GB內存,但目前最大是16GB。
    shmfs是root用戶使用下面的命令創建的:
    mount -t shm shmfs -o size=3g /dev/shm
    通過在/etc/fstab中添加下面一行,共享內存文件系統可以被自動掛載:
    shmfs /dev/shm shm size=3g 0 0
    在上面的例子中,我創建了一個3G大小的shmfs,也是我計劃使用的高速緩存的大小,SGA的其他組件放在常規內存中,而不是這個共享內存文件系統中,因此在考慮shmfs的大小時不要將它們包括進來了,比實際需要的大小要稍微大一點,本例中我使用3G shmfs作為高速緩存。

    開啟大頁面支持
    在/boot/grub/grub.conf文件中添加bigpages=xMB到相關的內核條目後來開啟大頁面支持,這裡的x象下面這樣計算:
    總SGA大小(單位G)*1024
    然後圍繞這個值取整百,因此一個4G大小的SGA,我們做下面的計算:
    4*1024=4096=4100
    因此/boot/grub/grub.conf文件條目看起來就是:
    kernel /vmlinuz-2.4.9-e.40enterprise ro root=/dev/cciss/c0d0p2 bigpages=4100MB
    保存後應該重啟系統,然後你必須作為root用戶執行下面的命令:
    echo 2 > /proc/sys/kernel/shm-use-bigpages
    你可以直接在/etc/sysctl.conf文件中添加一行讓這個值固定下來:
    kernel.shm-use-bigpages = 2

    Red Hat企業版Linux(RHEL)3、4和5
    掛載ramfs文件系統,並確認它對oracle是可用的
    umount /dev/shm
    mount -t ramfs ramfs /dev/shm
    chown oracle:oinstall /dev/shm
    將這些命令添加到/etc/rc.local文件中,和RHEL2.1的方法一樣,只有高速緩存存儲在這個位置。
    因為Oracle會為共享池鎖住共享內存,我們必須在/etc/security/limits.conf中調整memlock參數,memlock以Kb為單位進行表示的,因此對於一個2G大小的共享池,我們至少需要(2*1024*1024=2097152),如下所示:
    oracle soft memlock 2097152
    oracle hard memlock 2097152
    實際上,最好稍微比這個數值大一點。

    設置SHMMAX值
    對於32位架構,shmmax值應該設置為物理內存的一半,最大值為4294967295,對於一個有6G內存的服務器,我們可以作為root用戶使用下面的命令將這個值設為3G(物理內存的一半):
    echo 3221225472 > /proc/sys/kernel/shmmax
    另外還可以設置在/etc/sysctl.conf文件中:
    kernel.shmmax = 3221225472
    你的/etc/sysctl.conf文件看起來應該象下面這樣:
    kernel.shmmax = 3221225472
    kernel.shmmni = 4096
    kernel.shmall = 2097152
    kernel.sem = 1000 32000 100 150
    fs.file-max = 65536
    net.ipv4.ip_local_port_range = 1024 65000
    kernel.shm-use-bigpages = 2
    修改/etc/sysctl.conf文件後,使用下面的命令應用而無需重新啟動系統:
    /sbin/sysctl -p

    實例參數
    必須修改一些實例參數以允許oracle實例使用共享內存文件系統,在處於運行中的實例上可以使用alter system set命令或離線修改spfile文件操作spfile參數,:
    -- Change the parameter value in the spfile directly.
    ALTER SYSTEM SET parameter = value SCOPE=spfile

    -- Create a pfile with the contents of the current spfile.
    CREATE PFILE='/tmp/pfile' FROM SPFILE;

    -- Manually manipulate the contents of the pfile.

    -- Recreate the spfile from the amended pfile.
    CREATE SPFILE FROM PFILE='/tmp/pfile';
    下面的參數應該被添加到spfile或pfile中:
    use_indirect_data_buffers=true
    同時,所有涉及到db_cache_size和db_xK_cache的參數都應該被移除,使用舊版本風格的db_blcok_buffers參數條目代替:
    # 3Gig for an 8K db_block_size. ((3 * 1024 * 1024) / 8) = 393216
    db_block_buffers = 393216
    這意味著使用這種方法時多數據塊大小特征將不可用,記住高速緩存僅僅是SGA的一部分

Copyright © Linux教程網 All Rights Reserved