Go back to the English version of the documentationData Virtualization中的 COLLECT_STATISTICS 存储过程
Data Virtualization中的 COLLECT_STATISTICS 存储过程
Last updated: 2024年11月26日
收集 "Data Virtualization中虚拟化表的统计数据。 Data Virtualization优化器使用这些统计数据来确定最佳访问计划,以便高效处理查询。 模式为 DVSYS
。
借助更多的表统计信息,优化器可以做出更好的决策,以提供最佳的访问方案。 当您对表运行 COLLECT_STATISTICS
时,针对该表的后续查询通常会以更快的速度运行。 有关详细信息,请参阅 Data Virtualization中收集统计数据。
重要信息: 使用 ANALYZE 命令 (而不是
COLLECT_STATISTICS
过程) 来收集有关对象存储器上的虚拟化表的统计信息。 有关更多信息,请参阅 ANALYZE 命令。 要确定通过对象存储器创建哪些虚拟化表,可以按类型过滤虚拟化对象。 在 的 过滤器 菜单中选择 Object Storage, 表或 视图 。授权
要运行 "COLLECT_STATISTICS
程序,您必须是Data Virtualization 经理或工程师。 有关详细信息,请参阅管理Data Virtualization中的用户角色。
要收集统计数据,您必须在远程数据源和Data Virtualization中获得适当的授权。.
输入参数
- virtschema
- 此必需参数的类型为 VARCHAR (128)。 指定虚拟化表的模式名称。
- 病毒名称
- 此必需参数的类型为 VARCHAR (128)。 指定虚拟化表的名称。
- virtcolumns
- 此可选参数的类型为 VARCHAR (32672)。 指定要为其收集统计信息的列的名称的逗号分隔列表。 空值指定将收集所有列的统计信息。 空字符串指定不收集任何列统计信息。 在这种情况下,仅收集表基数。 如果列名包含任何特殊字符,那么该名称必须用双引号括起。
- collection_type
- 此必需参数的类型为 SMALLINT。 指定统计信息收集类型。 有效值为 1 (remote-catalog 类型) 和 2 (remote-query 类型):
- 远程目录
- 仅支持本地统计信息收集方法的远程数据源中的虚拟化表支持此类型的统计信息收集。检索存储在远程数据源目录表中的统计数据,然后将其存储在Data Virtualization统计目录中。 确保在远程数据源中提供准确的统计信息至关重要。 分组表不支持 remote-catalog 类型的统计信息收集。
- 远程查询
- 此类型的统计信息收集使用针对虚拟化表的 SQL 查询来计算统计信息。 如果虚拟化表具有许多行或收集了许多列的统计信息,那么此类型可能需要大量资源,并且需要很长时间才能完成。 为了提高性能和节省资源,可以通过在Data Virtualization中的 COLLECT_STATISTICS 存储过程中指定 TABLESAMPLE 选项,或使用 "ANALYZE命令对云对象存储中的数据源进行数据采样,从而收集统计数据。
- 选项
- 此可选参数的类型为 VARCHAR (32672)。 指定以逗号分隔的额外参数列表。
- TABLESAMPLE
- 指定 0 到 99 (含) 之间的双精度值。 该值表示计算统计信息时要采样的表的百分比。 缺省值 0 指定不执行采样。 此选项仅对 remote-query 统计信息收集类型有效。
- SAMPLING_THRESHOLD
- 指定大于 0的整数值。 该值表示可以使用采样 (如果指定) 之前数据源必须包含的最小行数。 缺省值为 1000。 如果行数小于此阈值,那么在计算列统计信息时不使用采样。 此选项仅对 remote-query 统计信息收集类型有效。
输出参数
- 诊断
- 此参数的类型为 VARCHAR (32672)。 表示发生故障时的诊断输出以及具有缩写结果的所收集统计信息的摘要。
使用说明
- 每当对远程数据源中的数据进行重大更改时,直接或通过Data VirtualizationWeb 客户端运行 COLLECT_STATISTICS 过程。
- 如果列名包含任何特殊字符,那么该名称必须用双引号括起。
- 如果远程数据源支持用于收集本地统计信息的工具,请确保收集本地统计信息,并且使用 remote-catalog 类型来收集虚拟化表上的统计信息。
- 如果远程数据源不支持用于收集本地统计信息的工具,那么 remote-query 类型是唯一可用的选项。 如果虚拟化表有许多行,请使用 TABLESAMPLE 选项。 在大多数情况下,建议采样率为 20%。
- 如果未指定 TABLESAMPLE 选项,那么 SAMPLING_THRESHOLD 选项无效。
- 如果指定 TABLESAMPLE 选项,并且虚拟化表中的行数小于 SAMPLING_THRESHOLD (缺省值为 1000) ,那么不会进行采样,因为生成的统计信息将处于次优状态。
- 当您指定 TABLESAMPLE 选项时,如果采样率过低,那么统计信息收集可能处于次优状态。 但是,提高采样率将消耗更多资源,降低统计信息收集的性能。
- 当您指定 TABLESAMPLE 选项时,如果虚拟化表的行数有限,那么统计信息收集可能不理想。 在这种情况下,请增大 TABLESAMPLE 值或不采样数据。
- 如果虚拟化表引用了远程数据源中的视图,那么 remote-query 类型是唯一可用的选项,并且不支持 TABLESAMPLE 选项。
- 如果指定了采样率接近 100 的 TABLESAMPLE 选项,但统计信息收集仍处于次优状态,请考虑更改 SAMPLING_THRESHOLD 值。
- 仅针对 LOB 类型的列收集 NUMNULLS 统计信息。
示例
以下示例对属于 IBM Db2®中 SAMPLE 数据库的表使用虚拟化表。 有关更多信息,请参阅 SAMPLE 数据库。
- 使用 remote-catalog 类型来收集 DEPARTMENT 表中所有列的统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', null, 1, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."DEPARTMENT": Table Cardinality = 14 Column "LOCATION" [CHAR(16)]: colcard=1, numnulls=14, highkey="", lowkey="" Column "ADMRDEPT" [CHAR(3)]: colcard=3, numnulls=0, highkey="E01", lowkey="A00" Column "DEPTNAME" [VARCHAR(36)]: colcard=14, numnulls=0, highkey="SPIFFY COMPUTER SERVICE DIV.", lowkey="BRANCH OFFICE F2" Column "MGRNO" [CHAR(6)]: colcard=9, numnulls=6, highkey="000100", lowkey="000020" Column "DEPTNO" [CHAR(3)]: colcard=14, numnulls=0, highkey="I22", lowkey="B01" Return Status = 0
- 使用 remote-query 类型来收集 DEPARTMENT 表中所有列的统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', null, 2, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."DEPARTMENT": Table Cardinality = 14 Column "LOCATION" [CHAR(16)]: colcard=1, numnulls=14, highkey="", lowkey="" Column "ADMRDEPT" [CHAR(3)]: colcard=3, numnulls=0, highkey="E01", lowkey="A00" Column "DEPTNAME" [VARCHAR(36)]: colcard=14, numnulls=0, highkey="SUPPORT SERVICES", lowkey="ADMINISTRATION SYSTEMS" Column "MGRNO" [CHAR(6)]: colcard=9, numnulls=6, highkey="000100", lowkey="000010" Column "DEPTNO" [CHAR(3)]: colcard=14, numnulls=0, highkey="J22", lowkey="A00" Return Status = 0
- 使用 remote-query 类型来收集 DEPARTMENT 表中某些列的统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', 'DEPTNO,DEPTNAME,LOCATION', 2, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."DEPARTMENT": Table Cardinality = 14 Column "LOCATION" [CHAR(16)]: colcard=1, numnulls=14, highkey="", lowkey="" Column "DEPTNAME" [VARCHAR(36)]: colcard=14, numnulls=0, highkey="SUPPORT SERVICES", lowkey="ADMINISTRATION SYSTEMS" Column "DEPTNO" [CHAR(3)]: colcard=14, numnulls=0, highkey="J22", lowkey="A00" Return Status = 0
- 使用 remote-query 类型仅收集 DEPARTMENT 表统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', '', 2, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."DEPARTMENT": Table Cardinality = 14 Return Status = 0
- 使用 remote-query 类型来尝试收集 DEPARTMENT 表中未定义的列的统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', 'DEPTNO,FIRSTNME', 2, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : ERROR: VALIDATE COLUMN FILTER LIST -- Invalid column "FIRSTNME" in virtColumns Return Status = 0
- 当远程目录没有本地表 (DEPARTMENT) 的统计信息时,使用 remote-catalog 类型来收集统计信息。
call dvsys.collect_statistics('SAMPLE', 'DEPARTMENT', null, 1, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : WARNING: No statistics found in remote catalog for table "SAMPLE "."DEPARTMENT" Return Status = 0
- 当指定了具有特殊字符的列时,使用 remote-catalog 类型来收集统计信息。
call dvsys.collect_statistics('SAMPLE', 'SpecialChars', '"Col,1","Col""2"', 2, null, ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."SpecialChars": Table Cardinality = 4 Column "Col,1" [INTEGER]: colcard=3, numnulls=0, highkey="3", lowkey="1" Column "Col"2" [INTEGER]: colcard=3, numnulls=1, highkey="2", lowkey="1" Return Status = 0
- 使用 remote-catalog 类型和 20% 的采样率来收集 SALES 表中所有列的统计信息。 已将额外的行添加到 SALES 表以方便采样。
call dvsys.collect_statistics('SAMPLE', 'SALES', null, 2, 'TABLESAMPLE=20', ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."SALES": Table Cardinality = 1304 Column "SALES_DATE" [DATE]: colcard=247, numnulls=0, highkey="2007-03-31", lowkey="2005-12-31" Column "SALES_PERSON" [VARCHAR(15)]: colcard=3, numnulls=0, highkey="LUCCHESSI", lowkey="GOUNOT" Column "SALES" [INTEGER]: colcard=19, numnulls=0, highkey="19", lowkey="1" Column "REGION" [VARCHAR(15)]: colcard=4, numnulls=0, highkey="Quebec", lowkey="Manitoba" Return Status = 0
- 使用 remote-catalog 类型,采样率为 20% , SAMPLING_THRESHOLD 为 40 行来收集 EMP 表中所有列的统计信息,缺省情况下该表包含 42 行。 如果未指定 SAMPLING_THRESHOLD ,那么将忽略 TABLESAMPLE 选项,因为缺省采样阈值为 1000 行。
call dvsys.collect_statistics('SAMPLE', 'EMP', null, 2, 'TABLESAMPLE=20,SAMPLING_THRESHOLD=40', ?)
Value of output parameters -------------------------- Parameter Name : DIAGS Parameter Value : Collected statistics for table "SAMPLE "."EMP": Table Cardinality = 42 Column "EDLEVEL" [SMALLINT]: colcard=5, numnulls=0, highkey="19", lowkey="12" Column "PHONENO" [CHAR(4)]: colcard=10, numnulls=0, highkey="8953", lowkey="1793" Column "SEX" [CHAR(1)]: colcard=2, numnulls=0, highkey="M", lowkey="F" Column "FIRSTNME" [VARCHAR(12)]: colcard=11, numnulls=0, highkey="VINCENZO", lowkey="DIAN" Column "MIDINIT" [CHAR(1)]: colcard=10, numnulls=0, highkey="V", lowkey=" " Column "BIRTHDATE" [DATE]: colcard=11, numnulls=0, highkey="2003-05-26", lowkey="1955-09-15" Column "COMM" [DECIMAL(9,2)]: colcard=11, numnulls=0, highkey="4220.00", lowkey="1272.00" Column "SALARY" [DECIMAL(9,2)]: colcard=11, numnulls=0, highkey="96170.00", lowkey="31840.00" Column "LASTNAME" [VARCHAR(15)]: colcard=9, numnulls=0, highkey="YAMAMOTO", lowkey="ADAMSON" Column "WORKDEPT" [CHAR(3)]: colcard=6, numnulls=0, highkey="E21", lowkey="A00" Column "HIREDATE" [DATE]: colcard=9, numnulls=0, highkey="2006-02-23", lowkey="1979-08-17" Column "BONUS" [DECIMAL(9,2)]: colcard=4, numnulls=0, highkey="800.00", lowkey="300.00" Column "EMPNO" [CHAR(6)]: colcard=9, numnulls=0, highkey="200340", lowkey="000050" Column "JOB" [CHAR(8)]: colcard=5, numnulls=0, highkey="OPERATOR", lowkey="CLERK " Return Status = 0