consistent gets :consistent_gets是从回滚段中读到的前映(或叫读取一致性影象), 看见的数据是查询开始的时间点的,所以若存在block在查询开始后发生了变化的情况,则必须产生 before image 然后读数据,这就是一致读的含义
查询就是表示 consistent gets (query mode),因为查询要保证所获取的数据的时间点的一致性,所以叫一致读,即使是从当前 buffer 获得的数据,也叫 consistent gets ,这仅仅表达一种模式一种期望,并不表示真实的是从 当前buffer 获得 还是从回滚段获取数据产生的 bufore image 。
db block gets : current mode , 不管这个块上的数据是否可能存在 before image ,也就是说不管是否存在回滚中数据可以 回滚,只看见当前最新块的数据,即使别人正在更新,也看见别人更新状态的数据,比如dml的时候就不需要看见别人更改前的数据,而是看见正在更改的,当然 同时,若操作相同数据则被lock住。也就是说一次查询中看见的数据可能不在同一个时间点上,比如一个大的dml,当dml 开始更新一个非常大的表后,这个表更新的过程中,有一个进程去把该表末尾的一个记录更新了,然后这个大更新抵达该记录的时候会被阻塞的,若该进程事物提 交,则大更新会覆盖该事务的更新,也就是说,这个大更新所看见的数据是当前的,不具有时间点的一致性,所以叫 current mode,个人认为db block gets这个词用的不好, 容易让人误解. 如果改成inconsistent gets可能会更准确一些
别人blog写的。
SQL> alter system flush buffer_cache;
系统已更改。
SQL> set autot
用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
SQL> set autot traceonly stat
SQL> select * from t;
已选择798945行。
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets --这个为0
63677 consistent gets
11118 physical reads
0 redo size
85740332 bytes sent via SQL*Net to client
586267 bytes received via SQL*Net from client
53264 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
798945 rows processed
SQL> select * from t;
已选择798945行。
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
69587 consistent gets --全是一致性得到,因为已经在Buffer_cache中
0 physical reads
0 redo size
85740332 bytes sent via SQL*Net to client
586267 bytes received via SQL*Net from client
53264 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
798945 rows processed
SQL> select * from t for update;
已选择798945行。
统计信息
----------------------------------------------------------
476 recursive calls
812439 db block gets --更新时,产生这个
884932 consistent gets
5 physical reads
160912940 redo size
73057198 bytes sent via SQL*Net to client
586267 bytes received via SQL*Net from client
53264 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
798945 rows processed
SQL> rollback;
回退已完成。
SQL> alter sytem flush buffer_cache;
alter sytem flush buffer_cache
*
第 1 行出现错误:
ORA-00940: 无效的 ALTER 命令
SQL> alter system flush buffer_cache;
系统已更改。
SQL> select * from t for update;
已选择798945行。
统计信息
----------------------------------------------------------
476 recursive calls
812437 db block gets
884836 consistent gets
11122 physical reads
160903012 redo size
73057198 bytes sent via SQL*Net to client
586267 bytes received via SQL*Net from client
53264 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
798945 rows processed
SQL> alter system flush buffer_cache;
系统已更改。
SQL> desc t;
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> update t set owner='a';
已更新798945行。
统计信息
----------------------------------------------------------
4564 recursive calls
7008787 db block gets
1123165 consistent gets
13434 physical reads
555747124 redo size
683 bytes sent via SQL*Net to client
558 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
16 sorts (memory)
0 sorts (disk)
798945 rows processed
SQL> select * from t;
已选择798945行。
统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
63677 consistent gets
0 physical reads
0 redo size
82886810 bytes sent via SQL*Net to client
586267 bytes received via SQL*Net from client
53264 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
798945 rows processed
可以理解 为:
consistent gets : 是由 查询语句产生的, 不管所查的数据是否需要构造前镜像,都要算进去
db block gets: 是由update,delete,select for update 产生的
相关推荐
如果物理读取的比例较高(`1 - PHYSICALREADS / (DBBLOCKGETS + CONSISTENTGETS) ),则可能需要增加DB BLOCK BUFFERS的值。 #### 三、I/O优化 I/O性能对于Oracle数据库至关重要,因为大多数性能瓶颈都与磁盘I/O...
- **`consistent gets`**:这是除`db block gets`外其他所有逻辑读的统称,包括对表、索引的数据块读取以及为了确保数据一致性而对UNDO数据块的读取。 ##### 2. 统计数据来源 Oracle通过一系列视图如`v$sysstat`、`...
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'; 通常情况下,...
SQL 执行计划简单分析 在 SQL 优化中,分析执行计划是一个非常重要的步骤。执行计划可以帮助我们了解 SQL ...递归调用、DB Block Gets 和 Consistent Gets 等统计信息可以帮助我们了解 SQL 语句的执行过程和资源消耗。
计算高速缓冲区命中率的公式为:Hit Ratio = 1 - (physical reads / (db block gets + consistent gets))。对于一般环境,命中率要求大于80%,而在UNIX环境下使用RAW DEVICE时,要求更高,需大于90%。如果命中率低于...
它分为两大类:“db block gets”和“consistent gets”。 - **db block gets**:这类逻辑读发生在需要对数据块中的数据进行修改时,即当会话需要将一个数据块读入buffer cache,并以当前模式(Current Mode)进行...
- **计算公式**:`Hit Ratio = 1 - (physical reads / (db block gets + consistent gets))` - 当命中率低于60%~70%时,建议增加`db_block_buffers`的值以扩大缓冲区高速缓存的容量。 3. **调整方法** - `db_...
* 查看 Buffer Cache 的命中率,使用公式 1 - (physical reads cache / consistent gets from cache + db block gets from cache)计算。 * 在多 Buffer Pool 情况下,分别统计不同 Buffer Pool 的命中率。 * 查看...
统计信息展示了 SQL 语句的执行情况,例如recursive calls、db block gets、consistent gets、physical reads 等;trace 信息展示了 SQL 语句的执行过程。 在分析 autotrace 结果时,需要关注的点包括: * 运行...
V$SYSSTAT中的consistent gets和db block gets统计了两种模式下的数据读取,而physical reads则记录了磁盘的物理读取。通过比较这些值,可以计算出命中率并作出相应的优化决策。 其次,共享池的调整至关重要。共享...
BLOCK_GETS, CASE WHEN NAME='consistentgets' THEN VALUE END CONSISTENT_GETS FROM V$SYSSTAT WHERE Name IN ('physicalreads', 'dbblockgets', 'consistentgets')) ``` 3. **共享池重用率**: 监测共享池中...
Autotrace Statistics 中有多个常用列,包括 db block gets、consistent gets、physical reads、redo size、sorts (memory) 和 sorts (disk) 等。 在使用 Autotrace 时,需要设置相关的命令,包括 SET AUTOTRACE ...
计算命中率为:`1 - (physical reads / (db block gets + consistent gets))`。若命中率低于90%,则需增大缓冲区高速缓存的大小。 4. **大型池**:在shared server环境中,大型池用于存储各种共享资源。如果需要...
通过v$sysstat视图可以监测dbblock gets、consistent gets和physical reads这三个指标。缓冲区的命中率直接影响I/O性能。若物理读取(physical reads)过多,表明命中率低,需要调整缓冲区大小以减少磁盘I/O。 此外...
这些指标可以帮助我们判断SQL执行效率,比如如果DB Block Gets和Physical Reads的值很高,可能意味着缓存命中率低,需要进一步优化。 #### 二、索引的理解 索引是提高查询性能的关键技术之一,在Oracle数据库中...
count FROM V$waitstat WHERE class IN ('system undo header', 'system undo block', 'undo header', 'undo block')` 和 `SELECT sum(value) FROM V$sysstat WHERE name IN ('db_block_gets', 'consistent gets')`...
对于数据库高速缓存命中率的调整,需要分析'db block gets'和'consistent gets',并据此优化缓存配置。 总的来说,Oracle9i数据库的性能优化是一个系统性工程,需要结合实际应用场景,从硬件配置、数据库设计、SQL...
查看该SQL的response time(db block gets/consistent gets/physical reads/sorts)。 六、索引 索引是数据库优化的重要手段。以下是索引相关的知识点: 1. 索引结构:b-tree index、bitmap index、function ...
- **缓冲区高速缓存调整**:通过观察`dbblock gets`、`consistent gets`和`physical reads`,分析缓冲区高速缓存的使用情况,如果物理读取次数过多,可能需要增加缓冲区的数量或大小。 3. **调整磁盘I/O** - **...
- **db block gets**: 数据块获取次数,反映从数据文件读取的数据块数量。 - **consistent gets**: 一致性读取次数,反映从缓存或数据文件中读取的数据块数量。 - **physical reads**: 物理读取次数,即直接从磁盘...