Go back to the English version of the documentationData Virtualization不收集表统计信息
Data Virtualization不收集表统计信息
Last updated: 2024年11月26日
创建虚拟表时,未正确收集某些表统计信息。
症状
在创建虚拟表期间,有时不会收集表统计信息。 缺少的表统计信息可能会对查询性能带来严重影响。
解决问题
要解决此问题,请执行以下步骤:
- 通过运行以下命令来确定是否缺少表统计信息。
select cast(TABNAME as varchar(25)), TYPE, COLCOUNT, STATS_TIME from SYSCAT.TABLES where TABSCHEMA='<schema>' and CARD = -1;
将 <schema> 替换为虚拟表的模式名称。 该命令会列出模式中CARD为-1 的所有对象,这表示尚未收集统计数据。
- 对于每个卡入度为-1 的表,运行以下命令,用虚拟化对象的名称替换<schema>和<table_name>。
call SYSPROC.NNSTAT(NULL, '<schema>', '<table_name>', '<list_of_columns_commonly_used_in_predicates>', '', 2, '/tmp/<table_name>.log', ?, 1);
此调用收集 <list_of_columns_commonly_used_in_predicates>中指定列的表级别统计信息和列级别统计信息。 如果该表有几列,那么可以通过传递列列表自变量的
NULL
来收集该表中所有列的统计信息。 该调用使用基于数据的统计信息收集方法,这可能会使运行成本高昂。 您可以在非高峰时间收集统计信息。 有关更多信息,请参阅 SYSPROC.NNSTAT 存储过程。 - 重复步骤 1 以确保收集所有表统计信息。
有关详细信息,请参阅 Data Virtualization中的提高查询性能。