SGA_TARGET
生活随笔
收集整理的這篇文章主要介紹了
SGA_TARGET
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這里要介紹的時(shí)Oracle10g中引入的一個(gè)非常重要的參數(shù)。在10g之前,SGA的各個(gè)內(nèi)存區(qū)的大小都需要通過各自的參數(shù)指定,并且都無法超過參數(shù)指定大小的值,盡管他們之和可能并沒有達(dá)到SGA的最大限制。此外,一旦分配后,各個(gè)區(qū)的內(nèi)存只能給本區(qū)使用,相互之間是不能共享的。拿SGA中兩個(gè)最重要的內(nèi)存區(qū)Buffer Cache和Shared Pool來說,它們兩個(gè)對(duì)實(shí)例的性能影響最大,但是就有這樣的矛盾存在:在內(nèi)存資源有限的情況下,某些時(shí)候數(shù)據(jù)被cache的需求非常大,為了提高buffer hit,就需要增加Buffer Cache,但由于SGA有限,只能從其他區(qū)“搶”過來——如縮小Shared Pool,增加Buffer Cache;而有時(shí)又有大塊的PLSQL代碼被解析駐入內(nèi)存中,導(dǎo)致Shared Pool不足,甚至出現(xiàn)4031錯(cuò)誤,又需要擴(kuò)大Shared Pool,這時(shí)可能又需要人為干預(yù),從Buffer Cache中將內(nèi)存奪回來。
有了這個(gè)新的特性后,SGA中的這種內(nèi)存矛盾就迎刃而解了。這一特性被稱為自動(dòng)共享內(nèi)存管理(Automatic Shared Memory Management ASMM)。而控制這一特性的,也就僅僅是這一個(gè)參數(shù)SGA_TARGET。設(shè)置這個(gè)參數(shù)后,你就不需要為每個(gè)內(nèi)存區(qū)來指定大小了。SGA_TARGET指定了SGA可以使用的最大內(nèi)存大小,而SGA中各個(gè)內(nèi)存的大小由Oracle自行控制,不需要人為指定。Oracle可以隨時(shí)調(diào)節(jié)各個(gè)區(qū)域的大小,使之達(dá)到系統(tǒng)性能最佳狀態(tài)的個(gè)最合理大小,并且控制他們之和在SGA_TARGET指定的值之內(nèi)。一旦給SGA_TARGET指定值后(默認(rèn)為0,即沒有啟動(dòng)ASMM),就自動(dòng)啟動(dòng)了ASMM特性。
設(shè)置了SGA_TARGET后,以下的SGA內(nèi)存區(qū)就可以由ASMM來自動(dòng)調(diào)整:
?? ? ? ? 共享池(Shared Pool)
?? ? ? ? Java池(Java Pool)
?? ? ? ? 大池(Large Pool)
?? ? ? ? 數(shù)據(jù)緩存區(qū)(Buffer Cache)
?? ? ? ? 流池(Streams Pool)
對(duì)于SGA_TARGET的限制,它的大小是不能超過SGA_MAX_SIZE的大小的。
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 276M
SQL>
SQL>
SQL>
SQL> alter system set sga_target=280M;
alter system set sga_target=280M
*
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
另外,當(dāng)指定SGA_TARGET小于SGA_MAX_SIZE,實(shí)例重啟后,SGA_MAX_SIZE就自動(dòng)變?yōu)楹蚐GA_TARGET一樣的值了。
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 276M
SQL> alter system set sga_target=252M;
System altered.
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 252M
SQL> startup force
ORACLE instance started.
Total System Global Area??264241152 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1248428 bytes
Variable Size? ?? ?? ?? ? 117441364 bytes
Database Buffers? ?? ?? ? 138412032 bytes
Redo Buffers? ?? ?? ?? ?? ? 7139328 bytes
Database mounted.
Database opened.
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 252M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 252M
SQL>
對(duì)于SGA_TARGET,還有重要一點(diǎn)就是,它的值可以動(dòng)態(tài)修改(在SGA_MAX_SIZE范圍內(nèi))。在10g之前,如果需要修改SGA的大小(即修改SGA_MAX_SIZE的值)需要重啟實(shí)例才能生效。當(dāng)然,在10g中,修改SGA_MAX_SIZE的值還是需要重啟的。但是有了SGA_TARGET后,可以將SGA_MAX_SIZE設(shè)置偏大,再根據(jù)實(shí)際需要調(diào)整SGA_TARGET的值(我個(gè)人不推薦頻繁修改SGA的大小,SGA_TARGET在實(shí)例啟動(dòng)時(shí)設(shè)置好,以后不要再修改)。
SGA_TARGET帶來一個(gè)重要的好處就是,能使SGA的利用率達(dá)到最佳,從而節(jié)省內(nèi)存成本。因?yàn)锳SMM啟動(dòng)后,Oracle會(huì)自動(dòng)根據(jù)需要調(diào)整各個(gè)區(qū)域的大小,大大減少了某些區(qū)域內(nèi)存緊張,而某些區(qū)域又有內(nèi)存空閑的矛盾情況出現(xiàn)。這也同時(shí)大大降低了出現(xiàn)4031錯(cuò)誤的幾率。
有了這個(gè)新的特性后,SGA中的這種內(nèi)存矛盾就迎刃而解了。這一特性被稱為自動(dòng)共享內(nèi)存管理(Automatic Shared Memory Management ASMM)。而控制這一特性的,也就僅僅是這一個(gè)參數(shù)SGA_TARGET。設(shè)置這個(gè)參數(shù)后,你就不需要為每個(gè)內(nèi)存區(qū)來指定大小了。SGA_TARGET指定了SGA可以使用的最大內(nèi)存大小,而SGA中各個(gè)內(nèi)存的大小由Oracle自行控制,不需要人為指定。Oracle可以隨時(shí)調(diào)節(jié)各個(gè)區(qū)域的大小,使之達(dá)到系統(tǒng)性能最佳狀態(tài)的個(gè)最合理大小,并且控制他們之和在SGA_TARGET指定的值之內(nèi)。一旦給SGA_TARGET指定值后(默認(rèn)為0,即沒有啟動(dòng)ASMM),就自動(dòng)啟動(dòng)了ASMM特性。
設(shè)置了SGA_TARGET后,以下的SGA內(nèi)存區(qū)就可以由ASMM來自動(dòng)調(diào)整:
?? ? ? ? 共享池(Shared Pool)
?? ? ? ? Java池(Java Pool)
?? ? ? ? 大池(Large Pool)
?? ? ? ? 數(shù)據(jù)緩存區(qū)(Buffer Cache)
?? ? ? ? 流池(Streams Pool)
對(duì)于SGA_TARGET的限制,它的大小是不能超過SGA_MAX_SIZE的大小的。
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 276M
SQL>
SQL>
SQL>
SQL> alter system set sga_target=280M;
alter system set sga_target=280M
*
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
另外,當(dāng)指定SGA_TARGET小于SGA_MAX_SIZE,實(shí)例重啟后,SGA_MAX_SIZE就自動(dòng)變?yōu)楹蚐GA_TARGET一樣的值了。
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 276M
SQL> alter system set sga_target=252M;
System altered.
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 276M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 252M
SQL> startup force
ORACLE instance started.
Total System Global Area??264241152 bytes
Fixed Size? ?? ?? ?? ?? ?? ?1248428 bytes
Variable Size? ?? ?? ?? ? 117441364 bytes
Database Buffers? ?? ?? ? 138412032 bytes
Redo Buffers? ?? ?? ?? ?? ? 7139328 bytes
Database mounted.
Database opened.
SQL> show parameter sga
NAME? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?TYPE? ?? ???VALUE
------------------------------------ ----------- ------------------------------
lock_sga? ?? ?? ?? ?? ?? ?? ?? ?? ???boolean? ???FALSE
pre_page_sga? ?? ?? ?? ?? ?? ?? ?? ? boolean? ???FALSE
sga_max_size? ?? ?? ?? ?? ?? ?? ?? ? big integer 252M
sga_target? ?? ?? ?? ?? ?? ?? ?? ?? ?big integer 252M
SQL>
對(duì)于SGA_TARGET,還有重要一點(diǎn)就是,它的值可以動(dòng)態(tài)修改(在SGA_MAX_SIZE范圍內(nèi))。在10g之前,如果需要修改SGA的大小(即修改SGA_MAX_SIZE的值)需要重啟實(shí)例才能生效。當(dāng)然,在10g中,修改SGA_MAX_SIZE的值還是需要重啟的。但是有了SGA_TARGET后,可以將SGA_MAX_SIZE設(shè)置偏大,再根據(jù)實(shí)際需要調(diào)整SGA_TARGET的值(我個(gè)人不推薦頻繁修改SGA的大小,SGA_TARGET在實(shí)例啟動(dòng)時(shí)設(shè)置好,以后不要再修改)。
SGA_TARGET帶來一個(gè)重要的好處就是,能使SGA的利用率達(dá)到最佳,從而節(jié)省內(nèi)存成本。因?yàn)锳SMM啟動(dòng)后,Oracle會(huì)自動(dòng)根據(jù)需要調(diào)整各個(gè)區(qū)域的大小,大大減少了某些區(qū)域內(nèi)存緊張,而某些區(qū)域又有內(nèi)存空閑的矛盾情況出現(xiàn)。這也同時(shí)大大降低了出現(xiàn)4031錯(cuò)誤的幾率。
總結(jié)
以上是生活随笔為你收集整理的SGA_TARGET的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux平台及windows平台mys
- 下一篇: 测试工具:Windows下超强日志工具B