第 10 章:监视和调优数据库

本章向您介绍通过 Enterprise Manager 执行的一些监视和调优操作。

大约 1 小时

主题

本教程包括以下主题:

将光标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图将其隐藏。

开始本教程之前,您应该:

1.

完成第 2 章:安装 Oracle 软件和构建数据库 OBE

2.

完成第 3 章:Oracle Enterprise Manager 入门 OBE

3.

完成第 4 章:配置网络环境 OBE

4.

完成第 5 章:管理 Oracle 实例 OBE

5.

完成第 6 章:管理数据库存储结构 OBE

6.

完成第 7 章:管理用户和安全性 OBE

7.

完成第 8 章:管理模式对象 OBE

8.

完成第 9 章:执行备份和恢复 OBE

返回主题列表

主动监视数据库

警报帮助您主动监视数据库。大多数警报是在超过特定的量度阈值时发出的通告。您可以为每一个警报设置严重阈值和警告阈值。这些阈值即为边界值,如果超过了这些边界值,则指示系统处于非预期的状态。

在本节中,您将执行以下任务:

A 创建具有指定阈值的表空间和表
B. 触发表空间的空间使用率警报
C. 设置通知

创建具有指定阈值的表空间和表

首先创建包含一个 20 MB 的数据文件的一个新表空间。这个表空间应本地管理,并使用自动段空间管理 (ASSM)。然后您将在这个新的表空间中创建一个新的表。这个表将把 Enable Row Movement 选项设为 yes,以允许表中的空间回收。执行以下步骤:

1.

单击 Database Home 页面中的 Server 链接。

2.

单击 Tablespaces 链接。

3.

单击 Create 按钮。

4.

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

5.

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

单击 OK,创建表空间。

6.

选择新表空间 TBSALERT,然后单击 Edit

单击 Thresholds,指定空间使用率警告和严重阈值水平。

7.

选择 Space Used (%) 部分中的 Specify Thresholds。在 Warning% 域中输入 60,将严重阈值级别设为 68%。单击 Apply

8.

您将收到一条更新确认消息。单击 Database Instance 链接,返回 Server 属性页面。

9.

选择 Schema 选项卡。单击 Database Objects 部分中的 Tables 链接。

10.

单击 Create

11.

接受默认选项 Standard (Heap Organized),然后单击 Continue

12.

在 Name 域中输入 employees1。指定 SYSTEM 作为 Schema,指定 TBSALERT 作为 Tablespace。单击 Define Using 下拉列表,选择 SQL。页面刷新。在 CREATE TABLE AS 域中输入 select * from hr.employees。单击 Options

13.

从 Enable Row Movement 下拉菜单中选择 Yes。单击 OK 完成表创建。

14.

表已创建完成。单击 Database Instance 路径式导航栏。

返回主题

触发表空间的空间使用率警报

您现在将更新表,触发空间利用率警报。执行以下步骤:

1.

打开一个 SQL*Plus 会话,按如下方式以 SYSTEM 用户身份进行连接:

sqlplus system/<password>

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,单击 Server 页面中的 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 表空间的空间使用率现在已经超过了严重阈值级别 (60%)。

10.

在您等待空间使用率警报显示在 Enterprise Manager 主页上时,请仔细查看表段统计数据。单击 Database 路径式导航栏,随后单击 Schema 选项卡,然后单击 Tables 链接。

11.

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

12.

选择 EMPLOYEES1 表。单击 Edit

13.

单击 Segments

14.

注意 EMPLOYEES1 表中浪费空间的百分率。您或许能够通过回收表中未使用的空间来解决表空间空间使用率警报。

还是在该页面中,您可以为 Space Usage Trend 指定一个日期范围,然后单击 Refresh 来规划 EMPLOYEES1 表未来的空间使用率。因为在 EMPLOYEES1 表上没有足够的活动历史记录,所以您在空间使用率分析图中看不到非常有意义的数据。单击 Database 选项卡。

15.

单击浏览器的刷新/重新载入按钮几次。向下滚动至 Home 页面的 Space Summary 部分。找到 Problem Tablespaces 旁边的一个红色 x 标记和一个数字。向下滚动至 Alerts 表。

16.

您将看到一个 Tablespaces Full 警报。单击 Tablespace TBSALERT is 75 percent full 链接。(注意:您系统显示的数据可能略有不同)。

17.

显示 Tablespaces 页面。请注意,单击 Segment Advisor Recommendations 按钮可以查看有关如何解决问题的建议。然而,出于本练习的目的,此时不要做出任何更改。注:如果您无法看到图片,请手动刷新页面。

仍然在此页面中,继续进行下一个练习。

返回主题

设置通知

当出现需要您干预的事件时,您可以选择性地提供通知。默认情况下,严重状态的警报(如 Database Down、Generic Alert Log Error Stats 和 Tablespace Used)都设置为提供通知。执行以下步骤:

