sql-server - SQL Server : Best technique to regenerate a computed table

标签 sql-server high-availability

我们有一些表会在 SQL Server 中定期重新计算。计算需要几秒钟到几分钟的时间,我们执行以下操作:

  1. 将结果转储到compute_table_tmp
  2. 删除计算表
  3. 将计算表_tmp 重命名为计算表。 (以及所有索引)。

但是,我们似乎仍然遇到并发问题,我们的应用程序请求一个 View ,该 View 在计算表不再存在的精确时刻使用它。

在确保高可用性的同时避免此类问题的最佳技术是什么?

最佳答案

如果此表是您的高可用性要求的一部分,那么您就不能按照以前的方式执行此操作。在生产 SQL 环境中删除表会破坏高可用性的概念。

也许能够通过创建 one or more partitions on this table 来实现您想要实现的目标。分区表分为行子组,这些行子组可以分布在数据库中的多个文件组中。然而,出于查询目的,该表仍然是单个逻辑实体。使用表分区的优点是您可以在不破坏数据库完整性的情况下移动数据子集,即高可用性仍然存在。

在您的场景中,您必须修改流程,以便所有事件都在表的生产版本中进行。新行将根据 partition function 的值转储到单独的分区中。 。那么你需要switch分区。

您需要做的事情之一是确定表中可用作分区列的列,该列决定将行分配到哪个分区。例如,这可能是指示行生成时间的日期时间列。您甚至可以使用计算列来实现此目的,前提是它是 PERSISTED 列。

需要注意的是:表分区并非在 SQL Server 的所有版本中都可用...我不相信 Standard 具有此功能。

关于sql-server - SQL Server : Best technique to regenerate a computed table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20098049/

相关文章:

sql-server - 升级到 Python 3.6 和 SQL Server 2016 后出现 Pymssql 错误 20017

sql-server - 为什么我应该使用 Len(列名) 而不是列名 ='' (sql server 2008)

mysql - 连接值和可为 null 的值

sql-server - SQL Server 是否保证标识列的顺序插入?

linux - 我们可以使用 keepalived 将 cpp 应用程序作为 HA 吗?

amazon-web-services - AWS 中不同 AZ 中的多个 Hashicorp Vault 服务器

RabbitMQ 集群和镜像队列的幕后行为

java - Neo4j 在 Java 嵌入式中的高可用性模式

sql-server - SQL 2016 - 将 XML 转换为 Json

sql-server - 具有高可用性组的多宿主 SQL Server