【背景】
测试环境中,由于对表做大量update导致有一个sql的执行计划时而走merge好时而走nestedloop好,但由于收集完统计信息sql的物理执行计划由于未立即刷新plan cache导致无法立即使最优的执行计划生效,故需收集完统计信息后自动刷新plan cache。
【语法】
示例:收集 hr
下所有表的统计信息。
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS ('hr', degree=>64,no_invalidate=>TRUE);
END;
Query OK, 0 rows affected
【参数说明】
ownname | 用户名称。如果用户名设置为 NULL ,会默认使用当前登录用户名。 |
no_invalidate | 收集统计信息时是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。 |
degree | 并行度。默认值是 NULL 。NULL 表示使用由 CREATE TABLE 或 ALTER TABLE 语句中的 DEGREE 子句指定的表默认值。当使用 DEGREE=>NULL 、DEGREE=>n 时,如果对象的大小不保证实现并行执行,则 DBMS_STATS 可能会使用串行执行。 |
更多参数配置见参考网址
【使用说明】
在OceanBaseV4.2.1版本,需要注意的是,对于取值为 TRUE
和 FALSE
的参数,需要在 BEGIN ... END
块中执行该过程,即需要将该PL包嵌套在事务中,而不可用call调用(实测报了语法错误)。
【参考网址】