Oracle数据库调试和优化详解

此文主要是关于Oracle数据库调试和优化方面的相关内容的介绍,还有涉及到Oracle数据库中命里率的相关问题的解答,其中包括不同的算法之间性能的比对。以下就是相关内容的介绍。

关于Oracle中各个命中率的计算以及相关的调优

1)Library Cache的命中率:

计算公式:

1. Library Cache Hit Ratio = sum(pinhits) / sum(pins)

2. SQL>SELECT SUM(pinhits)/sum(pins) FROM V$LIBRARYCACHE;

通常在98%以上,否则,需要要考虑加大共享池,绑定变量,修改cursor_sharing等参数。

2)计算共享池内存使用率:

1. SQL>SELECT (1 - ROUND(BYTES /
(&TSP_IN_M * 1024 * 1024), 2)) * 100
|| '%' FROM V$SGASTAT WHERE NAME =
'free memory' AND POOL = 'shared pool';

其中: &TSP_IN_M是你的总的共享池的SIZE(M),共享池内存使用率,应该稳定在75%-90%间,太小浪费内存,太大则内存不足。

查询空闲的共享池内存:

1. SQL>SELECT * FROM V$SGASTAT WHERE NAME =
'free memory' AND POOL = 'shared pool';

3)db buffer cache命中率:

计算公式:

1.Hit ratio = 1 - [physical reads/(block gets + consistent gets)]

2.SQL>SELECT NAME, PHYSICAL_READS, DB_BLOCK_GETS, CONSISTENT_GETS,
1 - (PHYSICAL_READS / (DB_BLOCK_GETS + CONSISTENT_GETS))

"Hit Ratio" FROM V$BUFFER_POOL_STATISTICS WHERE NAME='DEFAULT';

通常应在90%以上,否则,需要调整,加大DB_CACHE_SIZE,另外一种计算命中率的方法(摘自ORACLE官方文档<>):命中率的计算公式为:数据库性能优化>

1. Hit Ratio = 1 - ((physical reads - physical reads
direct - physical reads direct (lob)) /
(db block gets + consistent gets - physical
reads direct - physical reads direct (lob))

分别代入上一查询中的结果值,就得出了Buffer cache的命中率

1.SQL>SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME
IN('session logical reads', 'physical reads',
'physical reads direct', 'physical reads direct
(lob)', 'db block gets', 'consistent gets');

4)数据缓冲区命中率:

1. SQL> select value from v$sysstat where name =
'physical reads'; SQL> select value from v$sysstat where name
='physical reads direct'; SQL> select value from v$sysstat
where name ='physical reads direct (lob)'; SQL>
select value from v$sysstat where name ='consistent gets';
SQL> select value from v$sysstat where name = 'db block gets';

这里命中率的计算应该是令

1. x = physical reads direct + physical reads direct (lob)

命中率

1. =100 - ( physical reads - x) / (consistent gets + db block gets - x)*100

通常如果发现命中率低于90%,则应该调整应用可可以考虑是否增大数据缓冲区

5)共享池的命中率:

1. SQL> select sum(pinhits-reloads)/sum(pins)*100 "hit radio" from v$librarycache;

假如共享池的命中率低于95%,就要考虑调整应用(通常是没使用bind var )或者增加内存

6)计算在内存中排序的比率:


1.SQL>SELECT * FROM v$sysstat t WHERE NAME='sorts (memory)';

—查询内存排序数

1.SQL>SELECT * FROM v$sysstat t WHERE NAME='sorts (disk)';

—查询磁盘排序数

1. --caculate sort in memory ratio SQL>SELECT
round(&sort_in_memory/
(&sort_in_memory+&sort_in_disk),4)*100||'%' FROM dual;

此比率越大越好,太小整要考虑调整,加大PGA

7)PGA的命中率:

计算公式:BP x 100 / (BP + EBP)

BP: bytes processed

EBP: extra bytes read/written

1.SQL>SELECT * FROM V$PGASTAT WHERE NAME='cache hit percentage';

或者从OEM的图形界面中查看,我们可以查看一个视图以获取Oracle的建议值:

1.SQL>SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024)
target_mb, ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT FROM V$PGA_TARGET_ADVICE; The output
of this query might look like the following: TARGET_MB
CACHE_HIT_PERC ESTD_OVERALLOC_COUNT 63 23 367 125 24 30
250 30 3 375 39 0 500 58 0 600 59 0 700 59 0 800 60 0 900 60 0

