分析查询表时统计信息过多的逻辑读
来源:互联网 发布:excel软件培训 编辑:程序博客网 时间:2024/06/09 15:07
EODA@PROD1> set echo onEODA@PROD1> create table t ( x int );Table created.EODA@PROD1> insert into t values ( 1 );1 row created.EODA@PROD1> exec dbms_stats.gather_table_stats( user, 'T' );PL/SQL procedure successfully completed.EODA@PROD1> select * from t; X---------- 1EODA@PROD1> alter session set isolation_level=serializable;Session altered.EODA@PROD1> set autotrace on statisticsEODA@PROD1> select * from t; X---------- 1Statistics---------------------------------------------------------- 0 recursive calls 0 db block gets 6 consistent gets --观察I/O次数 0 physical reads 0 redo size419 bytes sent via SQL*Net to client419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
再另一个会话中执行10000次修改
begin
for i in 1 .. 10000
loop
update t set x = x+1;
commit;
end loop;
end;
/
再返回进行同样的查询
EODA@PROD1> select * from t; X---------- 1Statistics---------------------------------------------------------- 0 recursive calls 0 db block gets 10017 consistent gets --多达10017次I/O 0 physical reads 0 redo size419 bytes sent via SQL*Net to client419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed因为Oracle回滚了对该数据库块的修改,当再次查询的时候Oracle知道查询获取和处理这些块必须针对事务开始的那个时刻。当在缓存区找到这个数据库时,发现这个块已经被修改了10000次,所以开始查找undo信息进行了10000次回滚。
再次进行同样的查询
EODA@PROD1> select * from t; X---------- 1Statistics---------------------------------------------------------- 0 recursive calls 0 db block gets 6 consistent gets --仅仅6次I/O 0 physical reads 0 redo size419 bytes sent via SQL*Net to client419 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
因为Oracle已经把同一个块的多个版本保存在了缓冲区,所以可以直接使用。
--参考来源《Oracle编程艺术深入理解数据库体系结构(第三版)》
0 0
- 分析查询表时统计信息过多的逻辑读
- DB2 查询统计信息的命令
- DB2 查询统计信息的命令
- 分析Hive表和分区的统计信息(Statistics)
- WCF RIA 问题: 表查询返回的内容过多
- 数据的查询、汇总 、统计和分析
- Oracle 统计信息备份/表分析
- O_dbms_stats分析统计信息
- 统计信息所在的表
- c6中实现用款统计信息查询的思路
- 统计信息对于查询路径选择的影响
- Scripts:查询没有统计信息的对象perf_objects_without_statistics.sql
- 解决代码逻辑嵌套过多的技巧 do{} while(0);
- 查询统计信息sql(表、索引、列-histogram)
- ORACLE SQL调优之统计信息缺失导致的逻辑读暴增
- [一起学Hive]之十五-分析Hive表和分区的统计信息(Statistics)
- [一起学Hive]之十五-分析Hive表和分区的统计信息(Statistics)
- 统计在线人数的逻辑
- 分布式session处理方案
- win10系统下cmd调用cl编译器编译c++环境变量配置
- 关于非阻塞的recv的时候返回的处理
- 数据交换之前后端数据格式转换(一)
- [js点滴]使用var定义变量和不使用var的本质区别
- 分析查询表时统计信息过多的逻辑读
- 算法练习15
- 绘制数据图表的又一利器:C3.js
- RXBUS
- 杭电1005
- 前段知识点巩固
- iOS: 聊聊 Designated Initializer(指定初始化函数)
- 数据库迁移:mysql迁移到oracle
- 帧动画和补间动画看这篇足够了