Oracle常用性能监控SQL语句
### Oracle常用性能监控SQL语句知识点详解 #### 1. 监控高磁盘读取的SQL区域 **SQL语句:** ```sql select * from sys.v_$sqlarea where disk_reads > 100; ``` - **知识点解读:** - `sys.v_$sqlarea` 视图提供了SQL执行区域的信息,包括执行次数、解析次数等。 - `disk_reads` 字段记录了SQL执行时从磁盘上读取的数据块数量。 - 该查询用于找出磁盘读取超过100次的SQL语句,以便优化这些SQL语句减少磁盘IO操作。 #### 2. 查询等待事件统计 **SQL语句:** ```sql select event, sum(decode(wait_time, 0, 0, 1)) "Prev", sum(decode(wait_time, 0, 1, 0)) "Curr", count(*) "Tot" from v$session_wait group by event order by 4; ``` - **知识点解读:** - `v$session_wait` 视图提供关于会话等待时间的信息,可以用来诊断系统中的等待事件。 - `wait_time` 字段表示等待时间是否为零(0表示没有等待,非0表示有等待)。 - 此查询通过分组统计不同的等待事件,计算出每个事件的当前等待次数 (`Curr`)、前一个采样点的等待次数 (`Prev`) 和总的等待次数 (`Tot`),便于理解当前系统的等待情况。 #### 3. 检查回滚段状态 **SQL语句:** ```sql select name, waits, gets, waits/gets "Ratio" from v$rollstata, v$rollname b where a.usn = b.usn; ``` - **知识点解读:** - `v$rollstata` 和 `v$rollname` 视图分别提供关于回滚段的状态和名称信息。 - `waits` 字段表示回滚段等待的次数。 - `gets` 字段表示回滚段获取的次数。 - 通过计算 `waits/gets` 的比例,可以帮助我们了解回滚段的使用效率。 #### 4. 查询当前活跃会话正在执行的SQL语句 **SQL语句:** ```sql select user_name, sql_text from v$open_cursor where sid in (select sid from (select sid, serial#, username, program from v$session where status = 'ACTIVE')); ``` - **知识点解读:** - `v$open_cursor` 视图包含了所有当前打开的游标信息,即正在执行的SQL语句。 - `sid` 字段标识了会话ID。 - `status` 字段表示会话的状态,其中 `'ACTIVE'` 表示活跃状态。 - 此查询结合了 `v$session` 和 `v$open_cursor` 视图,用于找出所有活跃会话正在执行的SQL语句,对于排查性能问题非常有用。 #### 5. 表空间中表的大小排序 **SQL语句:** ```sql select segment_name, tablespace_name, bytes, blocks from user_segments where segment_type = 'TABLE' ORDER BY bytes DESC, blocks DESC; ``` - **知识点解读:** - `user_segments` 视图提供了用户对象的段信息。 - `segment_type` 字段标识了段类型,`'TABLE'` 表示表。 - `bytes` 字段记录了段占用的空间大小。 - `blocks` 字段记录了段占用的数据块数。 - 此查询用于找出用户所有的表,并按照空间大小降序排列,有助于管理和优化表空间使用。 #### 6. 计算自由空间碎片化指数 **SQL语表:** ```sql select tablespace_name, round(sqrt(max(blocks) / sum(blocks)) * (100 / sqrt(sqrt(count(blocks)))), 2) FSFI from dba_free_space group by tablespace_name order by 1; ``` - **知识点解读:** - `dba_free_space` 视图提供了数据库中每个表空间的自由空间信息。 - `blocks` 字段表示自由空间的块数。 - 此查询通过计算每个表空间的自由空间碎片化指数(FSFI),帮助评估表空间中自由空间的分布情况。 #### 7. 查看表空间使用率 **SQL语句:** ```sql select b.file_id, b.tablespace_name, b.bytes, (b.bytes - sum(nvl(a.bytes, 0))) "Used", sum(nvl(a.bytes, 0)) "Free", sum(nvl(a.bytes, 0)) / (b.bytes) * 100 "Free %" from dba_free_space a, dba_data_files b where a.file_id = b.file_id group by b.tablespace_name, b.file_id, b.bytes order by b.file_id; ``` - **知识点解读:** - `dba_free_space` 视图提供了每个文件中自由空间的信息。 - `dba_data_files` 视图包含了数据文件的信息。 - 此查询用于计算每个文件的已用空间和剩余空间,并进一步计算表空间的使用率。 #### 8. 查看会话事务信息 **SQL语句:** ```sql SELECT r.name "TXN", s.sid, s.serial#, s.username "User", t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo, substr(s.program, 1, 78) FROM sys.v_$session s, sys.v_$transaction t, sys.v_$rollname r WHERE t.addr = s.taddr AND t.xidusn = r.usn ORDER BY t.cr_get, t.phy_io; ``` - **知识点解读:** - `v_$session` 视图提供了关于会话的信息。 - `v_$transaction` 视图提供了关于事务的信息。 - `v_$rollname` 视图提供了关于回滚段的信息。 - 此查询通过连接这三个视图来查看所有活跃事务的信息,包括事务状态、物理IO次数等。 #### 9. 查看SGA剩余内存 **SQL语句:** ```sql select name, sgasize / 1024 / 1024 "Allocated (M)", bytes / 1024 "Used (K)", round(bytes / sgasize * 100, 2) "Used %" from (select sum(bytes) sgasize from sys.v_$sgastat) s, sys.v_$sgastat f where f.name = 'free_memory'; ``` - **知识点解读:** - `v_$sgastat` 视图提供了SGA的统计信息。 - `free_memory` 字段表示SGA中的剩余内存。 - 通过计算SGA的分配大小和剩余内存,可以评估SGA的使用率。 #### 10. 监控文件系统I/O **SQL语句:** ```sql select df.tablespace_name "Name", df.file_name "File", f.phyrdspy, f.phyblkrdpbr, f.phywrtspyw, f.phyblkwrtpbw from v$filestat f, dba_data_files df where f.file# = df.file_id order by df.tablespace_name; ``` - **知识点解读:** - `v$filestat` 视图提供了关于文件系统I/O的统计信息。 - `dba_data_files` 视图提供了数据文件的信息。 - 此查询用于查看不同文件的物理读写情况,帮助识别I/O瓶颈。 #### 11. 查看SGA逻辑读与物理读比率 **SQL语句:** ```sql select a.value + b.value "Logical Reads", c.value "Physical Reads", round(100 * ((a.value + b.value) - c.value) / (a.value + b.value)) "Buffer Hit Ratio" from v$sysstat a, v$sysstat b, v$sysstat c where a.statistic# = 38 and b.statistic# = 39 and c.statistic# = 40; ``` - **知识点解读:** - `v$sysstat` 视图提供了关于系统级别的统计信息。 - `statistic#` 字段用于标识统计指标。 - 通过计算逻辑读和物理读的数量,可以评估缓存命中率,进而判断缓存的使用效率。 #### 12. 查看SGA缓存命中率 **SQL语句:** ```sql select parameter, gets, Getmisses, getmisses / (gets + getmisses) * 100 "Miss Ratio", (1 - (sum(getmisses) / (sum(gets) + sum(getmisses)))) * 100 "Hit Ratio" from (select * from v$librarycache) l; ``` - **知识点解读:** - `v$librarycache` 视图提供了关于库缓存的信息。 - `gets` 字段表示从库缓存获取的次数。 - `getmisses` 字段表示未能从库缓存获取的次数。 - 此查询用于计算库缓存的命中率和未命中率,帮助评估库缓存的有效性。 通过以上SQL语句的详细介绍,我们可以看到Oracle数据库性能监控的重要性和复杂性。每一条SQL语句都针对特定的问题进行了设计,通过对这些SQL语句的理解和应用,可以有效地提升数据库的性能并解决各种性能问题。
- s3162970252020-09-03看星下载吧,同学们
- 粉丝: 3
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助