第 10 章:监控和调整数据库
目的
本章向您介绍通过企业管理器执行的一些监控和调整操作。
主题
本章讨论了以下内容:
![]() | 主动监控数据库 |
|---|---|
![]() | 诊断和解决性能问题 |
![]() | 使用 SQL Tuning Advisor |
![]() | 使用 SQL Access Advisor |
![]() | 使用 Memory Advisor |
查看屏幕截图
** 将鼠标移到这个图标上,显示所有的屏幕截图。 您还可以将鼠标移到各个图标上,以只查看与该图标相关的屏幕截图。 **
主动监控数据库
返回主题列表
警报帮助您主动地监控数据库。 大多数警报是在超过特定的量度阈值时发出的通告。 您可以为每一个警报设置临界和警告阈值。 这些阈值即为边界值,如果超过了这些边界值,则指示系统处于非预期的状态。
在这一部分中,您将执行以下任务:
![]() | 创建具有指定阈值的表空间和表 |
|---|---|
![]() | 触发表空间的空间使用率警报 |
![]() | 设置量度阈值 |
![]() | 设置通告 |
创建具有指定阈值的表空间和表
返回主题列表
首先创建包含有一个 20 MB 的数据文件的一个新的表空间。 将本地管理这个表空间,并使用自动段空间管理 (ASSM)。 然后您在这个新的表空间中创建一个新的表。 这个表将把 Enable Row Movement 选项设为 yes,以允许表中的空间回收。 执行以下操作:
** 1. ** |
单击数据库主页上的 Administration 链接。

---|---
** 2. ** |
单击 Tablespaces 链接。

** 3. ** |
单击 Create 按钮。

** 4. ** |
输入 ** TBSALERT ** 作为表空间名称,然后单击 Add ,为表空间定义一个数据文件。

** 5. ** |
输入 ** tbsalert.dbf ** 作为数据文件名,并输入 ** 20 MB ** 作为文件大小。 单击 Continue 。

** 6. ** |
单击 Thresholds ,指定空间使用率警告和临界阈值水平。

** 7. ** |
单击 Specify Thresholds, by percent used 。 设置数据库范围的默认空间使用率阈值。 为 Warning% 输入 60 ,为 Critical% 输入 68 。单击 OK 。

** 8. ** |
单击 Database 导览栏,返回 Administration 属性页面。

** 9. ** |
单击 Tables 链接。

** 10. ** |
单击 Create 。

** 11. ** |
单击 Continue 。

** 12. ** |
在 Name 域中输入 employees1 。 指定 SYSTEM 作为模式, TBSALERT 作为表空间。 单击 Define Using 下拉列表,选择 SQL 。 在 Create Table As 域中输入 ** select * from hr.employees ** ,然后单击 Options 。

** 13. ** |
为 Enable Row Movement 选择 Yes ,然后单击 OK ,完成表的创建。

** 14. ** |
表已创建完成。 单击 Database 导览栏。

触发表空间空间使用率警报
返回主题列表
您现在将更新表,触发空间利用率警报。 执行以下操作:
** 1. ** |
打开 SQL*Plus 会话,然后执行以下命令:
**sqlplus system/oracle**
---|---
** 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 链接。

** 4. ** |
注意, ** TBSALERT ** 表空间使用百分率增加了。

