c# - 任务并行库和外部 SQL Server

标签 c# .net sql-server task-parallel-library

我有一个 Windows 服务,它使用任务并行库 (TPL) 并行执行大量任务。这将被扩展以处理与外部服务器上的 SQL Server 交互的任务。

TPL 应该擅长测量负载并将正确数量的并行线程分配给任务。有没有办法让它知道外部 SQL Server 实例的负载?在本地服务器上为每个任务运行的实际代码非常小,但对数据库的调用可能非常繁重。

我的服务是否不太可能因请求而导致数据库停滞不前,因为 TPL 发现本地服务器有大量免费资源,或者是否有已知的方法来处理这个问题?

最佳答案

TPL 没有什么可以帮助您解决这个问题。 TPL 是关于管理/最大化本地应用程序的 CPU 负载。它不知道 SQL 负载,更不用说在另一台机器上了。

就是说,如果您想变得疯狂,有一个名为 TaskScheduler 的扩展点。 .理论上你可以 implement a custom TaskScheduler它可以监视 SQL 服务器上的负载,并且仅在负载达到某个定义的阈值时才安排任务执行。

老实说,我认为这不是解决问题的正确方法。针对 SQL 服务器等共享资源管理负载与 TPL 旨在解决的问题完全不同。您最好确保您设计的应用程序不会通过负载测试自行滥用 SQL 服务器,找到最佳点并配置您的应用程序不会超出这些范围。从那里开始,您的 DBA 将需要为 SQL Server 基础架构本身确定正确的解决方案,以管理该应用程序的需求以及任何其他外部负载。

关于c# - 任务并行库和外部 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258656/

相关文章:

c# - 数据库恢复后查询超时

c# - 领域驱动设计——产品盘点,我该怎么做?

c# - 将 List<List<object>> 转换为 List<List<string>>

c# - 为了放弃验证码,我有哪些选择

.net - 用于调试的可靠错误消息中应该包含哪些内容?

sql-server - 可以在 SQL Server 中对 1000 位数字执行按位运算吗?

sql - 如何在 SQL 查询中查找时隙冲突

c# - 将对象添加到对象列表

c# - 类库中的 .net Reference Web

sql-server - 有使用 Entity Framework 将 SQL Server 链接服务器连接到 DB2 的经验吗?