1.

单击 Database Home 页顶部的 Setup

2.

单击 Notification Methods

3.

在 Outgoing Mail (SMTP) Server 域中输入<您的邮件服务器>,在 Identify Sender As 域中输入 dbaalert,在 Sender's E-mail Address 域中输入 notify01@oracle.com,然后单击 Apply

4.

更新成功。单击页面顶部的 Preferences

5.

单击 E-mail Addresses 部分中的 Add Another Row

6.

输入 notify01@oracle.com 作为电子邮件地址,单击 Apply。随后单击 Database 返回 Database Home 页面。

返回主题

诊断和解决性能问题

在出现数据库性能问题时,需要您进行诊断和纠正。有时用户抱怨性能缓慢会使您注意到某些问题。其余的时候,您可能注意到 Home 页上 Host CPU 图中的性能尖峰。

在所有情况下,Automatic Database Diagnostics Monitor (ADDM) 都将标记这些问题,它默认每 60 分钟执行一次自上而下的系统分析,并在 Oracle Enterprise Manager Home 页上报告它发现的问题。ADDM 每 60 分钟自动运行一次,与自动负载信息库 (AWR) 采集的快照同步。它的输出中含有找到的每个问题的说明和建议的操作。

A 制造一个性能问题
B. 利用 ADDM 解决发现的性能问题

制造一个性能问题

为了演示 ADDM 如何工作,您要制造一个性能问题。在本文中,您将创建一个等待行锁的会话。要执行像更新和删除这样的某些操作,会话必须锁住该行。执行以下步骤,制造一个性能问题:

1.

打开终端窗口,执行以下命令:

sqlplus hr/<password>
create table emp as select * from employees;
delete emp; 

2.

打开另一个终端窗口,执行以下命令创建一个行锁冲突:

sqlplus hr/<password>

delete emp;

3.

单击 Enterprise Manager 窗口中的 Performance

4.

单击 Average Active Sessions 部分中的 Application

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

.

5.

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

6.

单击 Create,创建快照。

7.

单击 Yes,创建手动快照。

8.

快照创建完成后,单击 Database 选项卡。

9.

向下滚动页面。现在检测到了一个性能问题,并且显示为 ADDM Performance Analysis 部分中的一个警报。

返回主题

利用 ADDM 解决发现的性能问题

当遇到性能问题时,您可以使用 ADDM 来解决它。执行以下步骤:

1.

单击所发现的问题 Row lock waits

2.

单击 Rationale 部分中的 SQL ID

3.

查看 SQL Details 页面中的信息。单击 Database Instance 路径式导航栏。

4.

执行 Performance。向下滚动,然后选择 Additional Monitoring Links 下的 Blocking Sessions

注: 如果 Additional Monitoring Links 中未出现 Blocking Sessions,请单击 Home 返回 Database Home 页面,然后再次单击 Performance 选项卡。

5.

确保选择了最高级别的 HR,然后单击 Kill Session

6.

单击 Yes 终止会话。

7.

会话终止。单击 Database 选项卡。

8.

返回您的 SQL*Plus 会话,退出各会话。

返回主题

使用 SQL Tuning Advisor

创建一个名为 $HOME/wkdir 的目录。下载 sqltune.tar 文件,并将该文件解压缩至 $HOME/wkdir 目录中。执行以下步骤:

1.

在 Enterprise Manager Database Control 中以 SYSDBA 身份连接,导航到 Database Control Home 页面的 Performance 选项卡。在 Performance 页面中,确保将 View Data 域设为 Real Time:15 second Refresh

2.

打开一个以 oracle 用户连接的终端模拟器窗口。将当前目录更改为 wkdir 目录。随后,在操作系统提示符下输入以下命令:

./setup_dina.sh

3.

按如下方式执行 start_dinas.sh 脚本:

./start_dinas.sh

4.

返回 Enterprise Manager,观察 Performance 页面大约六分钟的时间。

5.

返回 Database Home 页面。您现在将确定问题。如果与有问题的时间段相对应的时间对应于数据库控制检测的最新 ADDM 运行,则应直接在 Database Control Home 页的 ADDM Performance Analysis 部分中查找与正确的性能分析相对应的链接。如果您未看到 ADDM 结果,请返回 Performance 页面,单击 Average Active Sessions 图下方的 View ADDM Run 图标。

单击对数据库时间影响最大的结果。它应与 SQL 调优建议相对应。

6.

Performance Finding Details 页面中,查看 ADDM 分析捕获的高负载 SQL 语句。所提供的信息表示对该语句进行调优将获得重大好处。单击 SQL text

7.

显示 SQL Details 页面。单击 Schedule SQL Tuning Advisor

8.

显示 Schedule Advisor 页面。单击 Submit

9.

SQL Tuning Advisor 任务调度完成。任务完成时将显示此页面。

10.

