gpt4 book ai didi

sql-server - 在非常繁忙的表中连续查找而不阻塞它的简单方法

转载 作者:行者123 更新时间:2023-12-03 17:40:07 24 4
gpt4 key购买 nike

我有一个每分钟接收数千次插入的表,重要的是插入速度非常快,否则会在我的应用程序的其他地方导致性能问题。这就是为什么这个表根本不包含任何索引的原因。这效果很好,插入性能令人满意。

但是,我也想经常在这个表中查找,就像复杂查询的每一秒一样。我不能按原样在 table 上做,因为如果没有索引,它的执行速度会太慢。

所以我想不断地将数据从这个表移动到另一个包含索引的表。但是,假设我每分钟都用一个简单的 sql 脚本移动它,恐怕我在移动记录(在事务中插入 + 删除)时可能会阻止插入到表中,这会影响我的应用程序的性能.

那么,实现这一目标的明智(但/和简单)方法是什么?

到目前为止,这是我最好的想法:

1. 使用 SQL Server Service Broker

我在 table 上放了一个触发器并向服务代理添加新项目,我认为这应该是异步的,不会导致性能问题。然后我需要另一个工作从队列中读取。我以前没有这样做过,我不确定这个解决方案有多好。

2.使用“复制”

我不喜欢这个解决方案,因为复制设置很复杂,所以我在这里提到它是为了说我很乐意不收到关于此的建议。

3. 做就做

可能是我多虑了。我应该每分钟运行一次吗?

BEGIN Transaction
-- Insert all rows in other table
-- Delete all rows from table
END Transaction

请注意,目标表也将非常繁忙,因此该作业可能会在队列中等待大量查询完成。

期待听到您关于如何应对这一挑战的建议。

最佳答案

这是一个有趣的问题。可以肯定的是,在辅助节点上读取的集群上的复制可能是最干净的解决方案,但是如果您无法将该基础设施部署到位或负担不起企业许可证,那么我会选择代理。您需要测试您的两个解决方案,但我的猜测是“Just do it”解决方案会遇到许多死锁并导致缓慢问题。
我知道这是一个老问题,所以我想知道你最终选择了什么解决方案?我的票投给了经纪人。
由于您的读取查询很复杂,您可以执行某种“大数据”架构,其中代理不仅将数据复制到另一个表,而且还会预先计算您在大量读取查询中需要的一些内容。例如,如果您需要获取某个时间段内某些数据的平均值或总和,您可以使用代理预先计算这些数据,以便您的读取查询更容易运行。这样你的其他查询在系统上也会更轻。

关于sql-server - 在非常繁忙的表中连续查找而不阻塞它的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38264841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com