国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle9i Database 自調(diào)整:Oracle SGA(上)

2024-08-29 13:39:11
字體:
供稿:網(wǎng)友

  隨著數(shù)據(jù)庫治理員在自調(diào)整工作方面變得更加成熟,許多 Oracle 規(guī)格可能變?yōu)樽哉{(diào)整。在 Oracle Database 10g 中,我們將看到比以前更多的自調(diào)整功能。
  
  例如,Oracle Database 10g 的動態(tài)內(nèi)存分配特性使得創(chuàng)建一個自調(diào)整的 Oracle SGA 成為可能。通過演示,在本文中我將說明如何檢查 Oracle 9i Database 中的 Oracle 例程,以及根據(jù)服務器上和數(shù)據(jù)庫內(nèi)的處理需求來調(diào)整 sort_area_size 或 pga_aggregate_target、large_pool_size、sga_max_size 和 db_cache_size 的內(nèi)存區(qū)域。這里討論的技巧的基礎是使用 Statspack 來隨時監(jiān)控內(nèi)存區(qū)域并顯示系統(tǒng)資源利用率的信號圖。
  
  我還將討論如何創(chuàng)建一種智能機制,以根據(jù)當前的處理需求來自動地重新配置 Oracle9i Database,并提供了示例代碼,這些示例代碼將使您能夠開始編寫自己的能夠有效地仿效 Oracle Database 10g 功能的自動化腳本;例如,我將提供一個腳本,它將自動識別小型、常用的程序段,并將它們分配給 KEEP 池,以全部進行緩存。(重要注重事項:這種仿效僅考慮外部的行為,但不反映新版本的內(nèi)部實施。)因為每個數(shù)據(jù)庫都各不相同,所以為了清楚起見,這些腳本特意進行了省略和簡化。因此,您將需要擴展這些示例并編寫適合您的環(huán)境的自定義的自動化腳本。
  
  具有以下特性的商店將從自動化的自調(diào)整中最大程度的獲益:
  
  雙模式系統(tǒng) — 在在線事務處理 (OLTP) 和數(shù)據(jù)倉庫處理模式之間轉(zhuǎn)換的系統(tǒng)尤其將從自調(diào)整 RAM 區(qū)域中獲益。
  
  32 位的商店 — 運行 32 位服務器的商店受其 RAM 區(qū)域大小(最大約為 1.7GB)的限制。對于這些商店,最有效地使用 RAM 資源尤為重要。
  
  記住擁有一個非常大的 db_cache_size 的趨勢正在下降也很重要。雖然對數(shù)據(jù)的直接訪問是利用散列法來完成的,但有時數(shù)據(jù)庫必須檢查 RAM 緩存中的所有內(nèi)存塊:
  
  高失效率的系統(tǒng) — 無論何時當程序產(chǎn)生一個截斷表、使用臨時表或運行一次大型的數(shù)據(jù)清除時,Oracle 必須清除 db_cache_size 中的所有內(nèi)存塊,以除去已被使用的內(nèi)存塊。對于擁有大于 10gB 的 db_cache_size 的系統(tǒng),這種方法可能造成過多的開銷。
  
  更新率高的系統(tǒng) — 當執(zhí)行一次異步寫操作時,數(shù)據(jù)庫寫入器 (DBWR) 過程必須清除 db_cache_size 中的所有內(nèi)存塊。擁有一個巨大的 db_cache_size 可能給數(shù)據(jù)庫寫入器造成過重的負擔。
  
  首先,讓我們回顧一下創(chuàng)建自調(diào)整數(shù)據(jù)庫背后的準則。
  
  自調(diào)整背后的準則
  重新配置一個 Oracle 例程的最常用的技巧是使用一個腳本,并通過 dbms_job 或一個外部調(diào)度程序(如 UNIX cron)來調(diào)用這個腳本。為了說明一個簡單的例子,考慮一個白天在 OLTP 模式下運行,而晚上在數(shù)據(jù)倉庫模式下運行的數(shù)據(jù)庫。對于這種類型的數(shù)據(jù)庫,您可以安排一項作業(yè)來將例程 SGA 內(nèi)存重新配置成最適合于在該 Oracle 例程中執(zhí)行的處理類型的配置。
  
  列表 1 包含一個 UNIX 腳本,該腳本用來重新配置 Oracle,以便進行決策支持處理。注重為了適應數(shù)據(jù)倉庫行為,對 shared_pool、db_cache_size 和 pga_aggregate_target 中的配置作了重要的修改。該腳本被安排在每晚 6:00pm 通過 dbms_job 來調(diào)用。
  
  在列表 1 中,我們看到了建立了自調(diào)整 Oracle Database 10g 的基礎的 alter system 命令。記住 RAM 是一種昂貴的 Oracle 服務器資源,DBA 有責任在服務器上充分地分配 RAM 資源。未得到利用的 RAM 將浪費昂貴的硬件資源。
  
  即使得到了充分的分配,分配過度的 RAM 也是一種浪費。例如,當您只需要 200m 時,分配一個 shared_pool_size=400m 是效率低下的,因為 RAM 可以被 SGA 的另一個區(qū)域(如 db_cache_size)使用。
  
  為了說明 RAM 重新配置的概念,考慮下面這個例子,一個分配不足且數(shù)據(jù)緩沖命中率很低的 16K 數(shù)據(jù)緩沖區(qū),和一個分配過度且數(shù)據(jù)緩沖命中率很高的 32K 數(shù)據(jù)緩沖區(qū)(參見圖 1)。
  
  
 Oracle9i Database 自調(diào)整:Oracle SGA(上)(圖一)

  使用 alter system 命令,我們可以在數(shù)據(jù)緩沖區(qū)之間調(diào)整 RAM,以將 RAM 重新分配給最需要的地方(參見圖 2)。
  
Oracle9i Database 自調(diào)整:Oracle SGA(上)(圖二)

  您可以在很多種 Oracle 腳本(包括動態(tài) SQL、dbms_job 和 shell 腳本)中使用 alter system 命令。列表 2 是調(diào)整 RAM 緩存大小的一個簡單的 SQL*Plus 腳本;這個腳本向您提示緩存的名稱和大小,并發(fā)出適當?shù)?alter system 命令來調(diào)整 RAM 區(qū)域的大小。下面是輸出的內(nèi)容:
  
  SQL> @dyn_sga
  
  Enter cache to decrease:shared_pool_size
  Enter cache to increase:db_cache_size
  Enter amount to change: 1048576
  
  alter system set shared_pool_size = 49283072;
  System altered.
  
  alter system set db_cache_size = 17825792;
  
  System altered.
  
  現(xiàn)在我們看到了在 Oracle Database 10g 中,如何輕易地改變 RAM 區(qū)域,下面讓我們研究一下調(diào)用 RAM 區(qū)域自動調(diào)整的一些規(guī)則。

  
  何時觸發(fā)動態(tài)重配置
  無論何時當監(jiān)控腳本的例程指示有一個負擔過重的 RAM 區(qū)域時,您必須選擇從哪一個區(qū)域中“竊取”內(nèi)存。表 1 顯示了閾值條件的一個簡單的示例,該閾值條件觸發(fā) SGA 的三個主要區(qū)域的動態(tài)內(nèi)存修改。當然,每個系統(tǒng)都各不相同,您將要根據(jù)您的需求來調(diào)整這些閾值。例如,許多商店實施了多個 blocksize,并分離了 db_32k_cache_size (用于索引表空間)、db_keep_cache_size(用于小型、引用頻繁的對象)等的 RAM 區(qū)域。
  
  記住數(shù)據(jù)庫的需求將根據(jù)正在執(zhí)行的 SQL 不斷變化是很重要的;在 9:00am 最優(yōu)的一個 SGA 可能在 3:00pm 就不是最優(yōu)了。為了了解處理特性的變化,您可以運行 Statspack 報表來查明 Oracle 改變 RAM 存儲需求的那些時間。您還可以運行 v$db_cache_advice、v$pga_target_advice、v$java_pool_advice 和 v$db_shared_pool_advice 實用程序來查看 RAM 區(qū)域大小的變化帶來的邊際效益。
  
  一種使動態(tài) SGA 重新配置自動化的流行的方法是識別趨勢。您可以使用 Statspack 來猜測那些處理特性變化的時間,并使用 dbms_job 程序包或動態(tài) SQL 來執(zhí)行特定的 SGA 修改。讓我們具體了解一下基于趨勢的方法。
  
  顯示系統(tǒng)信號圖
  基于趨勢的重新配置的一種常見的方法是使用 Statspack 歷史數(shù)據(jù)來顯示可猜測的趨勢,并根據(jù)信號圖用這些趨勢來修改數(shù)據(jù)庫。
  
  這種方法與零庫存生產(chǎn)很相似,其中零部件正好在需要組裝時才出現(xiàn)在工廠車間里。Oracle Database 10g 使 DBA 能夠預見處理需求并定期地安排適當?shù)母深A操作,從而確保為處理需求的變化即時地提供 SGA 資源。
  
  自調(diào)整 Oracle 的內(nèi)存區(qū)域涉及到改變幾個 Oracle 參數(shù)的值。雖然存在 250 多個 Oracle Database 10g 參數(shù)來治理數(shù)據(jù)庫的各方面配置,但只有少數(shù)幾個參數(shù)對自動的 Oracle SGA 調(diào)整很重要:
  
  db_cache_size — db_cache_size 確定 Oracle SGA 中的數(shù)據(jù)庫塊緩沖的數(shù)量,并且代表著 Oracle 內(nèi)存最重要的一個參數(shù)。
  
  db_keep_cache_size — 這個數(shù)據(jù)緩沖池是 Oracle8i 中 db_block_buffers 的一個子緩沖池,但從 Oracle9i Database 開始成為一個單獨的 RAM 區(qū)域。
  
  db_nn_cache_size — Oracle Database 10g 有單獨的數(shù)據(jù)緩沖池,您可以使用這些數(shù)據(jù)緩沖池來分離數(shù)據(jù)并分離具有不同 I/O 特性的對象。
  
  shared_pool_size — shared_pool_size 定義系統(tǒng)中由所有用戶共享的池,包括 SQL 區(qū)域和數(shù)據(jù)字典緩存。
  
  pga_aggregate_target — pga_aggregate_target 定義為系統(tǒng)范圍的排序和散列連接保留的 RAM 區(qū)域。
  
  您可以看到,甚至不需要對您的 Oracle 數(shù)據(jù)庫狀況的最重要的量度進行歸零校正。讓我們從檢查庫緩存中的趨勢開始,并確定如何自動調(diào)整 shared_pool_size。
  
  使用 Oracle Database 10g 顧問實用程序
  Oracle Database 10g 擁有完整的顧問實用程序,它們將準確地猜測改變?nèi)我獾?RAM 區(qū)域大小將帶來的變化。Oracle Database 10g 中的顧問實用程序包括:
  
  共享池建議 — v$shared_pool_advice
  PGA 目標建議 — v$pga_target_advice
  數(shù)據(jù)緩存建議 — v$db_cache_advice
  Java 池建議 — v$java_pool_advice
  
  這些實用程序是確保自調(diào)整變化正確合理的一種極好的方式。以下內(nèi)容將顯示如何調(diào)用和解釋這些顧問實用程序;當您能夠輕松地解釋它們的輸出時,您就可以編寫自動化的腳本來生成建議、解釋輸出,并自動改變 RAM 區(qū)域的大小。
  
  共享池建議實用程序
  這一顧問功能在 Oracle9i Database Release 2 中得到了擴展,包含了一個稱為 v$shared_pool_advice 的新的建議實用程序,在將來的版本中它可能最終將被擴展至所有的 SGA RAM。
  
  從 Oracle9i Database Release 2 開始,當共享池的大小從當前值的 10% 變?yōu)楫斍爸档?200% 時,v$shared_pool_advice 視圖將顯示 SQL 分析的邊際差異。
  
  共享池建議實用程序非常易于配置:安裝后,您可以運行一個簡單的腳本來查詢 v$shared_pool_advice 視圖,并查看不同 shared_pool 大小的 SQL 分析的邊際變化。以下腳本的輸出將告訴您動態(tài)增加或減少 shared_pool_size 參數(shù)帶來的變化。
  
  -- ************************************************
  -- Display shared pool advice
  -- ************************************************

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜昌市| 柘荣县| 陇南市| 枝江市| 铜山县| 临澧县| 清远市| 海兴县| 岳阳市| 射洪县| 晋宁县| 石河子市| 云霄县| 凤冈县| 中牟县| 海盐县| 西藏| 海安县| 玛沁县| 金溪县| 阿拉尔市| 滦平县| 沙河市| 宿州市| 晋宁县| 黔东| 乌兰察布市| 志丹县| 西乌| 汉中市| 荆门市| 若羌县| 贺兰县| 周宁县| 梁河县| 特克斯县| 同心县| 宁强县| 赤水市| 榕江县| 榕江县|