`

Oracle9i的增强型内存使用率查看表

 
阅读更多
增强了的v$process查看表

Oracle已经通过增强v$process查看表来实现内存监控。v$process查看表里的新数据列允许你显示当前所有Oracle进程的程序全局区(PGA)区域的细节。PGA是内存里的一个专门区域,被单独的进程用来执行内存密集型函数,例如排序。

v$process查看表的三个新数据列包括pga_used_memorypga_allocated_memorypga_max_memory。从这些刻度表里,你可以看到Oracle环境里各个后台进程的实际内存利用率,还可以查看每个到数据库的连接所需要的内存。为了说明这个问题,考虑一下下面这个查询:

col c1 heading 'Program|Name' format a30
col c2 heading 'PGA|Used|Memory' format 999,999,999
col c3 heading 'PGA|Allocated|Memory' format 999,999,999
col c4 heading 'PGA|Maximum|Memory' format 999,999,999

select
program c1,pga_used_mem c2,pga_alloc_mem c3,pga_max_mem c4
from
v$process
order by
c4 desc;

Listing A是这个脚本的输出结果。

这个例子深入到了Oracle数据库引擎的行为中。例如,你可以看到Oracle的日志编写器(LGWR)进程是PGA内存最大的消耗者,其原因是很清楚的:Oracle的日志编写器进程必须把重做日志镜像(redo log image)从Oracle的日志缓冲器(在内存里)里传输到在线重做日志文件系统里。你还可以看到Oracle的数据库编写器(DBW0)进程也有很高的内存占用率,这也是有原因的:Oracle的异步I/O进程必须使用大量的内存资源来保证所有数据库的更改都被成功地写到数据库里。

各个进程所要使用的内存大小

在Oracle9i里查看内存使用的真实值就是查看各个进程的内存使用率。Oracle9i现在有一个共享的内存区域,叫做pga_aggregate_target。在使用Oracle的多线程服务器时, pga_aggregate_target参数的工作方法和Oracle的大内存池相类似,只有一个显著的不同点。有了一个共享内存区域,Oracle的各个进程,在进行排序和散裂合并时,就可以不受限制地使用多达内存池总量5%的内存。这相对于Oracle8i来说是个重大的改进,它原来要求每个PGA区域的大小必须限制在sort_area_size初始化参数所设定的值里。

Oracle9i还提供了一个叫做v$pgastat的新字典查看表。v$pgastat查看表能显示数据库内每个内存区域内的内存使用率的总量。这些信息可以告诉你内存使用率的峰值,还能允许你根据对系统的相对压力来调整内存需求。以下是一个简单的对v$pgastat的查询:

column name format a40
column value format 999,999,999
select name,value
from
v$pgastat
order by
value desc;

Listing B包含了这个脚本的输出结果。

从这个列表里你可以看到pga_aggregate_target的值以及这个实例所使用的所有内存区域的峰值。现在我们再来看看最佳、单周期和多周期的内存运行情况。

当Oracle的进程需要进行操作时,例如排序或者散裂合并,它就到pga_aggregate_target区域里的共享内存区里,尝试取得足够多的相互毗邻的内存帧来执行操作。如果这个进程能够立即取得这些内存帧,它就被标记为最优内存访问。如果需要在单周期内通过pga_aggregate_target取得所需的内存,那么内存分配就被标记为单周期。如果所有的内存都在使用中,那么Oracle也许就不得不通过pga_aggregate_target在多周期内取得内存,这叫做多周期。

记住:内存的速度是非常非常快的,绝大多数排序或者散裂合并都是在几微秒内完成的。Oracle允许单个进程最多使用pga_aggregate_target 5%的内存,并行操作最多可以被允许消耗PGA内存池30%的内存。

多周期运行显示了内存的不足,所以你总应该分配足够的内存以保证至少有95%连接上了的任务能够最佳地获得内存。

你可以查询这里列出的v$sysstat查看表来取得workarea运行的信息:

col c1 heading 'Workarea|Profile' format a35
col c2 heading 'Count' format 999,999,999
col c3 heading 'Percentage' format 99
select name c1,cnt c2,decode(total, 0, 0, round(cnt*100/total)) c3
from
(
select name,value cnt,(sum(value) over ()) total
from
v$sysstat
where
name like 'workarea exec%'
);

Listing C是输出结果。

至少有95%的任务应该有最佳workarea运行情况。在以上的输出中,你可以看到所有的workarea运行情况,它们能运行在最佳、单周期和多周期模式下。

这个列表提供了和pga_aggregate_target区域大小相关的重要信息。它还能指示出内存区域的过量分配。如果最佳workarea运行的百分比持续保持在98到100%,你就可以从pga_aggregate_target里心安理得地“盗取”内存帧,并把它们分配到Oracle SGA(例如db_cache_size)的其他区域里,那里可能更需要内存资源。

查看各个workareas

Oracle还提供了数据字典查看表,它能显示SQL声明的运行计划里各个步骤所使用的内存大小。其价值对正确设置hash_area_size和其他内存密集参数的内存大小是不可估量的。

v$sql_workarea_active查看表显示了Oracle9i数据库里各个workarea的内存使用数量。

而且,Oracle提供了多个用来合并表格的方法,每个都需要不同数量的内存。Oracle9i SQL优化器能够分辨分类归并联合、嵌套循环合并、、散裂合并和星型合并方法。在有些情况下,散裂合并比分类归并联合运行得更快,但是散裂合并需要更多的内存资源和对hash_area_size参数更高级的设置。

以下是对v$sql_workarea_active查询表的查询:

Select
to_number(decode(SID, 65535, NULL, SID)) sid,
operation_type OPERATION,
trunc(WORK_AREA_SIZE/1024) WSIZE,
trunc(EXPECTED_SIZE/1024) ESIZE,
trunc(ACTUAL_MEM_USED/1024) MEM,
trunc(MAX_MEM_USED/1024) "MAX MEM",
number_passes PASS
from
v$sql_workarea_active
order by 1,2;

Listing D是输出结果。

在Listing D里,你可以看到SQL运行每一步的内存使用数量。一个SQL声明执行Group By排序需要73 KB内存。你还可以看到运行散裂合并的两个SQL声明的系统ID(SID)。这些散裂合并分别使用了3到13 MB内存来建立内存中的散裂表。

一个非常重要的工具

Oracle正在成为最灵活、最复杂的数据库管理系统之一。数据库组件的内存使用查看表是管理你Oracle数据库非常重要的工具。有了它,Oracle专家能够更加容易地保证内存使用率的所有设置对所有应用程序都是最优的。

分享到:
评论

相关推荐

    Oracle 9i Client (Oracle 9i 客户端) 简化版 (不安装Oracle客户端,也可以使用PLSQL Developer)

    1、本软件可作为简单的Oracle9i客户端使用,如用户对Oracle有更高的使用要求,请正式安装Oracle客户端或服务器。 2、本软件安装后,可使用自带的SQL Plus连接Oracle服务器,支持EXP、IMP命令。用户可以配合PLSQL ...

    oracle 9i 全部下载链接

    oracle 9i所有版本最新下载链接 ...Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk1.zip ...

    oracle9i物理结构,oracle9i物理结构

    oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构,oracle9i物理结构

    oracle9i下载地址

    oracle9i下载地址, 分三个IOS文件, 加压即可安装.

    Oracle 9i LogMiner工具使用说明

    Oracle 9i LogMiner工具使用说明

    Oracle9i 数据库安装

    利用 DBCA 建立 Oracle9i 数据库 在使用 DBCA 之前,先检视一下目前环境。以我的系统为例:操作系统为 SuSE Linux 7.2,安装了 Oracle9i Enterprise Edition Release 9.0.1,Oracle9i 数据库的 ORACLE SID 设定为 ...

    Oracle9i开发文档

    Oracle9i的开发学习资料,PDF中文版,非扫描版,13章全,附带8个章节使用的SQL语句和代码。 第一章 从零开始 Oracle9i基础 第二章 构建环境 安装Oracle9i 第三章 管理入门 数据库服务器的管理 第四章 数据利器 SQL ...

    Oracle9i+Windows下安装

    百度云盘下载地址https://pan.baidu.com/s/1iU5zzuVbm2-uJtzQGr98zw windows下安装Oracle9i

    Oracle9i客户端精简版

    Oracle9i客户端精简版。 Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版Oracle9i客户端精简版

    oracle9i全备份导入到11g说明

    文档简单介绍了关于oracle9i全备份,导入oracle11g时,因blocksize 不一致的处理方式,帮助大家解决此类问题。

    Oracle 9i 的安装(图解)

    Oracle 9i 的安装使用 Oracle 9i 的安装(图解) Oracle 9i 的安装使用 Oracle 9i 的安装(图解)

    oracle9i310.rar

    oracle9i简版客户端,极适合初学者,虚拟机,老旧电脑和xp用户,耗资源极小,可连接10g,11g

    Oracle9i安装 有图安装

    • Oracle9i RMAN备份及恢复步骤 • [图]在LINUX AS3 下安装 oracle9i • 在.NET中调用Oracle9i存储过程经验 • Windows下Oracle9i数据库...• Oracle9i进程内存占用问题解决方法 • 在所有linux版本安装oracle9i

    oracle9i310精简版

    Oracle9i客户端精简版基于Oracle 9.0.1.0.1制作,去除了冗余的功能,仅保留ODBC和OLE DB功能,同时保留SQL*PLUS(包括命令行版和windows版)和SQL*Loader的完整功能。提供完美的卸载功能(即卸载后完全恢复到安装前...

    Oracle 9i 安装 配置 图文

    Oracle 9i 图文详细安装配置 Oracle 9i 图文详细安装配置 Oracle 9i 图文详细安装配置 Oracle 9i 图文详细安装配置

    Oracle9i PL/SQL从入门到精通

    Oracle9i PL/SQL从入门到精通

    Oracle9i数据库备份和恢复方案

    Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案Oracle9i数据库备份和恢复方案

    Oracle 9i10g 数据库管理详细

    Oracle 9i10g 数据库管理详细

    Oracle 9i 10g 11g odbc driver数据库连接驱动

    Oracle 9i 10g 11g odbc driver数据库连接驱动

Global site tag (gtag.js) - Google Analytics