达梦SQL执行耗时异常问题排查学习
1 查看是否开启计划缓存
select PARA_NAME,PARA_VALUE
from v$dm_ini
where para_name like 'USE_PLN_POOL';
参数解释:是否重用执行计划。
0:禁止执行计划的重用;
1:启用执行计划的重用功能 ;
2:对不包含显式参数的语句进行常量参数化优化;
3:即使包含显式参数的语句,也进行常量参数化优化
2 构造数据
create table test(c1 int, c2 varchar(100), c3 int, primary key(c1));
begin
for i in 1..100000 loop
insert into test values(i, 'aaaaaaa', i);
end loop;
commit;
end;
3 执行查询语句:
select * from test where c3=3;
4 查看执行计划缓存表
select cache_item,sqlstr
from v$cachepln
where sqlstr like '%select * from test where c3=3%';
5 根据cache_item生成日志文件
alter session set events 'immediate trace name plndump level 查出的cache_item,dump_file ''/dbdata/plan0415.log''';
6 查看后成的日志文件
如果仅查看执行计划可以用explain sql语句查看,或者使用manager管理工具里的查看执行计划按钮查看
7 根据缓存表里的CACHE_ITEM列手动淘汰该计划
--清理计划缓存
call SP_CLEAR_PLAN_CACHE(cache_item);
8 查看执行计划缓存表,该sql的缓存已被清除
9、执行更新统计信息
DBMS_STATS.GATHER_SCHEMA_STATS('模式名',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');--更新整个模式的统计信息
DBMS_STATS.GATHER_TABLE_STATS('JQ_FSSC','AP_DEBTBILL',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');--更新模式下面的某个表的统计信息
9.1 GATHER_SCHEMA_STATS函数详解
收集模式下对象的统计信息。
语法如下:
PROCEDURE GATHER_SCHEMA_STATS ( OWNNAME VARCHAR(128), ESTIMATE_PERCENT DOUBLE DEFAULT TO_ESTIMATE_PERCENT_TYPE(GET_PREFS('ESTIMATE_PERCENT')), BLOCK_SAMPLE BOOLEAN DEFAULT FALSE, METHOD_OPT VARCHAR DEFAULT GET_PREFS('METHOD_OPT'), DEGREE INT DEFAULT TO_DEGREE_TYPE(GET_PREFS('DEGREE')), GRANULARITY VARCHAR DEFAULT GET_PREFS('GRANULARITY'), CASCADE BOOLEAN DEFAULT TO_CASCADE_TYPE(GET_PREFS('CASCADE')), STATTAB VARCHAR DEFAULT NULL, STATID VARCHAR DEFAULT NULL, OPTIONS VARCHAR DEFAULT 'GATHER', OBJLIST OUT OBJECTTAB DEFAULT NULL, STATOWN VARCHAR DEFAULT NULL, NO_INVALIDATE BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE (GET_PREFS('NO_INVALIDATE')), FORCE BOOLEAN DEFAULT FALSE, OBJ_FILTER_LIST OBJECTTAB DEFAULT NULL ); |
OWNNAME 模式名,区分大小写。
ESTIMATE_PERCENT 收集的百分比,范围为 0.000001~100,默认系统自定。
BLOCK_SAMPLE 保留参数,是否使用随机块代替随机行,默认为 TRUE。
METHOD_OPT控制列的统计信息集合和直方图的创建;默认为 FOR ALL COULMNS SIZE AUTO;只支持其中一种格式:FOR ALL [INDEXED | HIDDEN] COLUMNS [<size_clause>]<size_clause>::= SIZE {integer | REPEAT | AUTO | SKEWONLY}
DEGREE 保留参数,收集的并行度,默认为 1。
GRANULARITY 保留参数,收集的粒度,默认为 ALL。
CASCADE 是否收集索引信息,TRUE 或 FALSE。默认为 TRUE。
STATTAB 保留参数,统计信息存放的表,默认为 NULL。
STATID 保留参数,统计信息的 ID,默认为 NULL。
OPTIONS控 制 收 集 的 列 , 默 认 为 NULL ; 选 项 如 下 : GATHER|GATHER AUTO|GATHER STALE|GATHER EMPTY|LIST AUTO|LIST STALE|LIST EMPTY。各选项解释如下:
GATHER:收集模式下所有对象的统计信息。
GATHER AUTO:自动收集需要的统计信息。系统隐含的决定哪些对象需要新的统
计信息,以及怎样收集这些统计信息。此时,只有 OWNNAME,STATTAB, STATID,
OBJLIST AND STATOWN有效,返回收集统计信息的对象。
GATHER STALE:对旧的对象收集统计信息。返回找到的旧的对象。
GATHER EMPTY:收集没有统计信息对象的统计信息。返回这些对象。
LIST AUTO:返回GATHER AUTO方式处理的对象。
LIST STALE:返回旧的对象信息。
LIST EMPTY:返回没有统计信息的对象。
OBJLIST 返回 OPTION 选项对应的链表,默认为 NULL。
STATOWN 保留参数,统计信息的模式,默认为 NULL。
NO_INVALIDATE 保留参数,是否让依赖游标失效,默认为 TRUE。
FORCE 保留参数,是否强制收集统计信息,默认为 FALSE。
OBJ_FILTER_LIST 存放过滤条件的模式名、表名和子表名,默认为 NULL。