Oracle调优/分析表

paw*_*que 2 oracle performance

有什么方法可以安排自动"分析表".当大量数据通过插入和删除更改时,是否可以请求自动"分析表"?参数化自动分析表过程的方法是什么,即在应该触发时设置规则.

Jus*_*ave 5

您使用的是哪个版本的Oracle?从10.1开始,Oracle已经发布了一个自动作业,每天晚上收集任何已经发生重大变化的对象的统计数据(基于内部算法可能会发生变化,但我相信阈值约为15%),因为上次统计数据是云集.假设您使用的是当前支持的版本,默认情况下会自动收集统计信息,除非您明确禁用该作业.

您可以使用该DBMS_STATS包根据事件收集对象的统计信息,您可以使用DBMS_JOB(或DBMS_SCHEDULER)包来异步完成.因此,在ETL过程结束时,您可以收集统计信息

BEGIN
  dbms_stats.gather_table_stats( 
    ownname => <<schema name>>,
    tabname => <<table name>> 
  );
END;
Run Code Online (Sandbox Code Playgroud)

您可以异步运行

DECLARE
  l_jobno INTEGER;
BEGIN
  dbms_job.submit(
    l_jobno,
    'BEGIN dbms_stats.gather_table_stats( ''<<schema name>>'', ''<<table name>>'' ); END;',
    sysdate + interval '1' minute
  );
END;
Run Code Online (Sandbox Code Playgroud)