Teradata 性能调优

17 Mar 2025 | 4 分钟阅读

在 Teradata 中,性能调优旨在识别所有瓶颈并加以解决。

瓶颈并非错误形式,但它确实会导致一定的延迟。

识别和解决瓶颈的方法如下:

EXPLAIN 计划

性能调优的第一步是对查询使用 EXPLAIN。当查询前面带有 EXPLAIN 命令时,解析引擎的执行计划将返回给用户而不是 AMPs。

EXPLAIN 计划清晰地展示了优化器将如何执行查询。在 EXPLAIN 计划中,检查以下关键字:

  • 置信度
  • 使用的连接策略
  • Spool 文件大小
  • 重新分布等。

收集统计信息

优化器使用数据分布信息来制定有效的执行策略。COLLECT STATISTICS 命令用于收集表的数据分布信息。确保对列收集的统计信息是最新的。

  • 对 WHERE 子句中使用的列和连接条件中使用的列收集统计信息。
  • 对唯一主索引列收集统计信息。
  • 对非唯一辅助索引列收集统计信息。优化器将决定是使用 NUSI 还是全表扫描。
  • 通过对基表收集统计信息来对连接索引收集统计信息。
  • 对分区列收集统计信息。

数据类型

表中的每个列都关联一个数据类型。数据类型指定列中将存储哪种类型的值。每个数据值都属于一种 SQL 数据类型。

确保使用正确的数据类型。这将避免使用超过所需容量的存储空间。

转换

确保连接条件中使用的列的数据类型兼容,以避免显式数据转换。

Sort

除非需要,否则删除不必要的 ORDER BY 子句。

Spool 空间问题

如果查询超出该用户每个 AMP 的 Spool 空间限制,则会生成 Spool 空间错误。

验证 EXPLAIN 计划并识别消耗更多 Spool 空间的步骤。这些常见查询可以拆分并单独构建临时表。

主索引

主索引用于指定数据在 Teradata 中的位置。每个表都要求定义主索引,因此请确保为主表正确设置主索引。

主索引列应均匀分布数据,并应经常用于访问数据。

分区主索引

如果在表中定义了分区主索引,请尝试使用它。如果我们不在过滤条件中使用它,它会降低性能。

SET 表

如果我们定义了一个 SET 表,那么优化器将检查插入的每条记录是否存在重复。要删除重复检查条件,我们需要为表定义唯一辅助索引。

大表更新

更新大表将非常耗时。与其更新表,不如删除记录并插入带有修改行的文件。

删除临时表

如果不再需要,请删除临时表(暂存表)和易失表。这将释放永久空间和 Spool 空间。

MULTISET 表

如果确认输入记录没有重复文件,我们可以将目标表定义为 MULTISET 表,以避免 SET 表使用的重复行检查。

IN 子句

当 WHERE 条件中可能有大量值时,避免在过滤条件中使用 IN 子句,此时最好将这些值插入到一个易失表中,并在主查询中使用该易失表进行 INNER JOIN。

UPDATE 子句

避免在 UPDATE 子句中只使用 SET 条件而没有 WHERE 条件。即使目标表和源表只有一行,也要为 PI 列添加 WHERE 子句。


下一主题#





Youtube 关注我们的Youtube频道获取视频:立即加入

反馈


帮助他人,请分享

facebooktwitterpinterest

学习最新教程


准备


热门技术


B.Tech / MCA