Oracle性能优化 之 保留区与ORA-04031
一、保留区 没有被PIN住大对象的加载、老化将会使共享池产生碎片,Oracle想了个方法解决这个问题,它专门在共享池开辟一块区域,
一、保留区
没有被PIN住大对象的加载、老化将会使共享池产生碎片,Oracle想了个方法解决这个问题,它专门在共享池开辟一块区域,所有大小超过4400字节的对象,将在此专门开辟的区域中分配空间,这块区域被称为保留区。这样,让大对象和小对象分开存储,可以减少大对象的加载、老化以大量小对象产生的影响,并且可以减少小对象区域内的内存碎片。而且Oracle针对保留区设计了专门的内存管理算法,使得大对象可以更快速的加载。
你可以使用shared_pool_reserved_size参数设置此保留区的大小,,默认情况下,保留区将被自动设置为共享池大小的5%。另外,保留区大小不能设置为超过共享池大小的一半,否则将会报出错误。通常情况下,保留区的大小保留默认值就行,我们一般不需要调节它。
关于进入保留区对象的大小,Oracle更不建议我们调节它。但有时4400这个值对我们的系统可能并不合适。假设经常4000字节左右(不到4400)的对象被加载到共享池中,三、四千字节的对象,已经是大对象了,并且这些大对象很少使用,这样将它们PIN在内存中有点浪费空间,不到4400的大小使得它们无法被加载到保留区,这些对象每次执行时的加载需要老化很多小对象,并且还很容易造成共享池的碎片。这时,我们可以调低4400这个限制值,比如我们可以将保留区的限制降到3500,这样可以让那些本来不能进入保留区的对象可以进入保留区。这不旦可以加快这些对象的加载速度,重要的是减少了它们对众多小对象的影响。我们可以通过V$DB_ OBJECT_CACHE观察对象在共享池中所占用的内存大小,如果发现上述情况,可以调低4400这个限制值。这个限制是用一个隐藏参数来设置的:_shared_pool_reserved_min_alloc。凡是参数名前带有下划线的,都被称为隐藏参数,这些隐藏参数不能通过Show parameter显示,我们可以使用我写的脚本Show_para.sql显示隐藏参数和它们的意义,此脚本的编写见本章末尾的附录部分。
有一个视图可以用来帮助调节保留区:V$SHARED_POOL_RESERVED,它有如下的列:
FREE_SPACE:保留区中自由空间的总和
AVG_FREE_SIZE:每个自由内存块的平均大小
FREE_COUNT:自由的内存块数量
MAX_FREE_SIZE:最大的自由内存块大小
USED_SPACE:保留区中已使用的空间大小
AVG_USED_SIZE:每个已经使用的内存块的平均大小
USED_COUNT:已使用的内存块数量
MAX_USED_SIZE:已使用的最大的内存块大小
REQUESTS:在保留区中搜索自由内存块的次数
REQUEST_MISSES:保留区中没有可以满足要求的内存块并开始在保留区中LRU链中刷新对象的次数
LAST_MISS_SIZE:最后一次出现REQUEST_MISSES时,所请求的空间大小
MAX_MISS_SIZE:最大一次出现REQUEST_MISSES时,所请求的空间大小
下面的列即使SHARED_POOL_RESERVED_SIZE没有被设置也是有效的:
REQUEST_FAILURES:无论保留区还是非保留区,没有可以满足要求的内存的次数(也就是ORA-4031错误发生的次数)
LAST_FAILURE_SIZE:最后一次REQUEST_FAILURES时所请求的内存大小
后三列相关DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD过程。
ABORTED_REQUEST_THRESHOLD:最小的超过DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD设置值的大小
ABORTED_REQUESTS:超过DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD的次数
LAST_ABORTED_SIZE:最后一次超过DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD时的大小。
注意,如果REQUEST_FAILURES大于0且持续增加时,说明用户要求大小为N的内存块,但共享池内已经没有大小超过N的内存块。当REQUEST_FAILURES增加的比较快时,用户的操作将会失败并收到著名的ORA-04031错误,就是“共享池内存不足”,通常还有一句“不能申请大于N字节的内存块”。
造成这种情况有三种原因,一是内存的确不足了,这个时候你要增加内存。二是共享池中还有内存,但都是小块,没有大小超过N字节的内存块以满足用户的请求,也就是说内存中有碎片了。关于共享池内存碎片的解决方法,我们马上就说。再来看第三种情况,三是共享池中还有内存,但因为保留区设置的不合理,用户要在普通区中请求内存(用户请求的内存大小未超过4400),而普通区中已经没有自由内存了,但保留区中还有很多空闲。或者情况相反,用户在保留区中请求内存,保留区内存已经不足,但普通区中仍有大量内存空余。
当4031错误出现时,你的情况是否属于第三种―――保留设置不合理,可以通过本节所介绍的视图得知。下面我们分别介绍一下普通区空间不足和保留区空间不足这两种情况的监测和解决:
(一) 、普通区内存空间不足:
REQUEST_FAILURES不为0且持续增加时,如果LAST_FAILURE_SIZE
FREE_SPACE:保留区中自由空间的总和
AVG_FREE_SIZE:每个自由内存块的平均大小
FREE_COUNT:自由的内存块数量
MAX_FREE_SIZE:最大的自由内存块大小
USED_SPACE:保留区中已使用的空间大小
AVG_USED_SIZE:每个已经使用的内存块的平均大小
USED_COUNT:已使用的内存块数量
MAX_USED_SIZE:已使用的最大的内存块大小
如果FREE_SPACE显示的自由空间还有很多,就说明保留区中仍有大量空间,完全可以将_SHARED_POOL_RESERVED_MIN_ALLOC设置的小一些,或减少保留区所占内存。
如果保留区中空间也不是太足了,就需要检查共享池中是否碎片太多,如果不是碎片的问题,就只有增大共享池大小了。关于碎片我们马上就讨论。
(二) 、保留区空间不足
当REQUEST_FAILURES不为0且持续增加时,LAST_FAILURE_SIZE > _SHARED_POOL_RESERVED_MIN_ALLOC,就说明用户所请求的内存要在保留区中分配,而保留区这时的空间已经不足已满足用户的请求了。
这时我们可以加大_SHARED_POOL_RESERVED_MIN_ALLOC的限制值,减少进入保留区的对象数。将SHARED_POOL_RESERVED_SIZE参数的值设大一些,以增加保留区大小。当然,如果你的主机上仍有空余内存,也可以增大共享池内存大小。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。

MySQL支持四種索引類型:B-Tree、Hash、Full-text和Spatial。 1.B-Tree索引適用於等值查找、範圍查詢和排序。 2.Hash索引適用於等值查找,但不支持範圍查詢和排序。 3.Full-text索引用於全文搜索,適合處理大量文本數據。 4.Spatial索引用於地理空間數據查詢,適用於GIS應用。
