暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 延迟统计数据公布

原创 不吃草的牛_Nick 2023-07-28
199

延迟统计数据公布
默认时,数据库公布为优化程序立即使用而收集的统计数据。但是,可能有时你不想这样。你想先测试这些统计数据,仅在对它们满意时才提供给公众使用。Oracle允许将数据库收集的新统计数据作为挂起统计数据(pending statistics)保存,你可以根据测试决定公布或根本不公布。当前的或公布的统计数据表示被优化程序所使用的数据,挂起的或延迟的统计数据为私有统计数据,不允许优化程序使用。

1.判断和设置统计数据的状态
执行DBMS_STATS.GET_PREFS过程确定数据库中统计数据的公布状态:
select dbms_stats.get_prefs('PUBLISH') publish from dual;

值TRUE表示数据库在收集统计数据后自动公布它们。这是数据库的默认行为。如果查询返回值FALSE,数据库将使新统计数据挂起,直到你决定正式公布它们为止。也可以执行GET_PREFS函数找出单个表的公布方式:
SELECT dbms_stats.get_prefs('PUBLISH','stats','test_table') FROM dual;

可以执行SET_TABLE_PREFS函数,在数据库级或对象(表)级更改对象的公布设置。例如,为使数据库不自动公布它收集的EMPLOYEES表的统计数据,执行如下函数:
exec dbms_stats.set_table_prefs('HR','EMPLOYEES','PUBLISH','FALSE');

数据库在DBA_TAB_PENDING_STATS视图中存储挂起统计数据,在DBA_TAB_STATS视图中存储公布统计数据。

2.使挂起统计数据成为公布的
可以测试数据库中任何挂起统计数据,了解它们是如何影响性能的。如果它们对性能有好处,可以公布它们以供优化程序使用:否则,删除它们。通过设置初始化参数OPTIMIZER_USE_PENDING_STATISTICS,公布挂起的统计数据,即为测试的目的使它们可供优化程序使用。默认时,此参数设置为FALSE,表示优化程序将跳过挂起的统计数据,如下所示:
show parameter optimizer_use_pending_statistics

可设置OPTIMIZER_USE_PENDING_STATISTICS参数为TRUE,使优化程序考虑挂起的统计数据,如下所示:
ALTER SESSION SET optimizer_use_pending_statistics=TRUE;

执行此语句后,优化程序将使用挂起的统计数据。测试确认新统计数据性能良好以后,可以执行 PUBLISH_PENDING_STATS 过程公布挂起的统计数据:
EXEC dbms_stats.publish_pending_stats(NULL,NULL);

如果你想公布单个表的统计数据,可按如下方式进行:
EXEC dbms_stats.publish_pending_stats('HR','EMPLOYEES');

另一方面,如果你确定挂起的统计数据没有用,可执行 DELETE_PENDING_STATS 过程删除它们:
EXEC dbms_stats.delete_pending_stats('HR','EMPLOYEES');

你也可以使用 EXPORT_PENDING_STATS 过程,在一个数据库中测试在另一个数据库中收集的挂起统计数据:
EXEC dbms_stats.export_pending_stats('HR','EMPLOYEES');


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论