系统运行过程中在IQ数据库中可能存在一些未使用的表和索引等对象,它们会浪费磁盘空间,增加数据库的备份时间,降低DML操作的性能。
从IQ 12.7 ESD 3开始,IQ提供了收集、分析、查看未被查询语句使用过的表、字段、索引等对象信息的工具。我们在实际系统运行的数据库中,一旦发现这些对象可以把它们删除掉。由于在IQ Simplex(单Server)和IQ Multiplex(集群)环境下的使用方法有些不同,下面将分别加以介绍。
1. IQ Simplex环境下使用方法
下面所说的方法适用于IQ 12.7 ESD 3及以上版本、IQ 15的所有版本(IQ 运行在Simplex环境下)。我们假设使用DBA用户进行登录执行(如果用其他普通用户,那么需要对相应存储过程进行授权)。
(1) 首先需要启动工作负载收集
sp_iqworkmon 'start' --使用缺省模式启动工作负载收集(包括表、字段和索引访问)
注意:收集的信息位于内存中,IQ Server重启或是执行了sp_iqworkmon ‘reset’信息会丢失,并且需要使用上面sp_iqworkmon ‘start’命令重新启动信息收集。
(2) 运行应用系统或应用系统的相关功能模块
在运行期间,IQ会自动收集应用系统发出的SQL语句访问IQ数据库对象的统计信息。
注意:这里所说的SQL语句是指SELECT、UPDATE和DELETE语句。
(3) 停止工作负载收集
sp_iwowrkmon 'stop' --停止工作负载收集
注意:在停止收集后,先前收集的信息不会被清除。
(4) 获得在SQL语句中未使用过对象的信息
sp_iqunusedtable --返回未使用过表的表名和属主信息
sp_iqunusedcolumn --返回未使用字段名、字段所属的表名即属主信息
sp_iqunusedindex --返回未使用索引名、索引类型、所在表名及表的属主信息
注意:这里所说的SQL语句是指SELECT、UPDATE和DELETE语句。
(5) 清除收集的统计信息
sp_iwowrkmon 'reset' --清除收集的信息
注意:当收集的统计信息不再需要时,应当使用reset模式清除它们。
如果想在清除之前把收集的对象使用信息保存下来,可以使用方法:
select * into iq_unusedtable from sp_iqunusedtable();
select * into iq_unusedcolumn from sp_ iqunusedcolumn();
select * into iq_unusedindex from sp_ iqunusedindex();