0 / 0
Go back to the English version of the documentation
Data Virtualization不收集表统计信息
Last updated: 2024年11月26日
Data Virtualization不收集表统计信息

创建虚拟表时,未正确收集某些表统计信息。

症状

在创建虚拟表期间,有时不会收集表统计信息。 缺少的表统计信息可能会对查询性能带来严重影响。

解决问题

要解决此问题,请执行以下步骤:
  1. 通过运行以下命令来确定是否缺少表统计信息。
    select cast(TABNAME as varchar(25)),  TYPE, COLCOUNT,  STATS_TIME from SYSCAT.TABLES 
               where TABSCHEMA='<schema>'   
                       and CARD = -1;

    <schema> 替换为虚拟表的模式名称。 该命令会列出模式中CARD为-1 的所有对象,这表示尚未收集统计数据。

  2. 对于每个卡入度为-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 存储过程

  3. 重复步骤 1 以确保收集所有表统计信息。

有关详细信息,请参阅 Data Virtualization中的提高查询性能

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more