隨著數據庫管理員在自調整工作方面變得更加成熟
許多 Oracle 規格可能變為自調整
在 Oracle Database
g 中
我們將看到比以前更多的自調整功能
例如
Oracle Database
g 的動態內存分配特性使得創建一個自調整的 Oracle SGA 成為可能
通過演示
在本文中我將說明如何檢查 Oracle
i Database 中的 Oracle 例程
以及根據服務器上和數據庫內的處理需求來調整 sort_area_size 或 pga_aggregate_target
large_pool_size
sga_max_size 和 db_cache_size 的內存區域
這裡討論的技巧的基礎是使用 Statspack 來隨時監控內存區域並顯示系統資源利用率的信號圖
我還將討論如何創建一種智能機制
以根據當前的處理需求來自動地重新配置 Oracle
i Database
並提供了示例代碼
這些示例代碼將使您能夠開始編寫自己的能夠有效地仿效 Oracle Database
g 功能的自動化腳本
例如
我將提供一個腳本
它將自動識別小型
常用的程序段
並將它們分配給 KEEP 池
以全部進行緩存
(重要注意事項
這種仿效僅考慮外部的行為
但不反映新版本的內部實施
)因為每個數據庫都各不相同
所以為了清楚起見
這些腳本特意進行了省略和簡化
因此
您將需要擴展這些示例並編寫適合您的環境的自定義的自動化腳本
具有以下特性的商店將從自動化的自調整中最大程度的獲益
雙模式系統 — 在在線事務處理 (OLTP) 和數據倉庫處理模式之間轉換的系統尤其將從自調整 RAM 區域中獲益
位的商店 — 運行
位服務器的商店受其 RAM 區域大小(最大約為
GB)的限制
對於這些商店
最有效地使用 RAM 資源尤為重要
記住擁有一個非常大的 db_cache_size 的趨勢正在下降也很重要
雖然對數據的直接訪問是利用散列法來完成的
但有時數據庫必須檢查 RAM 緩存中的所有內存塊
高失效率的系統 — 無論何時當程序產生一個截斷表
使用臨時表或運行一次大型的數據清除時
Oracle 必須清除 db_cache_size 中的所有內存塊
以除去已被使用的內存塊
對於擁有大於
gB 的 db_cache_size 的系統
這種方法可能造成過多的開銷
更新率高的系統 — 當執行一次異步寫操作時
數據庫寫入器 (DBWR) 過程必須清除 db_cache_size 中的所有內存塊
擁有一個巨大的 db_cache_size 可能給數據庫寫入器造成過重的負擔
首先
讓我們回顧一下創建自調整數據庫背後的准則
自調整背後的准則 重新配置一個 Oracle 例程的最常用的技巧是使用一個腳本
並通過 dbms_job 或一個外部調度程序(如 UNIX cron)來調用這個腳本
為了說明一個簡單的例子
考慮一個白天在 OLTP 模式下運行
而晚上在數據倉庫模式下運行的數據庫
對於這種類型的數據庫
您可以安排一項作業來將例程 SGA 內存重新配置成最適合於在該 Oracle 例程中執行的處理類型的配置
列表
包含一個 UNIX 腳本
該腳本用來重新配置 Oracle
以便進行決策支持處理
注意為了適應數據倉庫行為
對 shared_pool
db_cache_size 和 pga_aggregate_target 中的配置作了重要的修改
該腳本被安排在每晚
:
pm 通過 dbms_job 來調用
在列表
中
我們看到了建立了自調整 Oracle Database
g 的基礎的 alter system 命令
記住 RAM 是一種昂貴的 Oracle 服務器資源
DBA 有責任在服務器上充分地分配 RAM 資源
未得到利用的 RAM 將浪費昂貴的硬件資源
即使得到了充分的分配
分配過度的 RAM 也是一種浪費
例如
當您只需要
m 時
分配一個 shared_pool_size=
m 是效率低下的
因為 RAM 可以被 SGA 的另一個區域(如 db_cache_size)使用
為了說明 RAM 重新配置的概念
考慮下面這個例子
一個分配不足且數據緩沖命中率很低的
K 數據緩沖區
和一個分配過度且數據緩沖命中率很高的
K 數據緩沖區(參見圖
)
使用 alter system 命令
我們可以在數據緩沖區之間調整 RAM
以將 RAM 重新分配給最需要的地方(參見圖
)
您可以在很多種 Oracle 腳本(包括動態 SQL
dbms_job 和 shell 腳本)中使用 alter system 命令
列表
是調整 RAM 緩存大小的一個簡單的 SQL*Plus 腳本
這個腳本向您提示緩存的名稱和大小
並發出適當的 alter system 命令來調整 RAM 區域的大小
下面是輸出的內容
SQL> @dyn_sga
Enter cache to decrease:shared_pool_size
Enter cache to increase:db_cache_size
Enter amount to change:
alter system set shared_pool_size =
;
System altered
alter system set db_cache_size =
;
System altered
現在我們看到了在 Oracle Database
g 中
如何輕易地改變 RAM 區域
下面讓我們研究一下調用 RAM 區域自動調整的一些規則
何時觸發動態重配置 無論何時當監控腳本的例程指示有一個負擔過重的 RAM 區域時
您必須選擇從哪一個區域中
竊取
內存
表
顯示了阈值條件的一個簡單的示例
該阈值條件觸發 SGA 的三個主要區域的動態內存修改
當然
每個系統都各不相同
您將要根據您的需求來調整這些阈值
例如
許多商店實施了多個 blocksize
並分離了 db_
k_cache_size (用於索引表空間)
db_keep_cache_size(用於小型
引用頻繁的對象)等的 RAM 區域
記住數據庫的需求將根據正在執行的 SQL 不斷變化是很重要的
在
:
am 最優的一個 SGA 可能在
:
pm 就不是最優了
為了了解處理特性的變化
您可以運行 Statspack 報表來查明 Oracle 改變 RAM 存儲需求的那些時間
您還可以運行 v$db_cache_advice
v$pga_target_advice
v$java_pool_advice 和 v$db_shared_pool_advice 實用程序來查看 RAM 區域大小的變化帶來的邊際效益
一種使動態 SGA 重新配置自動化的流行的方法是識別趨勢
您可以使用 Statspack 來預測那些處理特性變化的時間
並使用 dbms_job 程序包或動態 SQL 來執行特定的 SGA 修改
讓我們詳細了解一下基於趨勢的方法
顯示系統信號圖 基於趨勢的重新配置的一種常見的方法是使用 Statspack 歷史數據來顯示可預測的趨勢
並根據信號圖用這些趨勢來修改數據庫
這種方法與零庫存生產很相似
其中零部件正好在需要組裝時才出現在工廠車間裡
Oracle Database
g 使 DBA 能夠預見處理需求並定期地安排適當的干預操作
從而確保為處理需求的變化即時地提供 SGA 資源
自調整 Oracle 的內存區域涉及到改變幾個 Oracle 參數的值
雖然存在
多個 Oracle Database
g 參數來管理數據庫的各方面配置
但只有少數幾個參數對自動的 Oracle SGA 調整很重要
db_cache_size — db_cache_size 確定 Oracle SGA 中的數據庫塊緩沖的數量
並且代表著 Oracle 內存最重要的一個參數
db_keep_cache_size — 這個數據緩沖池是 Oracle
i 中 db_block_buffers 的一個子緩沖池
但從 Oracle
i Database 開始成為一個單獨的 RAM 區域
db_nn_cache_size — Oracle Database
g 有單獨的數據緩沖池
您可以使用這些數據緩沖池來分離數據並分離具有不同 I/O 特性的對象
shared_pool_size — shared_pool_size 定義系統中由所有用戶共享的池
包括 SQL 區域和數據字典緩存
pga_aggregate_target — pga_aggregate_target 定義為系統范圍的排序和散列連接保留的 RAM 區域
您可以看到
甚至不需要對您的 Oracle 數據庫狀況的最重要的量度進行歸零校正
讓我們從檢查庫緩存中的趨勢開始
並確定如何自動調整 shared_pool_size
使用 Oracle Database g 顧問實用程序 Oracle Database
g 擁有完整的顧問實用程序
它們將准確地預測改變任意的 RAM 區域大小將帶來的變化
Oracle Database
g 中的顧問實用程序包括
共享池建議 — v$shared_pool_advice
PGA 目標建議 — v$pga_target_advice
數據緩存建議 — v$db_cache_advice
Java 池建議 — v$java_pool_advice
這些實用程序是確保自調整變化正確合理的一種極好的方式
以下內容將顯示如何調用和解釋這些顧問實用程序
當您能夠輕松地解釋它們的輸出時
您就可以編寫自動化的腳本來生成建議
解釋輸出
並自動改變 RAM 區域的大小
共享池建議實用程序 這一顧問功能在 Oracle
i Database Release
中得到了擴展
包含了一個稱為 v$shared_pool_advice 的新的建議實用程序
在將來的版本中它可能最終將被擴展至所有的 SGA RAM
從 Oracle
i Database Release
開始
當共享池的大小從當前值的
% 變為當前值的
% 時
v$shared_pool_advice 視圖將顯示 SQL 分析的邊際差異
共享池建議實用程序非常易於配置
安裝後
您可以運行一個簡單的腳本來查詢 v$shared_pool_advice 視圖
並查看不同 shared_pool 大小的 SQL 分析的邊際變化
以下腳本的輸出將告訴您動態增加或減少 shared_pool_size 參數帶來的變化
************************************************
Display shared pool advice
************************************************
From:http://tw.wingwit.com/Article/program/Oracle/201311/18957.html