数据库环境:SQL SERVER 2005 今天在生产库里抓到一条跑得慢的SQL,语句不是很复杂,返回的数据才有800多行, 却执行了34分钟,甚至更久. 先看一下执行结果 我贴一下SQL. SELECT a.dec_yt1 , b.dec_yt1 , a.dec_yt2 , b.dec_yt2 , a.dec_yt3 , b.dec_yt3 FROM ctlm8288 a , ( SELECT t.corr_id , t.clerk_id , )), ) AS dec_yt1 , )), )…
特殊情况如下 客户的统计信息是固定的,没办法收集统计信息 . SQL profile 是最后考虑方案,因为同样写法sql 比较多,几十条. Parallle 并行客户一般不考虑接受,OLTP 系统. 最好使用hint . 无法收集统计信息,怎样优化SQL. 首先在dev 环境收集统计信息,通过SQLHC ,收取结果. 其次使用收集信息的outline ,来代入,调优 结果如下: SELECT /*+                             BEGIN_OUTLINE_DATA  …
overview Oracle's cost-based optimizer (COB) uses statistics to calculate the selectivity (the fraction of rows in a table that the SQL statement's predicate chooses) of predicates and to estimate the "cost" of each execution plan. The COB will…
收集oracle统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分布: --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM: 索引统计: --叶块数量,等级,聚簇因子: --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL: 系统统计:--…
CREATE OR REPLACE PROCEDURE SchameB.PRC_GATHER_STATS AUTHID CURRENT_USER IS BEGIN SYS.DBMS_STATS.GATHER_TABLE_STATS('SchName', 'TableName', CASCADE => TRUE); END; / select owner,table_name,last_analyzed,num_rows from dba_tables where owner='SYSTEM' a…
1.     理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: ·         表的统计信息 o   行数 o   Block数 o   行平均长度 ·         列的统计信息 o   列中不同值的数量 o   列中null的数量 o   数据分布(柱状图/直方图) ·         索引的统计信息 o   叶子块的数量 o   索引的高度 o   聚簇因子(cl…
1.     理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: ·         表的统计信息o   行数o   Block数 o   行平均长度·         列的统计信息o   列中不同值的数量o   列中null的数量 o   数据分布(柱状图/直方图) ·         索引的统计信息o   叶子块的数量o   索引的高度o   聚簇因子(clustering…
Oracle重建所有表的索引的sql: SELECT 'alter index ' || INDEX_NAME || ' rebuild online nologging;' FROM USER_INDEXES WHERE TABLESPACE_NAME = 'xxx' AND STATUS = 'VALID' AND TEMPORARY = 'N' AND INDEX_TYPE = 'NORMAL' AND PARTITIONED = 'NO'; 然后把结果放到PLSQL命令容器执行即可. O…
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10%,是无法改动的,假设表很大.10%是许多的数据,很有可能造成统计信息不准确. 在11g之后,STALE_PERCENT=10%是能够改动的,分为全局(DBMS_STATS.SET_GLOBAL_PREFS )和表级别(DBMS_STATS.SET_TABLE_PREFS).表级别的设定: 改动为5…
最近在学习Oracle的统计信息这一块,收集统计信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, ---所有者名字 tabname VARCHAR2, ---表名 partname VARCHAR2 DEFAULT NULL, ---要分析的分区名 estimate_percent NUMBER DEFAULT NULL, ---采样的比例 block_sample BOOLEAN DEFAULT FALSE, ---是否块分析…