ORACLE數據庫 memory_target SGA 大小
修改 memory_target
用oracle用戶登錄,
sqlplus "/as sysdba"
SQL> show parameters target;
show parameters spfile;
alter system set memory_max_target=4G scope=spfile;
alter system set memory_max_target=4G scope=both;
tmpfs /dev/shm tmpfs defaults,size=24G 0 0
-查看當前使用的哪個參數文件啟動的
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
FALSE
看第一個值是FALSE還是TRUE,如果是FALSE,則是pfile,否則則是spfile.
第一行為TRUE可知,是從spfile啟動的,
有兩行,其中第二行為FALSE,表示有兩個參數文件,一個是spfile,一個是pfile
最終:修改參數的方法:
先用 mount -o remount,size=16G tmpfs
(無論實際內存大小如何,上述命令都能成功,只是不知道內存太小,oracle是否真能啟動)
或類似 mount -t tmpfs -o remount,size=32G tmpfs /tmp(命令成功,但沒測試oracle啟動正常與否)
修改 tmpfs 大小,使oracle能夠啟動成功;
然後:
用oracle用戶lmoracle登錄,執行:
sqlplus "/as sysdba"
create pfile=‘/pb/lmoracle/a.txt‘ from memory;
如果oracle已經被正常啟動的情況下,可以得到一個保存所有參數的文件:/pb/lmoracle/a.txt
修改a.txt中的
memory_target=2G
為
memory_target=24G
在sqlplus中執行shutdown;
退出sqlplus,重新執行下面的命令進入sqlplus:
sqlplus "/as sysdba"
然後用修改後的參數文件啟動數據庫實例:
startup pfile=‘/pb/lmoracle/a.txt‘;
看一下參數:
show parameters target;
無誤後,
create spfile from memory;
這樣就把改好的參數文件保存到缺省的spfile中了。
重啟數據庫(或重啟機器)
----------------------------------------------------------------------------------------------
ORA-00845: MEMORY_TARGET not supported on this system報錯解決
Oracle 11g數據庫修改pfile參數後啟動數據庫報錯ora-00845
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
在oracle 11g中新增的內存自動管理的參數MEMORY_TARGET,
它能自動調整SGA和PGA,這個特性需要用到/dev/shm共享文件系統,
而且要求/dev/shm必須大於MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就會報錯
解決方案
1.初始化參數MEMORY_TARGET或MEMORY_MAX_TARGET不能大於共享內存(/dev/shm),為了解決這個問題,可以增大/dev/shm
如:
# mount -t tmpfs shmfs -o size=7g /dev/shm
2.為了確保操作系統重啟之後能生效,需要修改/etc/fstab文件
shmfs /dev/shm tmpfs size=7g 0
3.如果/dev/shm沒有掛載也會報上面的錯,所認需要確保已經掛載
[email protected] ~]$ df -h
tmpfs 16G 8.9G 7.2G 56% /dev/shm
下面為一次操作的記錄
[[email protected] ~]# cat /etc/fstab | grep tmpfs
tmpfs /dev/shm tmpfs defaults,size=8g 0 0
[root[email protected] ~]# mount -o remount,size=16G /dev/shm
[[email protected] ~]# cat /etc/fstab | grep tmpfs
tmpfs /dev/shm tmpfs defaults,size=8g 0 0
[[email protected] ~]# vi /etc/fstab
/dev/rootvg/LogVol02 / ext3 defaults 1 1
/dev/rootvg/LogVol01 /tmp ext3 defaults 1 2
/dev/rootvg/lvol0 /ebao ext3 defaults 1 2
/dev/rootvg/lvol1 /backup ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults,size=16g 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/rootvg/LogVol00 swap swap defaults 0 0
"/etc/fstab" 10L, 769C written
[[email protected] ~]# df -h|grep shm
tmpfs 16G 0 16G 0% /dev/shm
SQL> startup
ORACLE instance started.
Total System Global Area 9420095488 bytes
Fixed Size 2236248 bytes
Variable Size 2315255976 bytes
Database Buffers 7046430720 bytes
Redo Buffers 56172544 bytes
Database mounted.
Database opened.
SQL> exit
---------------------------------------------------------------------------
Oracle調整SGA大小
memory_max_target < shm 切記,否則Oracle實例將啟動失敗,
報 ORA-00845: MEMORY_TARGET not supported on this system 錯,點擊查看shm設置
------------------------------
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 512M
sga_target big integer 512M
SQL>
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
sql>alter system set memory_max_target = 15G scope=spfile;
sql>alter system set memory_target = 15G scope=spfile;
shutdown immediate
startup
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 15G
memory_target big integer 15G
shared_memory_address integer 0
---------------------------------------------------------------------------
如何修改oracle SGA大小
在正常情況下,查詢非常慢。
1、檢查SGA大小,以DBA身份連接到oracle數據庫,輸入show sga。
2、如果SGA過小,請修改其大小
修改SGA必須保持的原則:
1).sga_target不能大於sga_max_size,可以設置為相等。
2).SGA加上PGA等其他進程占用的內存總數必須小於操作系統的物理內存。
做如下操作前,必須備份dbs目錄下的所有文件。
方法一:直接SQL命令行修改:
(如果spfile文件不存在,需先創建create spfile from pfile;)
SQL>alter system set sga_max_size=1024m scope=spfile;
然後需要重啟數據庫
SQL>shutdown immediate
SQL>startup
SQL>show sga;即可看到SGA的大小已經被修改
重啟之後,再修改sga_target
SQL>alter system set sga_target=1024m scope=both;
------------------------------------------------------------------------
設置SGA的原則以及修改它的大小
一,設置SGA的原則:
有時候會碰到在配置SGA中出現了問題,由於分配的內存過多,數據庫啟不起來了。
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA:是用於存儲數據庫信息的內存區,該信息為數據庫進程所共享。它包含Oracle 服務器的數據和控制信息,它是在Oracle服務器所駐留的計算機的實際內存中得以分配,如果實際內存不夠再往虛擬內存中寫
我們重點就是設置SGA,理論上SGA可占OS系統物理內存的1/2——1/3
原則:SGA+PGA+OS使用內存 <總物理RAM
SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB
1、SGA系統全局區.(包括以下五個區)
A、數據緩沖區:(db_block_buffers)存儲由磁盤數據文件讀入的數據。
大小: db_block_buffers*db_block_size
Oracle9i設置數據緩沖區為:Db_cache_size
原則:SGA中主要設置對象,一般為可用內存40%。
B、共享池:(shared_pool_size):數據字典,sql緩沖,pl/sql語法分析.加大可提速度。
原則:SGA中主要設置對象,一般為可用內存10%
C、日誌緩沖區:(log_buffer)存儲數據庫的修改信息.
原則:128K ---- 1M 之間,不應該太大
D 、JAVA池(Java_pool_size)主要用於JAVA語言的開發.
原則:若不使用java,原則上不能小於20M,給30M通常就夠了
E、 大池(Large_pool_size) 如果不設置MTS,主要用於數據庫備份恢復管理器RMAN。
原則:若不使用MTS,5---- 10M 之間,不應該太大
SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原則: 達到可用內存的55-58%就可以了.
2、PGA程序全局區
PGA:包含單個服務器進程或單個後臺進程的數據和控制信息,
與幾個進程共享的SGA正相反PGA是只被一個進程使用的區域,PGA在創建進程時分配在終止進程時回收.
A、Sort_area_size 用於排序所占內存
B、Hash_area_size 用於散列聯接,位圖索引
這兩個參數在非MTS下都是屬於PGA ,不屬於SGA,是為每個session單獨分配的,在我們的服務器上除了OS + SGA,一定要考慮這兩部分
原則:OS 使用內存+SGA+並發執行進程數*(sort_area_size+hash_ara_size+2M) < 0.7*總內存
實例配置
一:物理內存多大
二:操作系統估計需要使用多少內存
三:數據庫是使用文件系統還是裸設備
四:有多少並發連接
五:應用是OLTP 類型還是OLAP 類型
基本掌握的原則是, db_block_buffer 通常可以盡可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了
例如:
內存2G 單個CPU db_block_size 是8192 bytes
SGA=0.55*2048M=1126.4M左右
建議 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M
具體: shared_pool_size=209715200 #200M
db_block_buffer=103192 #800M
log_buffer = 131072 # 128k (128K*CPU個數)
large_pool_size= 31457280 #30M
java_pool_size = 20971520 # 20 M
sort_area_size = 524288 # 512k (65k--2M)
sort_area_retained_size = 524288 # MTS 時 sort_area_retained_size = sort_area_size
二,修改SGA的大小:
1.sga_target不能大於sga_max_size,可以設置為相等。 2.SGA加上PGA等其他進程占用的內存總數必須小於操作系統的物理內存。
做如下操作前,必須備份dbs目錄下的所有文件。
方法一:直接SQL命令行修改:
SQL>alter system set sga_target=1024m scope=spfile;
SQL>alter system set sga_max_size=1024m scope=spfile;
(如果spfile文件不存在,需先創建createspfile from pfile;)
alter system set sga_target=12g scope=spfile;
alter system set sga_max_size=12g scope=spfile;
然後
SQL>shutdown immediate
SQL>startup
SQL>show sga; 即可看到SGA的大小已經被修改
方法二:通過EM修改:
以SYS登陸到EM:管理->(數據庫配置)所有初始化參數—>SPFile->
在此界面可以直接定義sga_target與sga_max_size
然後重啟數據庫即可!
----------------------------------------------------------------------
cmd下部分操作:,oracle10.2.0g
SQL>conn sys/rezin as sysdba
已連接。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
Oracle 例程已經關閉。
SQL> startup
oracle 例程已經啟動。
TotalSystem Global Area 1073741824 bytes
FixedSize 1253124 bytes
VariableSize 696254716 bytes
Database Buffers 369098752 bytes
RedoBuffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show sga;
TotalSystem Global Area 1073741824 bytes ---原來大小
FixedSize 1253124 bytes
VariableSize 696254716 bytes
Database Buffers 369098752 bytes
RedoBuffers 7135232 bytes
SQL> alter system set sga_target=300m scope=spfile;
系統已更改。
SQL>alter system set sga_max_size=280m scope=spfile;
系統已更改。
SQL>shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
TotalSystem Global Area 314572800 bytes ---修改後的大小
FixedSize 1248720 bytes
VariableSize 96469552 bytes
Database Buffers 209715200 bytes
RedoBuffers 7139328 bytes
數據庫裝載完畢。
數據庫已經打開。
-----------------------------------------------------------------
oracle 11g安裝後,無法登陸的問題(MEMORY_TARGET not supported on this system)
問題的解決:修改dev/shm的大小,具體和memory的對應關系大小可以參考oracle官方快速安裝教程中寫的設置
[[email protected] ~]$ sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 1 20:03:07 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
MEMORY_TARGET不知道在哪設置,根據網上資料,設置了系統參數,但依然無效
[[email protected] ~]# mount -o remount /dev/shm
[[email protected] ~]# df -h /dev/shm/
Filesystem Size Used Avail Use% Mounted on
shmfs 20G 0 20G 0% /dev/shm
想重啟數據庫也報錯~~~
SQL> shutdown immediate;
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
SQL> startup mount
ORA-00845: MEMORY_TARGET not supported on this system
(1)登陸orcl數據庫
SQLPLUS SYS/[email protected] AS SYSDBA
(2)設置內存大小
ALTER SYSTEM SET MEMROY_MAX_TARGET=500M SCOPE=SPFILE;(SCOPE=SPFILE表示寫如SPFILE文件,在數據庫重啟後生效)
(3) 設置自動分配的內存大小
ALTER SYSTEM SET MEMORY_TARGET = 500M SCOPE=SPFILE;(表示自動調節PGA和SGA的總大小為500M)
ALTER SYSTEM SET SGA_TARGET =0 SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET =0 SCOPE=SPFILE;
(4)關閉數據庫
SHUTDOWN IMMEDIATE
(5)重啟數據庫EXP1使配置生效
startup
按下面的方法搞定,假設你的實例名為orcl
在linux下執行:
1、cd $ORACLE_HOME/dbs
2、sqlplus / as sysdba
3、create pfile from spfile;
然後修改pfile裏面的內容,將memery_target修改為sga_target 和 pga_aggregate_target,一個256M,一個200M。
並去掉開始所有的orcl.的選項。
5、startup pfile=‘initorcl.ora‘
6、create spfile from pfile=‘initorcl.ora‘
7、startup force
MEMORY_TARGET 是 oracle database 11g 繼 10g 加入 sga_target 之後新加的一個內存自動管理參數,
參數嘛,當然是在 pfile 或 spfile 中設置啦。
*.memory_target=54087647232
應該是55G,於是我調整了
vi /etc/fstab--調整共享內存大小
mount /dev/shm--執行可用
df -h /dev/shm--驗證值為60G,
然後在oracle用戶下startup就把服務器啟動了。
備註:隨筆中內容來源於網上資料整理,僅供參考。
ORACLE數據庫 memory_target SGA 大小