gpt4 book ai didi

C#、Linq2SQL : How long should CommandTimeout be and where should it be set?

转载 作者:行者123 更新时间:2023-11-30 21:25:01 24 4
gpt4 key购买 nike

我们正在使用 C# 和 Linq2SQL 从数据库中获取一些报告的数据。在某些情况下,这需要一段时间。超过 30 秒,这似乎是默认的 CommandTimeout

所以,我想我必须调高 CommandTimeout。但问题是,多少钱?把它设置得很高是不是很糟糕?如果一个客户正在尝试做某事,而只是因为他的数据库中恰好有比普通客户多得多的数据,他因为超时而无法得到他的报告,这不是很糟糕吗?但是我怎么知道它可能需要多少时间呢?有什么方法可以将它设置为无穷大吗?或者这被认为是非常糟糕的?

我应该在哪里设置它?我有一个静态数据库类,它在我需要时为我生成一个新的数据上下文。我可以只创建一个常量并在我创建新数据上下文时设置它吗?还是应该根据用例将其设置为不同的值?对根本不会花费太多时间的事情设置高超时是不是很糟糕?还是真的不重要?

太高的 ConnectionTimeout 当然会更烦人。但是是否存在用户/客户希望超时的情况? SQL 服务器是否会卡住,以至于命令永远不会完成?

最佳答案

CommandTimeout 等确实应该只在每个特定场景的基础上增加。这可以避免意外的长时间阻塞等情况(或更糟:未检测到的死锁情况)。至于高...查询需要多长时间?添加一些余量,您就有了答案。

当然,要做的另一件事是减少查询所需的时间。这可能意味着手动优化 sproc 中的一些 TSQL,通常结合检查索引策略,以及可能更大的更改,例如非规范化或其他模式更改。这可能还涉及数据仓库策略,因此您可以将负载转移到单独的数据库(远离事务数据),并使用针对报告优化的模式。也许是星型模式。

我不会将它设置为无穷大...我不希望运行报告需要很长时间。选择一个对报告有意义的数字。

是的,SQL Server 可以卡住,因此命令永远不会完成。一个开放的阻塞事务将是最简单的……得到两个,你就可以死锁。通常系统会检测到本地死锁 - 但并非总是如此,尤其是在涉及 DTC 时(即非本地锁)。

关于C#、Linq2SQL : How long should CommandTimeout be and where should it be set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861903/

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