ASMM机制涉及的一对参数为: SGA_TARGET和SGA_MAX_SIZE 。 SGA_TARGET Default value 0 (SGA autotuning is disabled for DEFERRED mode autotuning requests, but allowed for IMMEDIATE mode autotuning requests) Modifiable ALTER SYSTEM (即表示该参数
ASMM机制涉及的一对参数为:SGA_TARGET和SGA_MAX_SIZE。
SGA_TARGET
Default value |
0 (SGA autotuning is disabled forDEFERRED mode autotuning requests, but allowed forIMMEDIATE mode autotuning requests) |
---|---|
Modifiable | ALTER SYSTEM<code>(即表示该参数为动态参数) |
Range of values | 64 MB to operating system-dependent |
参见:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams236.htm#I1010256
SGA_MAX_SIZE
Default value | Initial size of SGA at startup, dependent on the sizes of different pools in the SGA, such as buffer cache, shared pool, large pool, and so on. |
---|---|
Modifiable | No(即表示该参数为静态参数)
|
Range of values | 0 to operating system-dependent |
On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET
orMEMORY_MAX_TARGET
is specified, the default value ofSGA_MAX_SIZE
is set to the larger of the two parameters. This causes more address
space to be reserved for expansion of the SGA.
On Windows 32-bit platforms, the default value of SGA_MAX_SIZE
is the largest of the following values:
-
60% of
MEMORY_TARGET
, if specified -
60% of
MEMORY_MAX_TARGET
, if specified -
25% of the total available virtual address space
参见:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams235.htm
上述描述可知,
1、当SGA_TARGET=非0时,SGA_TARGET要在64 MB to operating system-dependent这个范围内,确切说是,SGA_TARGET要在64 MB to<span>SGA_MAX_SIZE</span>。
2、
由于SGA_TARGET始终SGA_MAX_SIZE,所以
当SGA_TARGET=0时,<span>SGA_MAX_SIZE</span>
取值范围为0 to<span>SGA_MAX_SIZE</span>。
当SGA_TARGET=非0时,SGA_TARGET要在64 MB to<span>SGA_MAX_SIZE</span>这个范围内,故而<span>SGA_MAX_SIZE</span>
取值范围为64
MB to operating system-dependent。
说明了SGA_TARGET要SGA_MAX_SIZE的例子,参见下文一大点里1.2的例子。
这里还有一点要知道,sga_max_size可以自动来变动的(sga_max_size自动变动值,无论在实例启动时,还是实例运行期间,都可以;而alter system setsga_max_size只能在实例启动时起效,因为sga_max_size是静态参数),当sga的内存组件的和小于sga_max_size的时候,sga_max_size不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值,这个你可以自己试试。例如,
我现在想调整database buffer的值到1G,我只需要设置db_cache_size到1G,而不设置sga_max_size,这时由于各组件值大于sga_max_size目前值,所以sga_max_size自动变化:
SQL>alter system set db_cache_size=1000Mscope=spfile;
SQL> shutdown immediate;
SQL> startup;
看看现在的内存信息
Total System Global Area 1301357848 bytes
Fixed Size 455960 bytes
Variable Size 251658240 bytes
Database Buffers 1048576000 bytes
Redo Buffers 667648 bytes
发现sga_max_size已经自动变化
SQL> show parameters sga_
NAME TYPE VALUE
———————————— ——————————— ———
sga_max_size big integer 130135784
也已经变化叻。
【
参见:
http://blog.csdn.net/haiross/article/details/41696485
为什么会出现这样的问题叻,是因为在32位的机器上Oracle的内存有限制,内存最大4G,32位留50%给操作系统,window是单线程的,不能超过1.7G。out of memory也就出来叻。
SGA不能超过1.7G的限制
在Windows上调整SGA大小遭遇ORA-27100、ORA-27102错误的处理方法】
当实例启动前的参数里sga_max_size=0,sga_target=0时,实例启动后sga_max_size值也会自动调整,详见下文一大点里的2.2例子。
那么sga_max_size值自动调整时,该参数的值具体为多少,是什么决定呢?
是由sga_max_size的默认值:
Default value :Initial size of SGA at startup, dependent on the sizes of different pools in the SGA, such as buffer cache, shared pool, large pool, and so on。也就是说
SGA_MAX_SIZE 的 Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default
value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
具体的说是,
On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET
orMEMORY_MAX_TARGET
is specified, the default value ofSGA_MAX_SIZE
is set to the larger of the two parameters. This causes more address
space to be reserved for expansion of the SGA.
On Windows 32-bit platforms, the default value of SGA_MAX_SIZE
is the largest of the following values:
-
60% of
MEMORY_TARGET
, if specified -
60% of
MEMORY_MAX_TARGET
, if specified -
25% of the total available virtual address space
实例运行期间的SGA_MAX_SIZE都是一个非0值,因为SGA_MAX_SIZE是一个静态参数,所以实例运行期间将SGA_MAX_SIZE置为0,但是修改后的值不会立马起效,只有待下一次实例启动时才起效,而待下一次实例启动时如上所说实例启动时SGA_MAX_SIZE还是会从0被调整为一个非0值。详见下文一大点里的2.2例子。
参数默认值不一定就是参数的初始化值:
SGA_MAX_SIZE Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
参见盖国强 《深入解析oracle》 第二章 参数分类
SGA_TARGET和SGA_MAX_SIZE两者关系为
0、SGA_TARGET始终SGA_MAX_SIZE。
否则,会提示
ORA-00823: Specified value ofsga_target greater than sga_max_size。
一、
当AMM启动时,即memory_target=非0
If Automatic Memory Management is enabled (MEMORY_TARGET
is set to a positive value) andSGA_TARGET
is also set to a positive value, theSGA_TARGET
value acts as the minimum value for the size of the SGA.
以下实验时参数文件里MEMORY_TARGET=非0,MEMORY_MAX_TARGET=非0。
1、当SGA_TARGET=非0时(即ASMM启动时)
1.1
当参数文件里SGA_TARGET=非0,<span>SGA_MAX_SIZE</span>=非0时,实例启动成功。
1.2
当参数文件里SGA_TARGET=非0,<span>SGA_MAX_SIZE</span>=0时,实例启动不成功。
下面是具体实验来证明:
参数文件里:
*.memory_max_target= 700M
*.memory_target=700M
*.sga_max_size=0
*.sga_target=400M
*.pga_aggregate_target=100M
SQL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL>startup pfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORA-00823: Specified value of sga_target greater than sga_max_size
ORA-01078:处理系统参数失败
SQL>
注释:
对比memory_max_target和memory_target关系不同点在于:
当MEMORY_TARGET=非0,MEMORY_MAX_TARGET=0时,启动实例后MEMORY_MAX_TARGET=MEMORY_TARGET值。2、当SGA_TARGET=0时(即ASMM关闭时)
2.1
当参数文件里SGA_TARGET=0,<span>SGA_MAX_SIZE</span>=非0时,实例启动成功。
注释:
memory_target=0时sga_ target可以为0是因为memory_target=0时sga_ target为0,表示sga为手动管理,即由shared_pool_size参数等之和为sga大小。
2.2
当参数文件里SGA_TARGET=0,<span>SGA_MAX_SIZE</span>=0时,实例启动成功。
启动实例成功后,查看SGA_TARGET和<span>SGA_MAX_SIZE</span>(使用showparameters
sga或是select * from v$parameter where name like '%sga%';),发现<span>SGA_MAX_SIZE</span>被调整为一个非0值。
以如下参数文件来启动实例:
memory_target=0,memory_max_target=1400M,
pga_aggregate_target 为0,workarea_size_policy=manual,
sga_max_size=0,sga_target=0
则可以启动实例成功。
SQL> select name,value from v$parameter where name like '%target%' orname like
'%sga%';
NAME VALUE
------------------------ --------------------------------------------------------
sga_max_size 150994944
pre_page_sga FALSE
lock_sga FALSE
sga_target 0
memory_target 0
memory_max_target 1468006400
archive_lag_target 0
fast_start_io_target 0
fast_start_mttr_target 0
db_flashback_retention_target 1440
pga_aggregate_target 0
parallel_servers_target 32
已选择12行。
注释:
为什么启动实例时SGA_MAX_SIZE会从0被调整为一个非0值呢?
sga_max_size可以自动来变动的(sga_max_size自动变动值,无论在实例启动时,还是实例运行期间,都可以;而alter system setsga_max_size只能在实例启动时起效,因为sga_max_size是静态参数),当sga的内存组件的和小于sga_max_size的时候,sga_max_size不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值。
那么sga_max_size值自动调整时,该参数的值具体为多少,是什么决定呢?
是由sga_max_size的默认值。SGA_MAX_SIZE Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
所以,实例启动前的参数文件即使设置了SGA_MAX_SIZE=0,实例启动时SGA_MAX_SIZE也会从0被调整为一个非0值。
故而我们可以知道实例运行期间的SGA_MAX_SIZE都是一个非0值,因为SGA_MAX_SIZE是一个静态参数,所以实例运行期间将SGA_MAX_SIZE置为0,但是修改后的值不会立马起效,只有待下一次实例启动时才起效,而待下一次实例启动时如上所说实例启动时SGA_MAX_SIZE还是会从0被调整为一个非0值。
二、
当AMM关闭时,即memory_target=0
2、当MEMORY_TARGET=0时(即AMM关闭时)
2.1
当参数文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=非0时,实例启动成功。
实例启动后,查看MEMORY_TARGET和MEMORY_MAX_TARGET都为原值(使用showparameters mem或是select * from v$parameter where name like '%mem%';)。即If you omit the line for MEMORY_TARGET
and include a value forMEMORY_MAX_TARGET
, theMEMORY_TARGET
parameter defaults to zero. After startup, you can then dynamically changeMEMORY_TARGET
to a nonzero value, provided that it does not exceed the value ofMEMORY_MAX_TARGET
.(文章详解)
2.2
当参数文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=0时,实例启动成功。
实例启动后,查看MEMORY_TARGET和MEMORY_MAX_TARGET(使用showparameters mem或是select * from v$parameter where name like '%mem%';),发现MEMORY_MAX_TARGET被调整为一个非0值。下面是具体实验来证明:
三、
AMM关闭时(即memory_target=0),才会出现ORA-00849:SGA_TARGET
524288000 cannot be set to more than MEMORY_MAX_TARGET 0.无论是sga_target>memory_max_target还是sga_max_size>memory_max_target。当sga_max_size>memory_max_target时,即使此时sga_target也>memory_max_target,ORA-00849里的SGA_TARGET值还是来自sga_max_size。
附加
sga_max_size是静态参数,所以它即使在实例运行期间修改的值也要在下次启动时起作用,故而不用试验sga_max_size静态参数在实例运行期间修改对sga_target影响。

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL值得學習,因為它是強大的開源數據庫管理系統,適用於數據存儲、管理和分析。 1)MySQL是關係型數據庫,使用SQL操作數據,適合結構化數據管理。 2)SQL語言是與MySQL交互的關鍵,支持CRUD操作。 3)MySQL的工作原理包括客戶端/服務器架構、存儲引擎和查詢優化器。 4)基本用法包括創建數據庫和表,高級用法涉及使用JOIN連接表。 5)常見錯誤包括語法錯誤和權限問題,調試技巧包括檢查語法和使用EXPLAIN命令。 6)性能優化涉及使用索引、優化SQL語句和定期維護數據庫。

MySQL適合初學者學習數據庫技能。 1.安裝MySQL服務器和客戶端工具。 2.理解基本SQL查詢,如SELECT。 3.掌握數據操作:創建表、插入、更新、刪除數據。 4.學習高級技巧:子查詢和窗口函數。 5.調試和優化:檢查語法、使用索引、避免SELECT*,並使用LIMIT。

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

SQL用於與MySQL數據庫交互,實現數據的增、刪、改、查及數據庫設計。 1)SQL通過SELECT、INSERT、UPDATE、DELETE語句進行數據操作;2)使用CREATE、ALTER、DROP語句進行數據庫設計和管理;3)複雜查詢和數據分析通過SQL實現,提升業務決策效率。

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器