信息收集
虽然系统没有提供自动收集功能,但是可以很方便地使用 JOB 功能来定时收集。事实上,
我不推荐在系统稳定运行后再去更新统计信息。统计信息被存放在系统表 SYS.SYSSTATS 中。
系统提供了一组系统过程来收集统计信息。
收集所有用户所有表的统计信息:
CALL SP_DB_STAT_INIT ();
表级基本信息收集,使用 SP_TAB_STAT_INIT, 如:
SQL>SP_TAB_STAT_INIT(‘SYSDBA’, ‘T1’);
列级信息收集, 使用 SP_COL_STAT_INIT, 如:
SQL>SP_COL_STAT_INIT(‘SYSDBA’, ‘T1’, ‘ID’);
索引信息收集, 使用 SP_INDEX_STAT_INIT, 如:
SQL>SP_INDEX_STAT_INIT(‘SYSDBA’, ‘T1L02’);
还可以给出一个 SQL 语句, 让系统自动收集相关表的基本信息, 如:
SQL>SP_SQL_STAT_INIT(‘SELECT * FROM T1, T2’);
还可以使用 DEINIT 版本把相关表的统计信息清掉, 如:
SQL>SP_TAB_STAT_DEINIT(‘SYSDBA’, ‘T1’);
-
SP_TAB_INDEX_STAT_INIT*
定义:
SP_TAB_INDEX_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对表上所有的索引生成统计信息
参数说明:
schname:模式名
tablename:表名
举例说明:
对 SYSOBJECTS 表上所有的索引生成统计信息
CALL SP_TAB_INDEX_STAT_INIT (‘SYS’, ‘SYSOBJECTS’); -
SP_DB_STAT_INIT*
定义:
SP_DB_STAT_INIT (
)
功能说明:
对库上所有模式下的所有用户表以及表上的所有索引生成统计信息
举例说明:
对库上所有模式下的所有用户表以及表上的所有索引生成统计信息
CALL SP_DB_STAT_INIT (); -
SP_INDEX_STAT_INIT*
定义:
SP_INDEX_STAT_INIT (
schname varchar(128),
indexname varchar(128)
)
功能说明:
对指定的索引生成统计信息
参数说明:
schname:模式名
indexname:索引名
举例说明:
对指定的索引 IND 生成统计信息
CALL SP_INDEX_STAT_INIT (‘SYSDBA’, ‘IND’); -
SP_COL_STAT_INIT*
定义:
SP_COL_STAT_INIT (
schname varchar(128),
tablename varchar(128),
colname varchar(128)
)
功能说明:
对指定的列生成统计信息,不支持大字段列和虚拟列
参数说明:
schname:模式名
tablename:表名
colname:列名
举例说明:
对表 SYSOBJECTS 的 ID 列生成统计信息
CALL SP_COL_STAT_INIT (‘SYS’, ‘SYSOBJECTS’, ‘ID’); -
SP_TAB_COL_STAT_INIT*
定义:
SP_TAB_COL_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对某个表上所有的列生成统计信息
参数说明:
schname:模式名
tablename:表名
举例说明:
对’SYSOBJECTS’表上所有的列生成统计信息
CALL SP_TAB_COL_STAT_INIT (‘SYS’, ‘SYSOBJECTS’); -
SP_STAT_ON_TABLE_COLS
定义:
SP_STAT_ON_TABLE_COLS(
SCHEMA_NAME VARCHAR(128),
TABLE_NAME VARCHAR(128),
E_PERCENT INT
)
功能说明:
对某个表上所有的列,按照指定的采样率生成统计信息
参数说明:
schname:模式名
tablename:表名
E_PERCENT:采样率(0-100]
举例说明:
对’SYSOBJECTS’表上所有的列生成统计信息,采样率 90
CALL SP_STAT_ON_TABLE_COLS (‘SYS’,‘SYSOBJECTS’,90); -
SP_TAB_STAT_INIT*
定义:
SP_TAB_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对某张表生成统计信息
参数说明:
schname:模式名
tablename:表名
举例说明:
对表 SYSOBECTS 生成统计信息
CALL SP_TAB_STAT_INIT (‘SYS’, ‘SYSOBJECTS’); -
SP_SQL_STAT_INIT*
定义:
SP_SQL_STAT_INIT (
sql varchar(8187)
)
功能说明:
对某个 SQL 查询语句中涉及的所有表和过滤条件中的列(不包括大字段、
ROWID)生成统计信息。
可能返回的错误提示:
1) 语法分析出错,sql 语句语法错误
2) 对象不支持统计信息,统计的表或者列不存在,或者不允许被统计
参数说明:
sql:sql 语句
举例说明:
对’SELECT * FROM SYSOBJECTS’语句涉及的所有表生成统计信息
CALL SP_SQL_STAT_INIT (‘SELECT * FROM SYSOBJECTS’); -
SP_INDEX_STAT_DEINIT*
定义:
SP_INDEX_STAT_DEINIT (
schname varchar(128),
indexname varchar(128)
)
功能说明:
清空指定索引的统计信息
参数说明:
schname:模式名
indexname:索引名
举例说明:
清空索引 IND 的统计信息
CALL SP_INDEX_STAT_DEINIT (‘SYSDBA’, ‘IND’); -
SP_COL_STAT_DEINIT*
定义:
SP_COL_STAT_DEINIT (
schname varchar(128),
indexname varchar(128),
colname varchar(128)
)
功能说明:
删除指定列的统计信息
参数说明:
schname:模式名
indexname:索引名
colname:列名
举例说明:
删除 SYSOBJECTS 的 ID 列的统计信息
CALL SP_COL_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’, ‘ID’); -
SP_TAB_COL_STAT_DEINIT*
定义:
SP_TAB_COL_STAT_DEINIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
删除表上所有列的统计信息
参数说明:
schname:模式名
tablename:表名
举例说明:
删除 SYSOBJECTS 表上所有列的统计信息
CALL SP_TAB_COL_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’); -
SP_TAB_STAT_DEINIT*
定义:
SP_TAB_STAT_DEINIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
删除某张表的统计信息
参数说明:
schname:模式名
tablename:表名
举例说明:
删除表 SYSOBECTS 的统计信息
CALL SP_TAB_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’);