使用Oracle功能特性提高應用執行效率 (3)
PCTFREE的使用
在Oracle中表的每一行資料由唯一的ROWID標記;而Oracle支援的資料型別中有一些長度是可變的,如VARCHAR,當對這些資料進行UPDATE時,如果塊中的可用空間不能容納UPDATE後的資料行時,Oracle將會把此行移到其它資料塊,同時保留此資料行的ROWID不變,並在原有塊中建一指標指向行遷移後的位置。在這種情況下讀取一行資料將需要訪問2個資料塊,從而導致效能下降。PCTFREE保留的空間就是為確保更改後的資料行可以仍存放於原有資料塊中,避免行遷移的情況發生。
由此,如果PCTFREE設定不足時可能產生行遷移;而另一方面如果PCTFREE設定過高,將會造成空間浪費。因此正確設定PCTFREE需要對錶中資料的使用進行分析。對於資料長度不會變化或極少更新的情況,可以採用較小的PCTFREE;對於其它大多數情況應採用稍大的PCTFREE(PCTFREE的預設值是10,如果不好估計需預留的空間,可以使用15-25的範圍),不要為節約塊中的空間而使用較小的PCTFREE值。
PCTUSED的使用
當塊的使用的空間下降到PCTUSED後,此塊被重新放回空閒連結串列(Freelist)中,作為後續Insert的候選塊。同樣,設定PCTUSED需要視資料行的特性和Insert、Update、Delete的模式而定,但必須遵守的原則是:db_block_size * (100 - PCTFREE - PCTUSED)必須比行的長度大。
對於資料行長度變化較大的情況,應使用最大行長度來計算PCTUSED,並且應使用較低的PCTUSED值。因為在執行Insert時,如果資料塊的可用空間不能裝下一行資料,當塊的使用的空間是在PCTUSED之上,Oracle將把此塊從Freelist中移走;當塊的使用的空間是在PCTUSED之下,Oracle將會擴充套件段空間。因此,PCTUSED如果設得過高,將導致段的不斷擴充套件。
當資料行長度不大時,使用預設的PCTUSED(40)是比較合適的;對於行長度較大的情況,最長的行有可能會佔用半個以上的塊空間,此時可設定PCTUSED為10。較小的PCTUSED僅在表中的資料以隨機方式被刪除,而且仍有一些行長時間保留在塊中時,才會造成空間使用上的問題,因為這些塊可能需要較長的時間才能或永遠不能重新被用於存放新資料。在這種應用中,如果空間利用率一直處於較低水平,則需對PCTUSED進行分析和調整。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-238994/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle提高SQL執行效率的三種方法ITOracleSQL
- 【SQL】Oracle避免動態SQL,提高過程執行效率SQLOracle
- 在Oracle裡提高SQL執行效率的三種方法NQOracleSQL
- 提高codeing執行時間效率
- Windows下使用Graalvm將Springboot應用編譯成exe大大提高啟動和執行效率WindowsLVMSpring Boot編譯
- 提高程式碼的執行效率(1)
- 提高Python執行效率的5個技巧!Python
- 提高Python執行效率的5個小技巧!Python
- Python使用.NET開發的類庫來提高你的程式執行效率Python
- 手把手提高基礎程式碼執行效率
- 使用SAP BSP應用執行VueVue
- Java效能優化:教你提高程式碼執行的效率Java優化
- 教育RPA在教育行業的應用:切實提高教務人員效率行業
- 用 FutureBuilder 提高開發效率Rebuild
- 雲原生應用程式執行時 Kyma 的主要特性介紹
- 爬蟲筆記:提高資料採集效率!代理池和執行緒池的使用爬蟲筆記執行緒
- 使用 Traefik 提高 WebSocket 應用效能Web
- switch執行效率
- 如何提高使用Java反射的效率?Java反射
- 【IDEA】(3)---非常實用提高開發效率和水平的外掛Idea
- 使用多執行緒提高rest服務效能執行緒REST
- HarmonyOS:使用本地真機執行應用/服務
- MySQL8.0.27 新特性-提高二級索引的建立效率MySql索引
- 一通騷操作,我把SQL執行效率提高了10000000倍!SQL
- 測試人員如何提高API功能測試效率?API
- 有效利用Vim分屏功能提高工作效率
- Java新特性中的Preview功能如何執行和除錯JavaView除錯
- 【譯】使用 Source Link 提高除錯效率除錯
- 多執行緒應用執行緒
- 人人都應該知道的CPU快取執行效率快取
- 用行雲管家實現IT統一運維管理,提高運維效率運維
- 專案經理必備:如何透過管理工具提高執行效率?
- 提高 MongoDB 運維效率的實用技巧MongoDB運維
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- PyQt應用程式中的多執行緒:使用Qt還是Python執行緒?QT執行緒Python
- Oracle執行計劃Explain Plan 如何使用OracleAI
- oracle使用outline固定執行計劃事例Oracle
- 【OMF】使用Oracle的OMF 特性Oracle
- [ORACLE] SQL執行OracleSQL