1.實例與數據庫
實例(Instance):
- 數據庫啓動後在內存中的映像,管理數據庫正常運行;
- 在OS中以ORACLE_SID標識,在DB中以Instance_name標識;
- 組成:(System Global Area + Background Process);
查看實例名:
$ set | grep -i oracle_sid
SQL> show parameter instance_name
數據庫(Database):
- 實例所存取的一個數據庫文件的集合;
- 在DB中以db_name標識;
- 組成:(初始化參數文件,控制文件,數據文件,日誌文件等)
查看數據庫名:
SQL> show parameter db_name;
2.SGA(System Global Area)
SGA是一組包含着一個Oracle實例的數據庫和控制信息的共享內存結構。
- 是爲oracle系統分配的共享內存;
- 是實例的主要組成部分;
- 是影響數據庫性能的重要因素;
- 隨實例的啓動/關閉而被分配/回收;
- SGA自動對所包含的各種緩衝自動進行動態管理;
SGA主要包含6類緩存:
- db_buffer_cache
- shared_pool
- large_pool
- java_pool
- redo_log_buffer
- streams_pool
查看SGA:
SQL> show sga;
SQL> select * from v$sga;
SGA相關參數:
pre_page_sga:啓動時是否將全部SGA都綁定到物理內存,而不使用交換分區。
lock_sga:運行過程中是否也將全部SGA都綁定到物理內存,而不使用交換分區。
sga_max_size:SGA總大小上限值。
sga_target:啓用自動共享內存管理ASMM(Automatic Shared Memory Management),指定分配給db_buffer_cache、shared_pool、java_pool、large_pool這四項內存大小之和。
注意:sga_max_size可以改大,改小則受sga_target的限制。另外,sga_target應儘量接近sga_max_size。當sga_target小於sga_max_size時,上述指定的四項動態緩存合計值以sga_target爲實際上限。如果sga_target被修改爲大於sga_max_size的值或sga_max_size小於sga_target時,則數據庫在下次啓動時sga_max_size值會自動調整爲與sga_target值相等。
調整sga_target前,應先查看四項緩存默認值是否都0,若爲0表示可由ASSM在0到sga_target值所規定的區間內自動調整各緩存區大小。
查看:
SQL> show parameter db_cache_size;
SQL> show parameter shared_pool_size;
SQL> show parameter large_pool_size;
SQL> show parameter java_pool_size;
更改:
SQL> alter system set db_cache_size=0 scope=both/memory/spfile;
若某項緩存區大小默認設置不爲0,而爲某一具體值,代表ASMM在動態調整各緩存區時,該緩衝區不能分配低於該指定值的大小。
SGA內存按照顆粒度大小granule_size分配內存,若手工分配內存大小非整數倍於granule_size,則自動湊爲granule_size的整數倍大小,常見granule_size如下:
若SGA<1G,granule_size=4M;若SGA>1G,granule_size=8M(for WIN)或16M(for Other);redo_log_buffer以512K爲粒度分配內存。
查看SGA粒度大小:
SQL> select bytes from v$sgainfo where name='Granule Size';
相關操作:
SQL> show sga
Total System Global Area 201326592 bytes
Fixed Size 1218532 bytes
Variable Size 83888156 bytes
Database Buffers 113246208 bytes
Redo Buffers 2973696 bytes
Fixed Size 1218532 bytes
Variable Size 83888156 bytes
Database Buffers 113246208 bytes
Redo Buffers 2973696 bytes
- Fixed Size:固定值,包括一些開銷等其他空間大小。是shared pool內dictionary cache的一部分與其他部分附加內存信息(如數據庫和實例的狀態信息)會被實例的後臺進程所訪問,在實例啓動後即被固定在SGA中,是SGA中固定組件(在編譯oracle數據庫本身時就固定在其中),大小不變,故該部分緩存又稱爲固定SGA(Fixed SGA)。
- Variable Size:可用大小。爲sga_max_size-log_buffer-db_buffer_cache-fixed_size,剩下的包含Library cache、Java pool、Large pool、cursor area、control file content等緩存區大小。
- Database Buffers:db_buffer_cache實際大小。
- Redo Buffers:redo_buffer實際大小。
SQL> select current_size from v$buffer_pool; #查看data_buffer_cache實際大小(單位M)。
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看java pool, streams pool,shared pool,large pool實際大小。
SQL> alter system set sga_target=120M scope=both; #修改sga_target自動管理緩衝區合計值,在sga_max_size範圍內調整可動態生效。各緩存區大小也將自動調整以適應修改後的sga_target總值。
SQL> show parameter sga_targe;
SQL> select current_size from v$buffer_pool;
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看修改,可見已跟隨sga_target而變化,注意sga的值是granule的整數倍。
SQL> alter system set sga_target=400M scope=both;
alter system set sga_target=400M scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
alter system set sga_target=400M scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00823: Specified value of sga_target greater than sga_max_size
#若修改sga_target值大於sga_max_size,則sga_target只能作爲靜態參數修改:SQL> alter system set sga_target=400M scope=spfile;
SQL> alter system set sga_max_size=200M scope=spfile; #修改sga_max_size值,靜態參數,重啓生效。
SQL> alter system set large_pool_size=10M scope=memory; #修改制定緩衝區最小值。若想在ASMM管理下,爲某緩存區規定一個最小分配下限值(指示ASMM該區的分配不能低於該指定值),則可通過設定默認值來達到目的。
SQL> select pool,sum(bytes) from v$sgastat group by pool; #查看,可見修改已生效。
未完,待續。。。