注册
系统上线第一步 | 如何正确的第一次更新统计信息

系统上线第一步 | 如何正确的第一次更新统计信息

hql 2021/10/13 3960 7 0
摘要 我们在做完数据迁移后,必须更新统计信息。

我们在做完数据迁移后,必须先更新统计信息,才可以接入业务系统,否则语句执行效率可能很低。

下面是更新统计信息的方式:

  1. 先使用manager登录迁移后的数据库
  2. 执行下面的sql
sf_set_SESSION_para_value('HAGR_HASH_SIZE',10000000); sf_set_SESSION_para_value('HAGR_BUF_SIZE',15000); --上面两个语句,如果执行报错的话,可以不执行,跳过这两个sp_set的设置即可。 select 'DBMS_STATS.GATHER_SCHEMA_STATS('''||username||''',100,TRUE,''FOR ALL COLUMNS SIZE AUTO'');' from all_users; --这里我们一般选择需要收集的用户对应的行,进行执行即可。
  1. 在同一个窗口中复制结果集,执行完成即可。

我们也可以直接执行下面的语句(学习意义大于实际意义):

begin for rs in (select 'sf_set_SESSION_para_value(''HAGR_HASH_SIZE'',(select cast( case when max(table_rowcount(owner,table_name))<=(select max_value from v$dm_ini where para_Name=''HAGR_HASH_SIZE'') and max(table_rowcount(owner,table_name))>=( select min_value from v$dm_ini where para_Name=''HAGR_HASH_SIZE'') then max(table_rowcount(owner,table_name)) when max(table_rowcount(owner,table_name))<( select min_value from v$dm_ini where para_Name=''HAGR_HASH_SIZE'') then (select min_value from v$dm_ini where para_Name=''HAGR_HASH_SIZE'') else (select max_value from v$dm_ini where para_Name=''HAGR_HASH_SIZE'') end as bigint) from dba_tables where owner='''||NAME||'''));' sql1,'DBMS_STATS.GATHER_SCHEMA_STATS('''||NAME||''',100,TRUE,''FOR ALL COLUMNS SIZE AUTO'');' sql2 from SYS.SYSOBJECTS where TYPE$='SCH' ) loop execute immediate rs.sql1; execute immediate rs.sql2; end loop; end; /
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服