【问题标题】:Handling Stored Procedure处理存储过程
【发布时间】:2013-01-05 09:51:06
【问题描述】:

我正在开发一个控制台应用程序。完成初步检查和先决条件后,我必须根据 sql 表的行引入 5 个线程。例如,如果我的表包含 1000 行,那么我将不得不拆分行并平均分配给所有 5 个线程,在这种情况下,我将进行拆分并为每个线程分配(创建数据表)200 行线程,然后所有 5 个线程将使用数据表同时调用 SP。在 SP 中是否有任何事情需要处理,因为它将由 5 个线程并行执行,我如何处理 SP 内的插入、删除和截断?会不会有问题,如果同时执行多个插入或删除或截断查询,是否会发生冲突?或者SP中是否有任何锁定功能,只允许对SP中的一条sql语句进行一次操作?

由于我对这种要求不熟悉,我需要帮助找出可能发生的问题以及克服它的方法。如果我能在这种情况下得到任何提示和技巧,那就太好了..

提前谢谢..

abivenkat

【问题讨论】:

  • 你能说明这个过程是做什么的吗?
  • 你能解释一下为什么要使用 5 个线程来查询表吗?这似乎是一个非常奇怪的要求。我本来预计可能有 1 个线程调用 sproc,并且可能有多个线程来处理输出,但这似乎很奇怪。
  • @VenkatramananLakshmanan ..您应该知道,您刚才所说的并非总是如此。这对我来说听起来像是过早的优化..
  • @VenkatramananLakshmanan 你真的证明了这个理论吗?您是否声称 10 个线程会比 5 个线程快?就像我说的,我理解如果您使用 1 个线程获取数据,然后使用多个线程处理结果。但是,我相信您猜测 5 次查询会更快。想一想 - 这没有任何意义。
  • 5 个人在 1 个炉子上烹饪 5 顿饭,如果按顺序使用会更快。

标签: c# sql sql-server multithreading stored-procedures


【解决方案1】:

查看 SQL Server 中的ISOLATION LEVEL 设置。最好将其设置得尽可能高,以防止数据损坏,但是,这可能并且将会导致大量锁,并且并行执行可能会使事情变得更糟,而不是更好。

根据您的程序代码,您甚至可能会遇到死锁,这只会回滚一些调用,应该重新发出这些调用,这可能会导致额外的死锁,并且在不知不觉中,您的数据库完全处于混乱状态d 状态。

对于此类数据密集型操作,我的建议是完全不要使它们瘫痪,只需逐个运行它们即可。如果您的服务器是多核机器,它甚至可能自行瘫痪。

当然,这些都是广泛的挥手。要获取具体信息,需要分析数据的结构(以及任何索引)以及将要执行的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 2011-12-07
    • 2014-07-18
    • 1970-01-01
    • 2019-10-28
    • 2013-05-17
    • 2014-11-13
    • 2012-01-31
    相关资源
    最近更新 更多