从客户端c#在远程服务器上执行长脚本的最佳方法

时间:2015-04-12 17:53:32

标签: c# sql-server database multithreading parallel.foreach

我有许多脚本文件要从客户端c#代码在远程sql server数据库上执行。需要以相同的顺序在各种服务器上执行相同的脚本文件。 例如,有以下几点:
文件 - " file1.sql"," file2.sql"," file3.sql" &安培; 数据库服务器 - " server1"," server2"," server3" (这将是100左右) 数据库 - " testdb"存在于每个数据库服务器上 然后我需要执行file1.sql然后file2.sql,然后在server1,server2和server3上的每个testdb数据库上并行执行file3.sql。

由于我想在所有服务器上并行执行脚本,所以我打算使用任务并行库的Parallel.for循环来创建线程并通过c#代码在数据库服务器上并行执行。 我打算使用smo对象从c#代码执行sql server脚本。

请告知我是否认为使用tpl库从c#代码在sql server上执行脚本是否有意义,或者是否有其他更好的方法可以遵循。

生产中存在的一个重要事实是,将有大约100个数据库(数据库服务器)。

感谢所有回复和建议。

感谢。

更多信息已添加: 我认为tpl的Task类使用线程池线程,因此如果要创建100个线程以便在100个数据库上执行,那么它可能是一个问题,因为它可能使用所有线程池线程(线程池通常有25个线程)和服务器可能会被阻塞。此外,由于线程池线程数量有限,并且对于长时间运行的任务使用线程池线程不是一个好的选择,那么我们是否需要实现自己的实现来管理线程?

1 个答案:

答案 0 :(得分:0)

Tpl是解决这个问题的好方法。另一种可能的方法是使用powershell进行工作。我提出PowerShell的唯一原因是PowerShell脚本可以更灵活地维护和执行这类事情。看看at this discussion。但是在使用TPL的C#中做这件事并没有错。