国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

定時執行存儲過程對庫表及索引進行分析

2024-07-21 02:38:07
字體:
來源:轉載
供稿:網友

  參考了一下別人的代碼又補充了一下寫了一個存儲過程。
  
  分析某一用戶下面的表及索引。
  
  運行完畢后然后設置job即可。
  
  create or replace PRocedure DBA_ANAYZE_SCHEMA(v_USERNAME VARCHAR2)
  AS
  v_per number(3) DEFAULT 100;
  v_start number := dbms_utility.get_time;
  --v_end  number;
  begin
  /*********************
  
  該存儲過程主要是對表及索引進行分析,
  
  對于包含有子分區sub-partition的表需要注重一下granularity參數。具體參考:
  
  --  granularity - the granularity of statistics to collect (only pertinent
  --   if the table is partitioned)
  --   'DEFAULT' - gather global- and partition-level statistics
  --   'SUBPARTITION' - gather subpartition-level statistics
  --   'PARTITION' - gather partition-level statistics
  --   'GLOBAL' - gather global statistics
  --   'ALL' - gather all (subpartition, partition, and global) statistics
  *******************************/
  for rec in (select segment_name,segment_type,ceil(sum(bytes)/1024/1024) segment_size
  from user_segments where SEGMENT_NAME NOT LIKE 'TMP_%'
  group by segment_name,segment_type)
  loop
  CASE WHEN rec.segment_type = 'INDEX' THEN
  case
  when rec.segment_size <=100 then
  v_per := 100;
  when rec.segment_size <=300 then
  v_per := 50;
  else
  v_per := 20;
  end case;
  begin
  --delete old schema index statistics;
  DBMS_STATS.delete_index_stats(ownname => upper(v_USERNAME),
  indname => rec.segment_name);
  exception
  when others then
  null;
  end;
  begin
  --analyze index compute statistics;
  dbms_stats.gather_index_stats(ownname=>upper(v_USERNAME), --自己改一下
  INDNAME=>rec.segment_name,
  estimate_percent =>v_per,
  degree => 2     );
  exception
  when others then
  null;
  end;
  --dbms_output.put_line(rec.segment_name' 'rec.segment_size'm 'ceil((dbms_utility.get_time - v_start)/100)'s');
  v_start := dbms_utility.get_time;
  WHEN rec.segment_type = 'TABLE' then
  --
  case when rec.segment_size <=150 then
  v_per := 100;
  when rec.segment_size <=500 then
  v_per := 50;
  else
  v_per := 20;
  end case;
  
  begin
  --delete table analyze statistics
  dbms_stats.delete_table_stats(ownname =>upper(v_USERNAME),
  tabname =>rec.segment_name);
  exception
  when others then
  null;
  end;
  
  begin
  --analyze table compute statistics;
  dbms_stats.gather_table_stats(OWNNAME=>upper(v_USERNAME),
  TABNAME=>rec.segment_name,
  ESTIMATE_PERCENT=>v_per,
  cascade => TRUE,
  granularity => 'ALL',
  degree => 2,
  METHOD_OPT=>'FOR ALL INDEXED COLUMNS');

  exception
  when others then
  null;
  end;
  -- dbms_output.put_line(rec.segment_name' 'rec.segment_size'm 'ceil((dbms_utility.get_time - v_start)/100)'s');
  v_start := dbms_utility.get_time;
  WHEN rec.segment_type = 'TABLE PARTITION' then
  case when rec.segment_size <=150 then
  v_per := 100;
  when rec.segment_size <=500 then
  v_per := 50;
  else
  v_per := 20;
  end case;
  begin
  --delete table analyze statistics
  dbms_stats.delete_table_stats(ownname =>upper(v_USERNAME),
  tabname =>rec.segment_name);
  exception
  when others then
  null;
  end;
  begin
  --analyze table compute statistics;
  dbms_stats.gather_table_stats(OWNNAME=>upper(v_USERNAME),
  TABNAME=>rec.segment_name,
  ESTIMATE_PERCENT=>v_per,
  cascade => TRUE,
  granularity => 'ALL',
  degree => DBMS_STATS.DEFAULT_DEGREE,
  METHOD_OPT=>'FOR ALL INDEXED COLUMNS');
  exception
  when others then
  null;
  end;
  
  WHEN rec.segment_type = 'INDEX PARTITION' then
  case
  when rec.segment_size <=100 then
  v_per := 100;
  when rec.segment_size <=300 then
  v_per := 50;
  else
  v_per := 20;
  end case;
  begin
  --delete old schema index statistics;
  DBMS_STATS.delete_index_stats(ownname => upper(v_USERNAME),
  indname => rec.segment_name);
  exception
  when others then
  null;
  end;
  
  begin
  --analyze index compute statistics;
  dbms_stats.gather_index_stats(ownname=>upper(v_USERNAME), --自己改一下
  INDNAME=>rec.segment_name,
  estimate_percent =>v_per,
  degree =>dbms_stats.DEFAULT_DEGREE
  );
  exception
  when others then
  null;
  end;
  --    dbms_output.put_line(rec.segment_name' 'rec.segment_size'm 'ceil((dbms_utility.get_time - v_start)/100)'s');
  v_start := dbms_utility.get_time;
  /** WHEN rec.segment_type = 'LOBINDEX' then
  v_start := dbms_utility.get_time;
  WHEN rec.segment_type = 'LOBSEGMENT' then
  v_start := dbms_utility.get_time;**/
  END CASE;
  end loop;
  end;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石柱| 甘南县| 双桥区| 龙江县| 广宗县| 成安县| 荥阳市| 蓝田县| 游戏| 莆田市| 肥乡县| 彰化县| 新晃| 固原市| 汉源县| 哈巴河县| 安陆市| 黔南| 苗栗县| 徐闻县| 昌乐县| 成安县| 湖北省| 南部县| 大连市| 法库县| 集安市| 宁晋县| 普安县| 廉江市| 平潭县| 大英县| 孟州市| 芮城县| 南部县| 三原县| 花莲市| 涿鹿县| 柳河县| 城固县| 大英县|