【问题标题】:What is the best way to cache a table from a (SQL) linked server view?从(SQL)链接服务器视图缓存表的最佳方法是什么?
【发布时间】:2016-08-02 12:44:32
【问题描述】:

我有一个从/通过链接服务器检索数据的视图,因此当通过视图调用链接表时,我将使用select * from linkerserver.linkedtable。我的查询有效,我得到了一张信息表。

然而,我担心使用链接服务器时的速度和争用,尤其是当有多个用户访问/调用使用链接服务器视图的 sp(存储过程)时。

我不确定如何解决这个问题,或者即使它是一个问题? (使用链接服务器视图时会面临速度或争用问题吗?)。

解决这个问题的选项可能是:

  1. 创建一个持久临时表 (##MYTEMP),它是视图中数据/表的副本,但存在于本地。
  2. 然后所有调用都被定向到这个本地存在的临时表。
  3. 或在本地创建一个重复的表,并在当天的第一次调用后使用触发器填充此表。

任何有关如何解决此问题或最佳用例的建议将不胜感激。

【问题讨论】:

  • 您需要多久更新一次此表?我听说过的大多数解决方案都会使用 SSIS 定期推送新数据(每周、每晚、每小时……)
  • 嗨,乔,感谢您的留言。本质上,表中的数据每天只更新一次,所以我只需要每天更新一次,比如早上。它位于由不同团队加载的单独服务器上。我通过链接服务器使用数据。我担心速度问题,因为 info.table 很大。因此我缓存它的想法。我只是不确定实现这个的最佳实践....tx

标签: sql-server stored-procedures linked-server


【解决方案1】:

最好的办法是让其他团队在更新数据后向您推送数据。如果他们只是添加新记录,这就是您需要添加到表中的全部内容。如果他们也在更新数据,那么他们可以使用 Merge,以便只处理新记录和更改。

我的第二个选择是在您的服务器上放置一个表,一旦它们完成数据加载,该表就会从链接服务器中删除并重新拉出(或使用合并)。您需要与他们的团队就此进行协调。

我最后的选择是让 SQL 代理每晚提取这些数据。除非源数据也每晚更新一次,否则这将是我的第二选择。如果他们在午夜到凌晨 2 点之间处理,我的工作将在凌晨 3 点或 4 点运行。

【讨论】:

    【解决方案2】:

    SELECT 的结果写入表格非常容易。所有列都会自动创建:

    SELECT * INTO NewTable FROM linkerserver.linkedtable
    

    NewTable 可以是普通表,也可以是###

    使用后(或之前)您只需删除此表...

    【讨论】:

    • 谢谢俊哥。我明白这一点,但如果我的表已过时,我只需要在我的临时表中进行选择。对于每个使用临时表的查询,我首先需要确保它已经过时。这基本上是我想要澄清的这一步。
    • @765tgs 晚上工作会放下你的桌子并自动填满它吗?如果您不希望有间隙(如果您的表是 24 小时使用的),您可以尝试以下操作:将您的数据加载到 tempA。第二天晚上你把它加载到tempB,第二天晚上放下A并重新阅读,第二天晚上放下B并重新阅读。您的进程使用VIEW 来读取数据。重新填充后的最后一步是一个简单的ALTER VIEW 声明...
    【解决方案3】:

    我过去遇到过这个问题。 我从我的经验中注意到,当涉及到链接服务器时,sql server 并没有生成最好的查询计划。

    有这个表的数据库有多大?是否可以进行只读复制?

    如果是,那么最好这样做。如果没有,那么您将需要就像您说的那样,一个本地表和一个触发器。或者每 5 分钟左右使用 sql 代理进行增量更新。

    【讨论】:

    • 基本上 > 10,000 行,20 列。是的,复制只读是一种选择。不过,我喜欢你关于增量更新的想法。
    • 在做复制的时候,不能只复制一张表,还需要复制数据库。所以这就是为什么我要问数据库有多大。如果它不大,那么复制只读比使用 sql 代理增量更新要好得多,因为您不需要重新发明轮子。
    • 我听到了。数据库很大,其中的大部分数据都将被限制访问.....
    • 啊,是的,那么对不起,伙计,你没有选择。 :(
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2015-04-06
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2015-11-19
    相关资源
    最近更新 更多