第 10 章:監控和調整數據庫
目的
本章向您介紹通過企業管理器執行的一些監控和調整操作。
主題
本章討論了以下內容:
主動監控數據庫 診斷和解決性能問題 使用 SQL Tuning Advisor 使用 SQL Access Advisor 使用 Memory Advisor
查看屏幕截圖
將鼠標移到這個圖標上,顯示所有的屏幕截圖。您還可以將鼠標移到各個圖標上,以只查看與該圖標相關的屏幕截圖。
主動監控數據庫
警報幫助您主動地監控數據庫。大多數警報是在超過特定的量度閾值時發出的通告。您可以爲每一個警報設置臨界和警告閾值。這些閾值即爲邊界值,如果超過了這些邊界值,則指示系統處於非預期的狀態。
在這一部分中,您將執行以下任務:
創建具有指定閾值的表空間和表 觸發表空間的空間使用率警報 設置量度閾值 設置通告 創建具有指定閾值的表空間和表
首先創建包含有一個 20 MB 的數據文件的一個新的表空間。將本地管理這個表空間,並使用自動段空間管理 (ASSM)。然後您在這個新的表空間中創建一個新的表。這個表將把 Enable Row Movement 選項設爲 yes,以允許表中的空間回收。執行以下操作:
Off 1. 單擊數據庫主頁上的Administration 鏈接。
- Off 2. 單擊Tablespaces 鏈接。
- Off 3. 單擊Create 按鈕。
- Off 4. 輸入TBSALERT 作爲表空間名稱,然後單擊Add,爲表空間定義一個數據文件。
- Off 5. 輸入tbsalert.dbf 作爲數據文件名,並輸入20 MB 作爲文件大小。單擊Continue。
- Off 6. 單擊Thresholds,指定空間使用率警告和臨界閾值水平。
單擊Specify Thresholds, by percent used。設置數據庫範圍的默認空間使用率閾值。爲 Warning% 輸入60,
- Off 7. 爲 Critical% 輸入68。單擊OK。
- Off 8. 單擊Database 導覽欄,返回Administration 屬性頁面。
- Off 9. 單擊Tables 鏈接。
- Off 10. 單擊Create。
- Off 11. 單擊Continue。
- 12. 在 Name 域中輸入employees1。指定SYSTEM 作爲模式,TBSALERT 作爲表空間。單擊 Define Using 下拉列表,選擇SQL。在 Create Table As 域中輸入select * from hr.employees,然後單擊Options。Off
- Off 13. 爲 Enable Row Movement 選擇Yes,然後單擊OK,完成表的創建。
- Off 14. 表已創建完成。單擊Database 導覽欄。
觸發表空間空間使用率警報
返回主題列表 您現在將更新表,觸發空間利用率警報。執行以下操作:
Off 1. 打開SQL*Plus 會話,然後執行以下命令:
sqlplus system/oracle
Off 2. 將以下 SQL 命令拷貝並粘貼到 SQL*Plus 會話中,以模擬EMPLOYEES1 表上的用戶活動:
begin
for i in 1..1000 loop
insert into employees1
select * from hr.employees;
commit;
end loop;
end;
/
3. 轉至Enterprise Manager 窗口。單擊Database 導覽欄,返回到Administration 頁面,然後單擊Tablespaces 鏈接。Off
Off 4. 注意,TBSALERT 表空間使用百分率增加了。
5. 回切到SQL*Plus 窗口,並將以下命令拷貝並粘貼到 SQL*Plus 會話中,,以模擬EMPLOYEES1 表上的更多用戶活動:Off
delete employees1 where department_id = 50;
begin
for i in 1..500 loop
insert into employees1
select * from hr.employees;
commit;
end loop;
end;
/
轉至Enterprise Manager 窗口。刷新瀏覽器(對於 Linux Mozilla,從菜單欄中選擇View,然後選擇
- Off 6. Reload)。注意,TBSALERT 表空間的空間使用百分率增加了。
- 7. 回切到SQL*Plus 窗口,並將以下命令拷貝並粘貼到 SQL*Plus 會話中,,以模擬EMPLOYEES1 表上的更多用戶活動:Off
begin
for i in 1..500 loop
insert into employees1
select * from hr.employees;
commit;
end loop;
end;
/
Off 8. 將以下 SQL 命令拷貝並粘貼到 SQL*Plus 會話中,以模擬EMPLOYEES1 表上的用戶活動:
delete employees1 where department_id = 30;
commit;
delete employees1 where department_id = 100;
commit;
delete employees1 where department_id = 50;
commit;
delete employees1 where department_id = 80;
commit;
exit
轉至Enterprise Manager 窗口。刷新瀏覽器(對於 Linux Mozilla,從菜單欄中選擇View,然後選擇
Off 9. Reload)。注意,TBSALERT 表空間的空間使用率現在已經超過了臨界閾值水平 (68%)。
在您等待空間使用率警報顯示在 Enterprise Manager 主頁上時,請仔細查看錶段統計數據。單擊Database 導覽
- Off 10. 欄,然後單擊Tables 鏈接。
- Off 11. Go 要查。找SYSTEM.EMPLOYEES1 表,請在Schema 域中輸入system,在Object Name 域中輸入emp。單擊
- Off 12. 單擊EMPLOYEES1 鏈接。
- Off 13. 單擊Segments。
- 14. 注意EMPLOYEES1 表中浪費空間的百分率。您可能能夠通過回收表中未使用的空間來解決表空間空間使用率警報。Off
在同一頁面上,您可以爲Space Usage Trend 指定一個日期範圍,然後單擊Refresh 按鈕,以規劃EMPLOYEES1 表未來的空間使用率。因爲在EMPLOYEES1 表上沒有足夠的活動歷史紀錄,所以您在空間使用率分析圖中將看不到非常有意義的數據。單擊Database 導覽欄,然後單擊Home 頁面標籤。
單擊Refresh 按鈕幾次,直到您看到一個紅色的x 和數字1 緊鄰着Problem Tablespaces 出現。向下滾動至
- Off 15. Alerts 表。
- Off 16. 您將看到一個Tablespaces Full 警報。單擊Tablespace [TBSALERT] is [70 percent] full 鏈接。
設置量度閾值
返回主題列表 Oracle 提供了一組預先定義的量度,其中一些量度一開始就擁有爲它們定義的閾值。您將預先爲TBSALERT 表空間的表空間使用率定義一個量度。要查看所有的量度,請執行以下操作:
- Off 1. 單擊Related Links 區域中的Manage Metrics。
- Off 2. 單擊Edit Thresholds。
- Off 3. 向下滾動至Tablespace Space Used (%),然後選擇這個量度。向上滾回到窗口頂部。
- Off 4. 單擊Specify Multiple Thresholds。
- Off 5. 對於TBSALERT 表空間,將警告閾值修改爲70,將臨界閾值修改爲80。然後單擊OK。
- Off 6. 修改完成。單擊OK,將數據保存到數據庫中。
- Off 7. 更新成功。單擊路徑式導航欄中的Database 導航項。
設置通告
返回主題列表 當出現需要您幹預的事件時,您可以選擇性地提供通告。默認地,臨界狀態的警報(如 Database Down、Generic Alert Log Error Stats 和 Tablespace Used)都設置爲提供通告。執行以下操作:
- Off 1. 單擊 Database 主頁頂部的Setup。
- Off 2. 單擊Notification Methods。
在 Outgoing Mailserver 域中輸入<您的郵件服務器>,在 Identify Sender As 域中輸入dbaalert,在 Sender's
- Off 3. Email 域中輸入[email protected],然後單擊Apply。
- Off 4. 更新成功。單擊頁面頂部的Preferences。
- Off 5. 單擊 General 選項中 E-mail Addresses 的Add Another Row。
- Off 6. 輸入[email protected] 作爲電子郵件地址,單擊Apply。然後單擊Database。
診斷和解決性能問題
在出現數據庫性能問題時,需要您進行診斷和糾正。有時用戶抱怨性能緩慢會使您注意到問題。其餘的時候,您可能注意到主頁上的 Host CPU 圖中的性能尖峯。在所有情況下,自動數據庫診斷監控器 (ADDM) 都將標記這些問題,它默認每 60 分鍾執行一次自上而下的系統分析,並在
Oracle Enterprise Manager 主頁上報告它發現的問題。 ADDM 每 60 分鍾自動運行一次,和自動工作負載信息庫 (AWR) 採集的快照同步發生。它的輸出包含了它確認的每個問題的說明和建議操作。
利用 ADDM 解決發現的性能問題 生成性能問題查找結果
返回主題列表 爲了演示 ADDM 如何工作,您要生成一個性能問題查找結果。在本文中,您將創建一個等待行鎖的會話。要執行某些如更新和刪除的操作,會話必須鎖住該行。執行以下步驟,生成性能問題查找結果:Off 1. 打開終端窗口,執行以下命令:
sqlplus hr/hr
create table emp as select * from employees;
delete emp;
Off 2. 再打開一個終端窗口,並執行以下命令,創建一個行鎖衝突:
sqlplus hr/hr
delete emp;
- Off 3. 單擊 Enterprise Manager 窗口中的Performance。
- Off 4. 您將看到會話等待值非常高。等待大約 10 分鍾,然後向下滾動至窗口底部。
- Off 5. 您現在將創建快照來捕獲性能問題。單擊Snapshots。
- Off 6. 單擊Create,創建快照。
- Off 7. 單擊Yes,創建人工快照。
- Off 8. 正在創建快照。
- Off 9. 一旦快照創建完成,請單擊路徑式導航欄中的database 導航項,然後單擊home。
- Off 10. 現在通過主頁的 Alert 部分的一個警報,檢測到了一個性能問題。
利用 ADDM 解決發現的性能問題
返回主題列表 當遇到性能問題時,您可以使用 ADDM 來解決它。執行以下操作:
- Off 1. 單擊警報Database Time Spent Waiting。
- Off 2. 注意建議的操作是運行 ADDM 來獲取更多的關於系統的性能分析。單擊Additional Advice。
確保從列表中選擇了您創建的快照。注意SQL statements were found waiting for row lock waits 將影響系統
- Off 3. 超過 86% 的數據庫時間。單擊列表中的這個性能問題查找結果。
- Off 4. 您看到了解決該性能問題需要採取的操作。單擊View Rationale。
- Off 5. 您將看到引起問題的特定 SQL ID。單擊Close。
- Off 6. 要解決性能問題,請單擊路徑式導航欄中的Database 導航項。
- Off 7. 單擊Performance。
- Off 8. 向下滾動,然後選擇 Additional Monitoring Links 下的Blocking Sessions。
- Off 9. 確保選擇了最高級別的 HR,然後單擊Kill Session。
- Off 10. 單擊Yes,終止會話。
- Off 11. 會話終止。單擊路徑式導航欄中的Database 導航項,然後單擊Home。
- Off 12. 注意警報已消失。
使用 SQL Tuning Advisor
返回主題列表 數據庫管理員或操作員執行以下任務來響應性地監控並診斷數據庫性能問題: 查看數據庫等待 檢查 Database Wait 類的 TOP SQL 利用 SQL 調整顧問工具調整 SQL 語句 查看 SQL 語句的 SQL 執行細節 查看數據庫等待 返回列表 您將首先啓動幾個工作負載會話。然後您將查看數據庫工作負載。創建一個名稱爲$HOME/wkdir 的目錄。下載 perflab. tar 文件,並將文件解壓縮至$HOME/wkdir 目錄中。執行以下步驟:
Off 1. 打開一個命令行窗口,然後運行以下 OS 腳本:
./setup_perflab.sh
注意:這個腳本運行將花費大約 4 分鍾。
Off 2. 回切到 Enterprise Manager 窗口。選擇Administration 鏈接。
Off 3. 在標題爲Workload 的部分中,單擊Automatic Workload Repository 鏈接。
確定已經爲該數據庫採集了多少快照。查看Snapshots 下的數量和最後一次 ADDM 快照採集的時間。應該有至
- Off 4. 少三個快照。單擊路徑式導航欄中的Database 導航項。
- Off 5. 單擊Performance 鏈接。
在 Performance 窗口中查看Sessions: Waiting and Working 圖。顯示一個表示數據庫當前工作負載的圖表。
- Off 6. (向圖表填充數據可能要花一分鍾)用 ADDM 快照採集的數據來填充這個圖表。圖表的邊上是圖例。每一個圖例項目具有不同的顏色。您可以從圖中快速確定佔用最多時間的項目是黃色的,即用戶 I/O。單擊User I/O 鏈接。
- 7. 在 Active Sessions Waiting: User I/O 圖表下有兩個餅圖。查看左邊的餅圖Top Waiting SQL。這顯示佔絕大多數的等待 (53%) 是由一條 SQL 語句造成的。查看右邊的餅圖Top Waiting Sessions。這個餅圖顯示當前最活躍的幾個會話等待的時間幾乎佔相同的百分比。Off
檢查 Database Wait 類的 TOP SQL
返回列表 如之前的任務所示,有一條 SQL 語句導致了大部分的數據庫等待。在這個任務中,您將深入瞭解根本原因。執行以下操作:
Off 1. 從 Active Sessions Waiting: User I/O 頁面中,單擊頁面中部的Top SQL。
在出現的詳細頁面上,查看Wait Events for Top SQL 表,該表按活動(%)排序。您可以看到 Top SQL 語句
- Off 2. 將其大部分時間花費在了 'db file scattered read' 活動上。單擊具有最高活動百分比的 SQL 語句的 SQL ID。
- Off 3. 顯示這條 SQL 語句的執行計劃。單擊Current Statistics 標籤。
- Off 4. 顯示這條 SQL 語句的統計數據。單擊Execution History 標籤。
顯示這條 SQL 語句的統計分析圖表。 CPU 和 Elapsed Time 圖表顯示在一段時間上執行這條 SQL 語句的 CPU
Off 5. 使用率。選擇Seconds Per Execution,單擊Go,顯示這條 SQL 語句的每次執行使用的時間和資源。
從顯示的圖表中,可以確定 CPU 資源使用率在增加,執行這條 SQL 語句花費的時間也在增加。單擊 Tuning
Off 6. History 標籤。
顯示之前爲這條 SQL 語句提供的調整建議。當前沒有建議。您現在準備好了使用 SQL Tuning Advisor 來調整
Off 7. SQL 語句。
利用 SQL 調整顧問工具調整 SQL 語句
返回列表 正如在上一個關於響應式調整的部分中確定的那樣,目標 SQL 語句需要調整。 SQL 調整顧問工具將爲您調整執行計劃。執行以下操作:
- Off 1. 單擊Run SQL Tuning Advisor。
- Off 2. 在 Schedule Advisor 窗口中,確保選擇了 Scope 下的Comprehensive,作業將立即安排。單擊OK。
- Off 3. SQL Tuning Advisor 將創建一個任務,以分析 SQL 語句,任務一旦完成,將顯示一組調整建議。
- Off 4. 單擊View Recommendations。
- Off 5. 單擊New Explain Plan 按鈕,查看建議的修改。
- Off 6. 正如您所看到的,新的解釋計劃刪除了全部的表掃描。單擊瀏覽器後退按鈕,返回上一頁。
- Off 7. 單擊Implement 按鈕,執行調整建議。
- Off 8. 出現一條確認頁面,指示 SQL Profile 成功創建。單擊路徑式導航欄中的Database 導航項。
查看 SQL 語句的 SQL 執行細節
返回列表 您已執行了調整建議,現在查看 SQL 語句和其執行細節。執行以下步驟。
- Off 1. 執行Performance。
- Off 2. 向下滾動至Sessions: Waiting and Working 圖表。等待一分鍾,觀察用戶 I/O 如何減少。
使用 SQL Access Advisor
SQL Access Advisor 提供了許多過程,可以調用這些過程來幫助確定創建和丟棄哪些實體化化視圖和索引。它利用基於您的模式的,假定的工作負載,或從實際的工作負載(可能由用戶提供、來自 Oracle Trace 或來自 SQL 高速緩存的內容)中作出決策。
還可以根據不同的標準對工作負載進行過濾,如只使用包含這些表的查詢,或在這個範圍中有優先權的查詢。
準備環境 利用 SQL 高速緩存獲取建議 查看和執行建議 準備環境
執行以下步驟,爲使用 SQL Access Advisor 準備好環境。當 Advisor 在運行時,實體化視圖和索引可能存在,但爲了舉例的目的,把它們刪除了,以便您可以看到 Advisor 的建議。您還需要設置高速緩存,以便 SQL Access Advisor 能夠生成建議。執行以下操作:
Off 1. 打開一個終端窗口,然後執行以下命令,清理環境:
sqlplus system/
DROP MATERIALIZED VIEW all_cust_sales_mv;
DROP MATERIALIZED VIEW costs_mv;
DROP MATERIALIZED VIEW costs_pm_mv;
DROP MATERIALIZED VIEW cust_sales_mv;
DROP MATERIALIZED VIEW some_cust_sales_mv;
DROP MATERIALIZED VIEW cust_id_sales_aggr;
DROP MATERIALIZED VIEW sales_cube_mv;
DROP MATERIALIZED VIEW sales_gby_mv;
DROP MATERIALIZED VIEW CUST_TOTAL_SALES_MV;
DROP MATERIALIZED VIEW CUST_SALES_TIME_MV;
Off 2. 現在您需要創建高速緩存。執行下列命令:
alter system flush shared_pool;
grant advisor to sh;
connect sh/sh;
SELECT c.cust_last_name, sum(s.amount_sold) AS dollars,
sum(s.quantity_sold) as quantity
FROM sales s , customers c, products p
WHERE c.cust_id = s.cust_id
AND s.prod_id = p.prod_id
AND c.cust_state_province IN ('Dublin','Galway')
GROUP BY c.cust_last_name;
SELECT c.cust_id, SUM(amount_sold) AS dollar_sales
FROM sales s, customers c WHERE s.cust_id= c.cust_id GROUP BY c.cust_id;
select sum(unit_cost) from costs group by prod_id;
利用 SQL 高速緩存獲取建議
您將使用您剛剛設置的 SQL 高速緩存來獲取來自 SQL Access Advisor 的建議。執行以下操作:
Off 1. 打開瀏覽器,輸入以下 URL:
http://:5500/em
輸入sys/ 作爲SYSDBA,單擊Login。
- Off 2. 向下滾動至主頁底部,然後單擊 Related Links 下的Advisor Central。
- Off 3. 單擊SQL Access Advisor 鏈接。
- Off 4. 確保選中了Current and Recent SQL Activity,然後單擊Show Advanced Options。
- Off 5. 向下滾動。在 Filter Options 下,選擇Filter workload based on these options。選擇Only the top resource consuming SQL statements 和 Only SQL statements executed by the following users。然後在 Users 域中輸入SH,然後單擊Next。
- Off 6. 選擇Both Indexes and Materialized Views,然後單擊Next。
- Off 7. 輸入任務名OBE,爲 Schedule Type 選擇Standard,然後單擊Next。
- Off 8. 在概要窗口中,單擊Submit。
查看和執行建議
返回列表 現在您可以查看結果,如果您希望,可以執行它們。執行以下操作:
- Off 1. 確保選擇了您的作業,然後單擊 View Result。
- Off 2. 單擊 Recommendation ID 1,查看建議的細節。
在這裏您可以自定義對象名稱、模式和表空間,以執行建議。向下滾動,並將 Create Materialized View 的
- Off 3. Schema Name 修改爲SH,然後單擊OK。
- Off 4. 當您安排執行時,如果要查看將執行的 SQL 腳本,可以單擊Show SQL。
- Off 5. 向下滾動至底部,您將看到創建實體化視圖的語句和您剛作的修改。單擊OK。
- Off 6. 單擊Schedule Implementation,執行建議。
- Off 7. 爲 Job Name 輸入OBEIMPL,然後單擊Submit。
- Off 8. 執行作業創建完成並且現在正在運行。單擊Run History 標籤。
- Off 9. 確保選擇了您的作業,然後單擊 View。
- Off 10. 查看概要,然後單擊路徑式導航欄中的 database 導航項。
- Off 11. 單擊Materialized View。
- Off 12. 在 Schema 域中輸入SH,然後單擊Go。
- Off 13. 注意新創建的實體化視圖出現在列表中。單擊路徑式導航欄中的Database 導航項,然後單擊Tables 鏈接。
使用 Memory Advisor
在這一部分中,您將主動管理並將一些與 Oracle 例程內存配置相關的任務自動化。通過將內存配置自動化,您有了更多的時間來處理影響您的企業的應用或商務實際問題。Memory Advisor 是 Oracle 數據庫內部的一個智能專家系統,它爲各種 SGA 和 PGA 組件主動確定最優設置。當實現自動化
時,Oracle 將根據工作負載的需求自動調整各種池和高速緩存的設置。 啓用自動共享內容管理 修改總 SGA 大小 使用 PGA Advisor 啓用自動共享內存管理 返回列表 執行以下操作,啓用 SGA 的自動共享內存管理:
Off 2. 向下滾動至主頁底部,然後單擊 Related Links 下的Advisor Central。
- Off 3. 選擇Memory Advisor。
- Off 4. 爲 Automatic Shared Memory Management 單擊Enable。
- Off 5. 單擊OK,啓用自動共享內存管理。
- Off 6. Oracle 服務器現在將根據工作負載的需求自動調整各種池和高速緩存的設置。
修改總 SGA 大小
返回列表 當處於自動共享內存管理模式下時,要修改總的 SGA 大小,您將需要確保最大的 SGA 大小足夠大。執行以下操作:
- 1. 向下滾動頁面。將 Maximum SGA Size 修改爲261 MB,然後單擊Apply。注意:如果您接收到一個錯誤,那麼單擊 Refresh 按鈕重試。Off
- Off 2. 單擊Yes,確認修改。
- Off 3. 提供主機證書和數據庫證書。單擊OK。
- Off 4. 當您修改 Max SGA Size 參數時,例程必須重新啓動。單擊Yes,確認數據庫重啓。
- Off 5. 數據庫重啓過程將開始。單擊Refresh。
- Off 6. 輸入sys/ 作爲SYSDBA,單擊Login。
- Off 7. 向下滾動,然後單擊Advisor Central。
- Off 8. 單擊Memory Advisor。
- Off 9. 將 Total SGA Size 參數修改爲260 MB。單擊Apply。
注意 Max SGA Size 參數自動調整與內存細粒大小保持一致,雖然您原來已把它設爲 261 MB,但 Oracle 服務器自動將其修改爲 264 MB。
Off 10. 一旦您接收到了確認通告 — 指示參數已成功修改,您還將注意到一些 SGA 組件的內存分配已自動調整。
使用 PGA Advisor
返回列表 執行以下操作,分配與 PGA 相關的內存:
- Off 1. 單擊PGA。
- Off 2. 單擊Advice……
- Off 3. PGA Aggregate Target Advice 圖顯示在高速緩存中找到數據(以便您不需訪問磁盤)的頻率。在本文中,應當注意當前的 PGA Aggregate Size 被設爲 24 MB 左右,所有請求的服務的 88% 以上都從內存中獲得。這還顯示溢出範圍從 12 MB 左右開始。在 12 MB 時,PGA 請求應用高速緩存的概率大約爲 90%。 PGA Aggregate Size 指示(根據當前的工作負載和數據庫中的會話數量),在該數據庫中爲所有 PGA 分配的大小不超過 24 MB。單擊OK。
- Off 4. 單擊PGA Memory Usage Details。
- Off 5. 本圖顯示內存大小請求的使用率詳情和各種 PGA 內存請求的執行百分率。單擊OK。
將鼠標移到這個圖標上,以隱藏所有的屏幕截圖