** 5. ** |
回切到 SQL*Plus 窗口,并将以下命令拷贝并粘贴到 SQL*Plus 会话中, ** ** ,以模拟 EMPLOYEES1 表上的更多用户活动:
**delete employees1 where department_id = 50;**
**begin for i in 1..500 loop insert into employees1 select * from hr.employees; commit; end loop; end; /**

** 6. ** |
转至 Enterprise Manager 窗口。 刷新浏览器(对于 Linux Mozilla,从菜单栏中选择 View ,然后选择 Reload )。 注意, TBSALERT 表空间的空间使用百分率增加了。

** 7. ** |
回切到 SQL*Plus 窗口,并将以下命令拷贝并粘贴到 SQL*Plus 会话中, ** ** ,以模拟 EMPLOYEES1 表上的更多用户活动:
**begin for i in 1..500 loop insert into employees1 select * from hr.employees; commit; end loop; end; /**

** 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**

** 9. ** |
转至 Enterprise Manager 窗口。 刷新浏览器(对于 Linux Mozilla,从菜单栏中选择 View ,然后选择 Reload )。 注意, TBSALERT 表空间的空间使用率现在已经超过了临界阈值水平 (68%)。

** 10. ** |
在您等待空间使用率警报显示在 Enterprise Manager 主页上时,请仔细查看表段统计数据。 单击 Database 导览栏,然后单击 Tables 链接。

** 11. ** |
要查找 SYSTEM.EMPLOYEES1 表,请在 Schema 域中输入 ** system ** ,在 Object Name 域中输入 ** emp ** 。 单击 Go 。

** 12. ** |
单击 ** EMPLOYEES1 ** 链接。

** 13. ** |
单击 Segments 。

** 14. ** |
注意 EMPLOYEES1 **** 表中浪费空间的百分率。 您可能能够通过回收表中未使用的空间来解决表空间空间使用率警报。
在同一页面上,您可以为 Space Usage Trend 指定一个日期范围,然后单击 Refresh 按钮,以规划 EMPLOYEES1 表未来的空间使用率。 因为在 EMPLOYEES1 表上没有足够的活动历史纪录,所以您在空间使用率分析图中将看不到非常有意义的数据。 单击 Database 导览栏,然后单击 Home 页面标签。

** 15. ** |
单击 Refresh 按钮几次,直到您看到一个红色的 x 和数字 1 紧邻着 Problem Tablespaces 出现。 向下滚动至 Alerts 表。

** 16. ** |
您将看到一个 Tablespaces Full 警报。 单击 Tablespace [TBSALERT] is [70 percent] full 链接。

设置量度阈值
返回主题列表
Oracle 提供了一组预先定义的量度,其中一些量度一开始就拥有为它们定义的阈值。 您将预先为 TBSALERT 表空间的表空间使用率定义一个量度。 要查看所有的量度,请执行以下操作:
** 1. ** |
单击 Related Links 区域中的 Manage Metrics 。

---|---
** 2. ** |
单击 Edit Thresholds 。

** 3. ** |
向下滚动至 Tablespace Space Used (%) ,然后选择这个量度。 向上滚回到窗口顶部。

** 4. ** |
单击 Specify Multiple Thresholds 。

** 5. ** |
对于 TBSALERT 表空间,将警告阈值修改为 70 ,将临界阈值修改为 80。 然后单击 OK 。

** 6. ** |
修改完成。 单击 OK ,将数据保存到数据库中。

** 7. ** |
更新成功。 单击路径式导航栏中的 Database 导航项。

设置通告
返回主题列表
当出现需要您干预的事件时,您可以选择性地提供通告。 默认地,临界状态的警报(如 Database Down、Generic Alert Log Error Stats 和 Tablespace Used)都设置为提供通告。 执行以下操作:
** 1. ** |
单击 Database 主页顶部的 Setup 。

---|---
** 2. ** |
单击 Notification Methods 。

** 3. ** |
在 Outgoing Mailserver 域中输入 ** <您的邮件服务器> ** ,在 Identify Sender As 域中输入 dbaalert ,在 Sender's Email 域中输入 [email protected] ,然后单击 Apply。

** 4. ** |
更新成功。 单击页面顶部的 Preferences 。

** 5. ** |
单击 General 选项中 E-mail Addresses 的 Add Another Row 。

** 6. ** |
输入 [email protected] 作为电子邮件地址,单击 Apply 。 然后单击 Database 。

诊断和解决性能问题
返回主题列表
在出现数据库性能问题时,需要您进行诊断和纠正。 有时用户抱怨性能缓慢会使您注意到问题。 其余的时候,您可能注意到主页上的 Host CPU 图中的性能尖峰。
在所有情况下,自动数据库诊断监控器 (ADDM) 都将标记这些问题,它默认每 60 分钟执行一次自上而下的系统分析,并在 Oracle Enterprise Manager 主页上报告它发现的问题。 ADDM 每 60 分钟自动运行一次,和自动工作负载信息库 (AWR) 采集的快照同步发生。 它的输出包含了它确认的每个问题的说明和建议操作。
![]() | 生成性能问题查找结果 |
|---|---|
![]() | 利用 ADDM 解决发现的性能问题 |
生成性能问题查找结果
返回主题列表
为了演示 ADDM 如何工作,您要生成一个性能问题查找结果。 在本文中,您将创建一个等待行锁的会话。 要执行某些如更新和删除的操作,会话必须锁住该行。 执行以下步骤,生成性能问题查找结果:
** 1. ** |
打开终端窗口, **** 执行以下命令:
**sqlplus hr/hr** **create table emp as select * from employees; delete emp; **
**** 
---|---
** 2. ** |
再打开一个终端窗口,并执行以下命令,创建一个行锁冲突:
**sqlplus hr/hr** **delete emp;**

** 3. ** |
单击 Enterprise Manager 窗口中的 Performance 。

** 4. ** |
您将看到会话等待值非常高。 等待大约 10 分钟,然后向下滚动至窗口底部。

** 5. ** |
您现在将创建快照来捕获性能问题。 单击 Snapshots 。

** 6. ** |
单击 Create ,创建快照。

** 7. ** |
单击 Yes ,创建人工快照。

** 8. ** |
正在创建快照。

** 9. ** |
一旦快照创建完成,请单击路径式导航栏中的 database 导航项,然后单击 home 。

** 10. ** |
现在通过主页的 Alert 部分的一个警报,检测到了一个性能问题。

利用 ADDM 解决发现的性能问题
返回主题列表
当遇到性能问题时,您可以使用 ADDM 来解决它。 执行以下操作:
** 1. ** |
单击警报 Database Time Spent Waiting 。
**** 
---|---
** 2. ** |
注意建议的操作是运行 ADDM 来获取更多的关于系统的性能分析。 单击 Additional Advice 。

** 3. ** |
确保从列表中选择了您创建的快照。 注意 SQL statements were found waiting for row lock waits 将影响系统超过 86% 的数据库时间。 单击列表中的这个性能问题查找结果。

** 4. ** |
您看到了解决该性能问题需要采取的操作。 单击 View Rationale 。

** 5. ** |
您将看到引起问题的特定 SQL ID。 单击 Close 。

** 6. ** |
要解决性能问题,请单击路径式导航栏中的 Database 导航项。

** 7. ** |
单击 Performance 。

** 8. ** |
向下滚动,然后选择 Additional Monitoring Links 下的 Blocking Sessions 。

** 9. ** |
确保选择了最高级别的 HR,然后单击 Kill Session。

** 10. ** |
单击 Yes ,终止会话。

** 11. ** |
会话终止。 单击路径式导航栏中的 Database 导航项,然后单击 Home 。

** 12. ** |
注意警报已消失。

使用 SQL Tuning Advisor
返回主题列表
数据库管理员或操作员执行以下任务来响应性地监控并诊断数据库性能问题:
![]() | 查看数据库等待 |
|---|---|
![]() | 检查 Database Wait 类的 TOP SQL |
![]() | 利用 SQL 调整顾问工具调整 SQL 语句 |
![]() | 查看 SQL 语句的 SQL 执行细节 |
查看数据库等待
返回列表
您将首先启动几个工作负载会话。 然后您将查看数据库工作负载。 创建一个名称为 ** $HOME/wkdir ** 的目录。 下载 perflab.tar 文件,并将文件解压缩至 ** $HOME/wkdir ** 目录中。 执行以下步骤:
** 1. ** |
打开一个命令行窗口,然后运行以下 OS 脚本:
**./** **setup_perflab.sh**
注意: 这个脚本运行将花费大约 4 分钟。
---|---
** 2. ** |
回切到 Enterprise Manager 窗口。 选择 Administration 链接。
<img alt="将鼠标移到这个图标上来查看图像" src="http://otn.oracle.com/obe/2day_dba/monitoring/images/tuning
