为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:麒麟
【CPU】:
【问题描述】*:关于收集统计信息和清理执行计划缓存问题
--清理执行计划缓存
SYSDBA.CLEAR_PLAN_CACHE() ;
--收集指定用户下所有表所有列的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
我每天都会在服务器上定时任务按顺序执行这两条 这两条是不是反了 反了的影响有哪些 这两条一般应用在哪些场景下
配置定时任务执行就行,为啥要人工执行呢,截图你参考下:
如果针对特定sql执行慢,可以找你们项目上的dba看看执行计划,根据执行计划分析下sql瓶颈;
实在不会的化:可以将sql和执行计划发出来,找本地达梦技术老师看看
确实反了,应该先更新统计信息再清理执行计划缓存。因为清理执行计划缓存的原因是因为之前统计信息不对导致执行计划不对,清理执行计划缓存是为了更新统计信息之后让sql执行的时候,把缓存里的执行计划调整过来。如果像这样先清理缓存,在统计信息更新之前,执行的sql缓存处理的执行计划还是统计信息不对的时候,而不是更新后的。

CLEAR_PLAN_CACHE 这个是SYSDBA的一个存储过程?里面是调用了系统过程 SP_CLEAR_PLAN_CACHE吧?是为了给不同用户授权吗?
这个环境是测试环境还是生产环境,如果是生产环境,按说不应该每天都要清执行计划缓存啊。
而且,这个过程授权给普通用户,那任何一个用户调用该函数,都会清空所有执行计划缓存,不分是当前用户的还是其他用户的,建议评估一下这个操作的必要性。