【问题标题】:Loading data from a slow source best practices从慢速源最佳实践加载数据
【发布时间】:2020-04-16 10:10:52
【问题描述】:

我正在寻找从本身很慢的源加载数据时的任何最佳做法 - 无论是来自服务器上的高负载、低带宽还是其他原因 - 并且您无法对性能做任何事情源,仅在加载时。

我有一个数据源 Pervasive PSQL Server 11.2 和一个包含 30M+ 记录的表。我只想提取最近两年的数据。使用 WHERE 语句的任何操作都会使查询运行 60 分钟以上而不发送任何数据。做一个

SELECT * FROM [table];

有效,但获得了 10 年以上不需要的数据,而且需要很长时间,我无法每晚都运行它。将 AutoAdjustBufferSize 设置为 true 可以提高性能,但还远远不够。

日期列是 DATE 数据类型列。我已经尝试过 YEAR(column) > 2018 并尝试过 BETWEEN 并将前四个字符转换为 INT 但没有任何东西可以加快加载时间。

【问题讨论】:

  • 我会尝试column >= '2018-01-01',即列本身,而不是作为函数的参数。
  • 我同意其他评论。尝试为 WHERE 子句设置一个完整的日期。此外,检查该字段的索引。如果一个不存在,则添加一个。它不会影响任何现有的应用程序,除非应用程序在更新中更新该表的结构,否则您不必再次添加索引。
  • 我试过'2018-01-01'。不幸的是,大约一个小时后它仍然超时。该字段似乎没有索引,我无法添加。如果我可以更改来源,我会尝试一种完全不同的方法。
  • 这是一次加载还是每天提取过去两年的数据?此外,您能否测试将数据导出到服务器本地的平面文件(整个表)以隔离问题。导出需要一个小时吗?
  • 这将是一个日常过程。我将尝试进行本地出口。感谢您的建议!

标签: sql ssis etl pervasive


【解决方案1】:

我们最终做了一个两阶段的解决方案。我们将前几年加载到历史表中(一次加载或每年加载),然后每周加载当前年份并在每日加载中加载上个月+当前月份。限制数据使得使用 WHERE 语句成为可能。而且我认为这是一种足够好的数据加载模式。

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多