shared_pool——解決ORA-4031錯誤
~]$ oerr ora 4031
04031, 00000, "unable to allocate %s bytes of shared memory (\"%s\",\"%s\",\"%s\",\"%s\")"
// *Cause: More shared memory is needed than was allocated in the shared
// pool.
// *Action: If the shared pool is out of memory, either use the
// dbms_shared_pool package to pin large packages,
// reduce your use of shared memory, or increase the amount of
// available shared memory by increasing the value of the
// INIT.ORA parameters "shared_pool_reserved_size" and
// "shared_pool_size".
// If the large pool is out of memory, increase the INIT.ORA
// parameter "large_pool_size".
04031, 00000, "unable to allocate %s bytes of shared memory (\"%s\",\"%s\",\"%s\",\"%s\")"
// *Cause: More shared memory is needed than was allocated in the shared
// pool.
// *Action: If the shared pool is out of memory, either use the
// dbms_shared_pool package to pin large packages,
// reduce your use of shared memory, or increase the amount of
// available shared memory by increasing the value of the
// INIT.ORA parameters "shared_pool_reserved_size" and
// "shared_pool_size".
// If the large pool is out of memory, increase the INIT.ORA
// parameter "large_pool_size".
產生ORA-4031的原因:shared pool不夠用
可能由於:1、硬解析太多
2、大SQL
解決方法:
1、alter system flush shared_pool; 不能從根本上解決
說明:執行後會把library cache、row cache所有內容清空,
全部塊都回到free中
接下來會產生大量的硬解析
接下來會產生大量的硬解析
2、使用共享sql
a、使用繫結變數
b、統一書寫風格
3、將常見物件到共享池keep到shared pool中
select * from v$db_object_cache where sharable_mem >1000
and (type='PACKAGE' or type='PACKAGE BODY' or type='FUNCTION' or type='PROCEDURE') and kept='NO';
and (type='PACKAGE' or type='PACKAGE BODY' or type='FUNCTION' or type='PROCEDURE') and kept='NO';
--查詢消耗記憶體量大於1000的物件
執行dbms_shared_pool.keep('物件名'); 強行快取到sql裡面
DBMS_SHARED_POOL
@?/rdbms/admin/dbmspool.sql
執行dbms_shared_pool.keep('物件名'); 強行快取到sql裡面
DBMS_SHARED_POOL
@?/rdbms/admin/dbmspool.sql
4、保留區
預設大小是共享池的5%。
它的大小可以透過引數SHARED_POOL_RESERVED_SIZE 來調整
Shared Pool 中記憶體大於4400 位元組的SQL就會被存放在共享池的保留部分。而這個大小限制是透過隱含參_SHARED_POOL_RESERVED_MIN_ALLOC 來設定的(隱含引數不要去修改它)
select REQUEST_MISSES from v$shared_pool_reserved;
--保留區中請求失敗的次數,不為0,就意味著產生4031錯誤
增大shared_pool_reserved_size的值
select REQUEST_MISSES from v$shared_pool_reserved;
--保留區中請求失敗的次數,不為0,就意味著產生4031錯誤
增大shared_pool_reserved_size的值
5、增加shared pool空間
select COMPONENT,CURRENT_SIZE from V$SGA_DYNAMIC_COMPONENTS; 實際shared pool的大小
show parameter sga_target
show parameter sga_max_size 限制sga_tartget的最大值
alter system set shared_pool_size=150M scope=both; 若set小於oracle分配的值,會保留oracel欄位分配的值
select COMPONENT,CURRENT_SIZE from V$SGA_DYNAMIC_COMPONENTS; 實際shared pool的大小
show parameter sga_target
show parameter sga_max_size 限制sga_tartget的最大值
alter system set shared_pool_size=150M scope=both; 若set小於oracle分配的值,會保留oracel欄位分配的值
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27000195/viewspace-741060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過記憶體鎖定,解決ORA-4031錯誤記憶體
- ORA-4031解決思路
- Ocelot錯誤解決
- Oracle ORA-4031解決思路Oracle
- VIM 常用錯誤解決
- sqldeveloper for windows 錯誤解決SQLDeveloperWindows
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- oracle 10g expdp匯出報錯ora-4031的解決方法Oracle 10g
- latex 錯誤以及解決方案
- ora-27504錯誤解決
- Datastore error in 'dirbdb'錯誤解決ASTError
- ORA-27054 錯誤解決
- mysql與php錯誤解決MySqlPHP
- mysql錯誤解決總結MySql
- PbootCMS 404 錯誤解決方法boot
- 【故障解決】OGG-00446 錯誤解決
- dbfread報錯ValueError錯誤解決方法Error
- INTERVAL分割槽插入大量資料導致ORA-4031錯誤
- 【故障解決】ORA-06502錯誤解決
- HTTP 錯誤 500.19- Internal Server Error 錯誤解決方法HTTPServerError
- dns錯誤怎麼辦 dns錯誤的解決辦法DNS
- HTTP代理錯誤怎麼解決?HTTP
- undefined reference to錯誤的解決方法Undefined
- SAXParseException的錯誤解決之二Exception
- PHP curl error 60 錯誤解決PHPError
- ORA-04091錯誤解決
- ORA-3136 錯誤解決 .
- [Windows] 解決 COM Surrogate 錯誤提示Windows
- AFNetworkingErrorDomain 錯誤解決方法ErrorAI
- [Flashback]ORA-38760錯誤解決
- EXP-00091錯誤解決
- virtualbox 錯誤解決記錄
- INS-40904 錯誤解決
- Mac下面svn錯誤資訊解決Mac
- PHP錯誤“Thisfilehasexpired”的解決方法PHP
- SAP錯誤提示解決辦法
- ClamAV無法更新錯誤解決
- clamd socket找不到錯誤解決