在此例中:PGA至少要分配375M,我个人认为PGA命中率不应该低于50%,以下的SQL统计sql语句执行在三种模式的次数:

1.optimal memory size, one-pass memory size, multi-pass memory size:

2.SQL>SELECT name profile, cnt, decode
(total, 0, 0, round(cnt*100/total,4)) percentage FROM
(SELECT name, value cnt, (sum(value) over ())
total FROM V$SYSSTAT WHERE name like 'workarea exec%');

本文来自合作伙伴“DBGEEK”

时间: 2024-08-06 21:21:52

Oracle数据库调试和优化详解的相关文章

oracle数据库tns配置方法详解_oracle

TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client

oracle数据库的恢复教程详解

racle其实也差不多,只不过oracle本身设计的安全性和稳定性都十分好.所以相应的配置文件也要多些. 1.先将原oracle的安装目录和data目录都做个备份.然后安装oracle,安装路径要和原来的一样.安装时选择'只安装软件'即可,不用选择安装数据库.例如:安装在E:oracleproduct10.2.0目录,会发现在该目录只有一个db_1目录. 2.再将db_1NETWORKADMIN目录下的tnsnames.ora.sqlnet.ora.listener.ora文件拷到相应的目录中.

数据库Mysql性能优化详解_Mysql

在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面就将对mysql Key_buffer_size参数的设置进行详细介绍下面为一台以MyISAM为主要存储引擎服务器的配置: mysql> show variables like 'key_buffer_size'; +-----------------+------------+ | Variable_name | Value | +---------

oracle数据库trunc函数用法详解

trunc函数作用是截取日期,能准确到整点.截取后得到的仍为date数据类型. 一.基本用法 1.默认截取到日,例如: select trunc(sysdate) from dual; 结果:2015-06-24 00:00:00 2.截取年: select trunc(sysdate,'YYYY') from dual; 结果:2015-01-01 00:00:00 3.截取月: select trunc(sysdate,'MM') from dual; 结果:2015-06-01 00:00

MySQL my.cnf参数配置优化详解

MySQL my.cnf参数配置优化详解 本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎.其他应用环境请根据实际情况来设置优化. 注:你的MySQL 版本可能和这里用的不同,所以有些参数会废弃,有些被替代,当发现启动异常或者使用异常时,请取消某些配置. # 客户端 # 以下选项会被MySQL客户端应用读取.注意只有M

Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户架构中用户及权限的变化,全局用户和本地用户,管理方式和内部实现,这篇文章来自<深入解析Oracle>一书的摘录. 前情回顾:Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离 COMMON 和 Local 用户 无论在 CDB 和 Non-CDB 数据库中,用户都拥有一个 Schema,拥有一系列的 Schema 对象,在 CDB 中由于 PDB 的引入,用户

Oracle数据操作和控制语言详解_oracle

正在看的ORACLE教程是:Oracle数据操作和控制语言详解.SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL.其中用于定义数据的结构,比如 创建.修改或者删除数据库:DCL用于定义数据库用户的权限:在这篇文章中我将详细讲述这两种语言在Oracle中的使用方法.  DML语言 DML是SQL的一个子集,主要用于修改数据,下表列出了ORACLE支持的DML语句. 插入数据 INSERT语句常常用于向表中插入行,行中可以有特殊数据字段,或者可

cs客户端+oracle数据库调试方法有哪些

问题描述 cs客户端+oracle数据库调试方法有哪些 之前都是一直做服务端的,我知道服务端调试的时候可以是debug,trace,还有浏览器的F12,SqlServer数据库里面也可以查看左右跟数据库有关的操作语句,对客户端跟oracle 数据库不怎么熟悉,请教一下,cs除了debug还能怎么调试程序,oracle,plsql要怎么样才能查看所有数据库的进进出出的sql. 解决方案 有没有大神出来打打酱油什么的啊

WordPress数据库表及字段详解

今天熊哥在朋友的博客看到关于wordpress数据库的介绍,感觉很有用,相信对同样在使用wordpress的同学也很有用,所以就拿过来分享一下.希望对自己和大家有所帮助. [废话] 记得刚接触网站时对数据库一点概念也没有,那时公司网站要换服务器,于是就单纯的转移了网站文件,结果可想而知.一翻折腾,在糊里糊涂中按网上的教程终于搞定,享受成就感时也第一次接触了数据库.那时感觉数据库高端深奥遥远,从没想过自己以后会跟数据库再有交集:而后,自己成为一名数据库工程师时也没想起当年数据库曾给自己带来困扰.现