显示建议。在本示例中,建议您创建 SQL 配置文件以获得更好的执行计划。单击 Implement

11.

在 Confirmation 窗口中,单击 Yes

12.

SQL 配置文件创建完毕。

13.

返回终端窗口。要查看已实施的更改,必须重新执行 SQL。通过执行以下命令停止和启动负载:

./stop_dinas.sh

./start_dinas.sh

14.

返回 Enterprise Manager 并访问 Performance 页面查看调优的好处。

15.

返回终端窗口。执行以下命令来清理环境:

./stop_dinas.sh

./cleanup_dina.sh

返回主题列表

使用 SQL Access Advisor

SQL Access Advisor 提供了许多过程,可以调用这些过程来帮助确定创建和删除哪些物化视图和索引。利用根据您的模式假定的负载,或实际的负载(可能由用户提供、来自 Oracle Trace 或来自 SQL 缓存的内容)来作出决策。

还可以根据不同的条件对负载进行筛选,如只使用包含这些表的查询,或在这个范围中有优先权的查询。

A 准备环境
B. 利用 SQL 缓存获取建议
C. 查看和执行建议

准备环境

执行以下步骤,为使用 SQL Access Advisor 准备好环境。当 Advisor 运行时,物化视图和索引可能存在,但为了此示例的目的,把它们删除了,以便您可以看到 Advisor 的建议。您还需要设置缓存,以便 SQL Access Advisor 能够生成建议。执行以下步骤:

1.

打开一个终端窗口,然后执行以下命令清理环境:

sqlplus system/<password>

SELECT * FROM user_objects
WHERE object_type = 'MATERIALIZED VIEW';

如果存在以下任何物化视图,请按如下所示删除它们:

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;

2.

现在您需要创建缓存。确保 SH 用户已经解锁,然后执行以下命令:

alter system flush shared_pool;
grant advisor to sh;

connect 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 的建议。执行以下步骤:

1.

向下滚动至 Database Home 页面底部,然后单击 Related Links 下的 Advisor Central

2.

单击 SQL Advisors 链接。

3.

单击 SQL Access Advisor

4.

选择 Recommend new access structures,然后单击 Continue

5.

确保选中了 Current and Recent SQL Activity。展开 Filter Options

选择 Filter Workload Based on these Options。选择 Include only SQL statements executed by these users。在 User 域中输入 SH,然后单击 Next

6.

选择 Indexes and Materialized Views,然后单击 Next

7.

输入任务名 SQLACCESS<今天的日期>,Schedule Type 选择 Standard,然后单击 Next

8.

在概要窗口中,单击 Submit

9.

将显示一条确认消息。

返回主题

查看和执行建议

现在您可以查看结果,如果您愿意可以执行。执行以下步骤:

1.

在 Advisor Central 页面中,确保选择了您的作业,随后单击 View Result

2.

显示 Summary 页面。单击 Recommendations

单击 Recommendation ID 1,查看建议的详细信息。

3.

在这里您可以自定义对象名称、模式和表空间,以执行建议。向下滚动,将 Create Materialized View 的 Schema Name 更改为 SH,然后单击 OK

4.

单击 Schedule Implementation 执行建议。

7.

在 Job Name 域中输入 SQLACCESSIMPL<今天的日期>,然后单击 Submit

8.

执行作业创建完成,现在正在执行。

9.

单击 Database 返回 Database Home 页面。单击 Schema

10.

在 Materialized Views 部分中单击 Materialized Views

11.

在 Schema 域中输入 SH,然后单击 Go

12.

您会看到新创建的物化视图出现在列表中。单击路径式导航栏中的 Database,然后单击 Home 选项卡。

返回主题

使用 Memory Advisor 启用自动共享内存管理

在本节中,您将主动管理并将一些与 Oracle 实例内存配置相关的任务自动化。通过自动化内存配置,您有更多的时间来处理影响您企业的应用或业务的实际问题。

Memory Advisor 是 Oracle 数据库内部的一个智能专家系统,它为各种 SGA 和 PGA 组件主动确定最优设置。实现自动化后,Oracle 将根据负载的需求自动调整各种池和缓存的设置。

在本节中,您将验证自动共享内存管理已经启用。如果被禁用,可按照下面的步骤启用它。

1.

向下滚动至 Home 页底部,然后单击 Related Links 下的 Advisor Central

2.

选择 Memory Advisors

3.

确认启用了 Automatic Shared Memory Management。如果您希望禁用 Automatic Shared Memory Management,请单击 Disable。单击 Database 选项卡返回 Database Home 页面。

返回主题列表

在本教程中,您学习了如何:

创建一个具有指定阈值的表空间。
触发表空间使用率警报。
设置量度阈值。
制造一个性能问题。
利用 ADDM 解决发现的性能问题。

返回主题列表

将光标置于该图标上可以隐藏所有的屏幕截图。