C#使用多线程或并行执行来执行SQL SP

rajcool111

我有一个SQL Server SP,想对大约一千万个用户记录集执行该命令,以处理用户信息并更新数据库。当前1位用户在DB中更新需要花费几毫秒的时间。既然如此,它必须处理数百万条记录的最佳方法是什么?

我正在考虑使用多线程或并行foreach从C#应用程序执行此操作。以下是运行SP的基本代码,如何使用它在多线程模式下运行以更快地完成处理工作?

 string connString = "data source=.\SQLEXPRESS;initial catalog=Test;integrated security=True;";
            SqlConnection conn = new SqlConnection(connString);
            conn.Open();
            SqlCommand cmd = new SqlCommand("ETL_TEST", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add(new SqlParameter("@user_id", '12345'));
            cmd.ExecuteReader();
            conn.Close();
埃里克·J。

如何使用它在多线程模式下运行以更快地完成处理工作?

Parallel.ForEach()是实现目标的非常合理的起点。到目前为止,向SQL Server发送并发请求可以提高整体吞吐量。

将您的代码放入Parallel.ForEach()的操作中。使用using语句可确保正确处理所有内容(如果在关闭前引发异常,则现在将使连接保持打开状态)。

请注意,.NET Framework将尝试找到最佳数量的线程(并且该框架的不同版本最终可能会选择不同的线程)。.NET可能会选择多个线程

  • 太低(您无法影响,但是可以通过显式创建和管理任务来解决)
  • 太高,导致SQL Server中的执行效率低下(由于IO或锁争用,高CPU等)。在这种情况下,可以使用MaxDegreeOfParallelism属性来限制线程数。如果迁移到功能更强大的SQL Server,请不要忘记调整属性。

请注意,尽管多线程解决方案可能比单线程解决方案更有效,但仍然非常闲谈。它向数据库请求每个用户记录。在这种情况下,我通过将一批工作发送到SQL Server而不是一个工作项,从而实现了按数量级的性能改进。通过重新设计存储过程以一次接受多个用户,您可能会看到最大的收获。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL中执行SP的问题

来自分类Dev

SQL。在执行sp_executesql时如何使用ORDER BY子句?

来自分类Dev

SSIS从SP执行SQL任务返回码

来自分类Dev

使用ExecuteScalar()执行SP时如何在c#中获取输出参数的值

来自分类Dev

Python多线程不会并行执行

来自分类Dev

sp_executesql不执行动态sql

来自分类Dev

sp_executesql不执行动态sql

来自分类Dev

在C#中执行多线程活动的奇怪行为

来自分类Dev

在C#中执行多线程活动的奇怪行为

来自分类Dev

执行dbo.sp_executesql @statement

来自分类Dev

sp_msforeachtable对变量执行操作

来自分类Dev

多用户执行SP时死锁

来自分类Dev

SP已成功执行,但数据未更新

来自分类Dev

如何在tsql中使用动态范围执行SP

来自分类Dev

使用sp_executesql执行具有参数的存储过程

来自分类Dev

sp_procoption未使用OPENQUERY执行存储过程

来自分类Dev

sp_executesql使用错误的执行计划

来自分类Dev

如何在tsql中使用动态范围执行SP

来自分类Dev

sp_executesql使用错误的执行计划

来自分类Dev

使用sp_executesql执行动态SQL时表不存在错误

来自分类Dev

SQL SERVER:如何在不使用循环的情况下执行SP指定的时间

来自分类Dev

如何使用多线程并行执行具有不同参数的方法?

来自分类Dev

在PHP中并行/多线程执行文件

来自分类Dev

如何实现多线程并并行执行几个任务?

来自分类Dev

SQL Server sp_msforeachtable

来自分类Dev

多线程在C ++中执行单个任务

来自分类Dev

如何使用多线程执行子流程

来自分类Dev

在Android NDK中使用“ sp”

来自分类Dev

如何根据另一个sp的多个输出执行sp次数