Oracle查询优化4大方面的主要途径
数据库最基本的任务是存储、管理数据,而终端用户唯一能看到的数据库特性就是其性能:数据 库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序。从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最 大、查阅新闻、 查看文件、 查询统计信息等。因此,数据库查询操作的效率是影响一个应用系统响应时间的关键因素。随着一个应用系统中数据的动态增长,数据量变大,数据库查询效率就会 有所降低,应用系统的响应速度也随之减慢,尤其对于海量数据的管理和查询问题就更加突出,Oracle查询
Oracle buffer cache的优化 - 转
1 buffer cache的设置优化 buffer cache的设置随着oracle版本的升级而不断变化。8i下使用db_block_buffers来设置,该参数表示buffer cache中所能够包含的内存数据块的个数;9i以后使用db_cache_size来设置,该参数表示buffer cache的总共的容量,可以用字节、K、M为单位来进行设置。而到了10g以后则更加简单,甚至可以不用去单独设置buffer cache的大小。因为10g引入了ASMM(Automatic Shared Memory Management)这样一个可以进行自我调整的组件,该组件可以自动调整shared pool size、db cache size等SGA中的组件。只需要
查看oracle执行计划 - 转
日常开发活动中,有时候需要对oracle执行计划进行监控,以此来调优程序和数据库方面的性能。 常用方法有以下几种: 一、通过PL/SQL Dev工具 1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。 2、先执行 EXPLAIN PLAN FOR select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行计划了,看到的结果和1中的一样,所以使用工具的时候推荐使用1方法。
详介oracle的RBO/CBO优化器 - 转
IT168 技术文档】Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO),在Oracle8及以后的版本,Oracle强列推荐用CBO的方式 RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方 式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每
跳跃式索引(Skip Scan Index)浅析 - 转
在Oracle9i中,有一个新的特性:跳跃式索引(Skip Scan Index)。当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS。此外, 还可以通过使用提示index_ss(CBO下)来强制使用SS。 在Oracle9i 中,有一个新的特性:跳跃式索引(Skip Scan Index)。当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS。此外, 还可以通过使用提示index_ss(CBO下)来强制使用SS。 举例:
使用RMAN验证备份的有效性 -- 转
作者:eygle |English Version 【转载时请以超链接形式标明文章出处和作者信息及本声明】 链接:http://www.eygle.com/archives/2010/01/rman_validate_backup.html 站内相关文章|Related Articles 内容整理-增加技术专题页面 一个TB级数据库的备份时间及备份记录 使用RMAN进行排除表空间备份 Oracle10g备份集压缩新特性(Backupset Compression) 使用Oracle10g新特性简化数据库镜像COPY RMAN提供VALIDATE的命令,可以用于校验备份集的有效性,常用命令如下:restore validate controlfile;restore
oracle 8i上的优化参数 -- 转
oracle 8i上的优化参数 收藏 /*+ FULL(tablename) */: 明确的指定进行全表扫描/*+ ROWID(tablename) */: 明确的选择根据rowid进行表扫描/*+ CLUSTER(tablename) */: 明确的指定对指定表进行群集扫描, 只能应用于tablename的条件中有群集对象时/*+ HASH(tablename) */: 明确的选择对指定表进行hash扫描, 只能应用于tablename的条件中有群集对象时/*+ HASH_AJ */: 转化一个not in子查询为一个anti-join的hash扫描/*+ HASH_SJ */: 转化一个EXISTS子查询为一个semi-join的
观察analyze table compute statistics 都对什么对象统计了信息 - 转
compute statistics 都对什么对象统计了信息 analyze table compute statistics = analyze table compute statistics for table for all indexes for all columns; 比analyze table compute statistics for table for all indexes for all indexed columns 分析了更多的信息但这里并不是鼓励使用 analyze table 的方法进行分析。 SQL> create table t as select * from all_objects;Table created. SQL> create index t_idx on t(object_id);Index created. SQL> analyze table t compute statistics for table 2 f
Oracle delete数据后的释放表空间问题的解决 --转
我们都知道数据表的庞大导而致其查询速度的降低是水到渠成的,所以我们只有将相关的数据表的数据相应的移走,但是如果使用Oracle delete之后,相关的数据删除了,但是速度没有多大改善,忧闷了。 使用备份表再drop掉原表。的确可以解决问题。但是较麻烦,今天请教了一个Oracle高手,解决了问题。 由于Oracle delete操作是不释放表空间的,要想提高查询速度则必须释放表空间。 对Oracle 9i而言,释放表空间则需要重新分析表。 analyze table itemLog compute statistics; 再进行select ,感觉的确快了很多。 另一种方法:使用exp将表
为 DBA 提供的最佳前 20 位的特性 -转
自动工作负载信息库 学习使用新的特性,这些特性采集数据库性能统计数据和量度,以供分析和调整,并显示在数据库中花费的准确时间,甚至保存会话信息 当您有数据库性能问题时,要解决它您首先要作的是什么?一种常见的方法是看是否存在一种模式:回答诸如“相同的问题是否重复出现?”,“它是否在某个特定的时间段出现?”和“两个问题之间是否有联系?”之类的问题,将几乎总会带来更好的诊断结果。 作为一个数据库管理员,您可能已经投资购买了第三方工具或使用自己开发的工具来在数据库运行期间采集详细 的统计数
怎样获取发生错误的会话信息 -- 转
某些Oracle错误,并不是总是伴随着产生trace文件,这些错误,对Oracle来说并不是严重的错误,比如像ORA-01555这样的错误。 我们可以设置一个事件,在发生错误时,产生一个Trace文件,事件通常使用下面的命令格式: view plaincopy to clipboardprint?alter system set events '<error_number> trace name errorstack level <level>'; alter session set events '<error_number> trace name errorstack level <level>'; alter system set events '<error_number> trace name errorstack level
监控长时间运行的查询(监控数据库性能的SQL ) -- 转
查询v$session_longops动态性能视图可以查看运行时间大于6秒的查询,如果想让运行时间大于6秒的查询被数据库引擎收集,必须满足以下条件:1 参数timed_statistics或sql_trace为true2 涉及的对象(表或索引)必须被分析(analyze或dbms_stats) 监控数据库性能的SQL [Ref: http://xzh2000.itpub.net/post/96/102574 ] 在v$session_longops视图中,sofar字段表示已经扫描的块数,totalwork表示总得需要扫描的块数,所以我们即可以对正在运行的长查询进行监控,比如在索引创建时,查看索引创建的进度,也可以查看系统中以往的长查询。。
Oracle中Kill session的研究 for oracle -- 转
我们知道,在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为: alter system kill session ’sid,serial#’ ; 被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程. 我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session的paddr都被更改为相同的进程地址: SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null; SADDR SID SERIAL# PADDR US
关于oracle的表空间,分区表,以及索引的总结 -- 转
表空间: Oracle的UNDOTBS01.DBF文件太大的解决办法 1、.禁止undo tablespace自动增长 alter database datafile 'full_pathundotbs01.dbf' autoextend off; 2.-- 创建一个新的小空间的undo tablespace create undo tablespace undotBS2 datafile 'full_pathUNDOTBS02.DBF' size 100m; -- 设置新的表空间为系统undo_tablespace alter system set undo_tablespace=undotBS2; -- Drop 旧的表空间 drop tablespace undotbs1
oracle sql跟踪 event 10046 - 转
我们知道,Oracle提供了Internal Events以便Oracle Support人员利用其对Oracle的内部行为进行一些更为深入细致的记录与跟踪,从而分析查找并解决Oracle用户所遇到的棘手问题。对于大部分的Internal Events,Oracle是没有官方文档加以阐述的,不过,这些Events中有几个是被公认为非常重要并被广泛研究和采用的。这其中,最重要的就是在进行Sql Tuning时常利用的10046 event。如果你对oracle性能调优很感兴趣或者比较专长,那么你对oracle的10046事件一定不会陌生。10046 event是对oracle进行系统性能分析时一个最重要的手段。当激活这个事件
使用 oradebug 转储 systemstate / processstate -- 转
作者:eygle |English Version 【转载时请以超链接形式标明文章出处和作者信息及本声明】 链接:http://www.eygle.com/archives/2009/11/oradebug_systemstate_dump.html 站内相关文章|Related Articles 工具: ass109.awk 分析 Oracle 的跟踪文件 Oracle的异构数据迁移工具 - OMW及ODI Quest 的 Spotlight On Unix 漂亮的展现 使用spawrrac.sql收集RAC数据库对比信息 使用Linux下script工具记录Oracle输出 当数据库出现一些挂起状态时,如果sqlplus仍然可以连接,可能视图查询没有相应,但是可
Oracle 常用dump命令 - 转
一.Memory Dumps 1).Global AreaALTER SESSION SET EVENTS ‘immediate trace name global_area level n’;1 包含PGA2 包含SGA4 包含UGA8 包含indrect memory 2).Library CacheALTER SESSION SET EVENTS ‘immediate trace name library_cache level n’;1 library cache统计信息2 包含hash table histogram3 包含object handle4 包含object结构(Heap 0) 3).Row CacheALTER SESSION SET EVENTS ‘immediate trace name row_cache level n’;1 row cache统计信息2 包含hash table histogram8 包含object结构
收缩datafile for oracle -- 转
LMT TABLESPACE,有时候虽然里面的数据不是很多,但是RESIZE DATAFILE的时候会失败,因为一些OBJECT的EXTENTS已经扩展到DATAFILE的边缘(最大的地方)。下面的SQL可以让我们找到前5个最边缘的OBJECT select * from ( select owner, segment_name, segment_type, block_id from dba_extents where file_id = ( select file_id from dba_data_files where file_name = :FILE ) --用你的DATAFILE代替 order by block_id desc )[@more@] where rownum <= 5 结果是行如下面的五行 OWNER
Oracle动态性能视图学习之 V$ROLLSTAT -- 转
本视图自启动即保持并记录各回滚段统计项。在学习本视图之前,我们先来了解一下回滚段(rollback segment)的相关概念: 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。 回滚段的作用 1。事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像
SQL利用数据库日志恢复数据到时间点的操作 -- 转自网络
SQL利用数据库日志恢复数据到时间点的操作 2009-08-18 08:45 1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了) backup log dbName to disk='fileName' 也可以在误操作之后先进行全库备份,然后进行日志备份。例如: backup database click to disk='d:clickdb.bak' ---数据库备份 backup log click to disk='d:clicklog.dbf' ---