高水平位虚高的案例
--构造表
drop table t purge;
create table t as select * from dba_objects;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
insert into t select * from t;
commit;
---------------------------------------------------------------------------------------------------------------------
--测试表的大小及语句的效率
SQL> select bytes/1024/1024 from user_segments where segment_name='T';
BYTES/1024/1024
---------------
264
SQL> select count(*) from t;
COUNT(*)
----------
2332096
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
33350 consistent gets
0 physical reads
---删除大量数据,再做试验如下,发现SEGMENT未见减少,依然是:
SQL> delete from t where rownum<=2000000;
已删除2000000行。
SQL> commit;
提交完成。
SQL> select bytes/1024/1024 from user_segments where segment_name='T';
BYTES/1024/1024
---------------
264
---逻辑读也没有减少
SQL> select count(*) from t;
COUNT(*)
----------
332096
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
33350 consistent gets
0 physical reads
--用move重组数据后,高水平位释放(注意move操作会导致索引失效),segment占用的空间减少,逻辑读也一并减少。
SQL> alter table t move;
表已更改。
SQL> select bytes/1024/1024 from user_segments where segment_name='T';
BYTES/1024/1024
---------------
38
SQL> select count(*) from t;
COUNT(*)
----------
332096
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
4742 consistent gets
0 physical reads
高水平位虚高的监控
未删除数据前
exec dbms_stats.gather_table_stats(ownname => 'HR',tabname => 'T',estimate_percent => 10,method_opt=> 'for all indexed columns',cascade=>TRUE) ;
select num_rows,blocks from user_tab_statistics where table_name='T';
NUM_ROWS BLOCKS
---------- ----------
2637370 37778
set autotrace off
delete from t where rownum<=2300000;
commit;
高水平位优化前
exec dbms_stats.gather_table_stats(ownname => 'LJB',tabname => 'T',estimate_percent => 10,method_opt=> 'for all indexed columns',cascade=>TRUE) ;
select num_rows,blocks from user_tab_statistics where table_name='T';
NUM_ROWS BLOCKS
---------- ----------
635730 37778
结论,异常的NUM_ROWS/BLOCKS往往是判断高水平位异常的入口,NUM_ROWS与BLOCKS的比例需要结合块大小和表每行的字节数来判断,最好是有正常状态的基数作为判断依据。
参考至:《基于案例学习sql优化》梁剑斌著
如有错误,欢迎指正
邮箱:czmcj@163.com
相关推荐
缓冲区高速缓存的命中率应保持在较高水平,以减少磁盘I/O。 I/O优化是提升数据库性能的另一个重点。本地管理表空间可以帮助平衡I/O负载,将同一表空间的数据文件分散在不同磁盘上,高访问量的数据文件应存储在独立...
Oracle Database 10g是Oracle公司推出的一款革命性的数据库管理系统,它首次引入了“Grid Computing”的概念,旨在通过自动资源管理和故障恢复机制,为用户提供更高水平的数据可用性和系统性能。Oracle 10g不仅在...
3. **实时监控与诊断工具**:Oracle提供了多种工具用于监控数据库性能,如AWR报告、ASH数据等。熟练掌握这些工具可以帮助快速定位问题根源。 #### 四、实战案例分析 - **案例一:解决长时间运行的查询**:介绍了一...
- **Advanced Compression Option**:提供更高水平的数据压缩,减少存储成本。 #### 三、Oracle11g R2 64位的安装与配置 1. **安装前的准备**: - **系统要求**:确保操作系统满足Oracle11g R2 64位的要求,例如...
7. **监控与调优工具**:Oracle提供了强大的性能监控工具,如Automatic Workload Repository (AWR)、SQL Tuning Advisor和ASH(Active Session History)。通过这些工具收集性能数据,分析报告,可以定位问题并提出...
通过优化数据库配置、定期检查和调整,可以确保变电站监控系统在高负荷运行条件下依然保持高效和稳定。 总结来说,Oracle监控维护技术在变电站监控系统中的应用,不仅提高了数据处理能力,也提升了系统的整体性能,...
7. **数据库性能监控与调优**:通过V$视图和AWR(自动工作区管理报告)等工具,可以分析数据库性能,找出瓶颈并进行优化。 8. **并发控制与事务管理**:Oracle的锁机制和多版本并发控制(MVCC)是处理并发操作的...
"Oracle高级用法"主要涵盖了数据库的优化、安全管理、备份恢复、性能监控和复杂SQL操作等核心内容。下面我们将深入探讨这些高级主题。 一、优化 Oracle数据库优化主要包括SQL优化和索引优化。SQL优化涉及到编写高效...
SQLTracker是一款专为Oracle数据库设计的高性能监控工具,尤其针对64位操作系统,如win7和win10,提供强大的跟踪和分析功能。在数据库管理领域,了解并掌握SQLTracker对于提升数据库性能优化和问题排查至关重要。 ...
Oracle专家高级编程是一门深入探讨Oracle数据库系统的课程,旨在帮助开发者和DBA们提升在Oracle平台上的编程技能和管理...通过理论与实践的结合,你将能够更有效地管理和优化Oracle数据库,确保系统的稳定性和高性能。
《Oracle DBA手记:数据库诊断案例与性能优化实践》一书是针对Oracle数据库管理员(DBA)的重要参考资料,由一线Oracle DBA根据实际工作经验精心策划。书中涵盖了Oracle数据库的诊断技巧、性能优化策略以及实战案例...
- 垂直分割是将高访问频率的列与主键分到一个表,减少数据页的列宽,提高I/O效率,但也可能导致多表连接。 - 冗余列用于减少连接操作,但更新维护成本高,适合数据变动不频繁的情况。 - 派生列通过预先计算,减少...
描述中提到本书是“盖国强的一本力作”,说明作者在Oracle数据库领域内拥有较高的专业水平和丰富的实践经验。同时,“ITPUB推出的第四本oracle的力作”透露了ITPUB在Oracle数据库领域书籍出版方面的专业性和权威性,...
《Oracle数据库性能与可扩展性:定量方法》不仅涵盖了Oracle数据库性能优化的基本理论知识,还结合了丰富的实践经验和案例分析,为读者提供了全面而深入的理解。无论是Oracle数据库管理员还是开发人员,都能从中获得...
通过综合运用这些策略,可以显著提升Oracle数据库的性能,从而支持更高水平的数据处理需求,满足企业对数据库系统高效、稳定运行的要求。在实际操作中,应根据具体场景和需求,灵活选择和调整优化方案,以达到最佳...
### Oracle自动监控详解 #### 一、Oracle自动监控概述 Oracle自动监控是一种强大的工具,用于对Oracle数据库进行集中管理和监控...对于希望提高数据库运维水平的企业来说,Oracle自动监控无疑是一个值得考虑的选择。