4

Subquestioning SQL - when should you use “with (nolock)”什么是锁定,财务操作中的死锁问题?

在一个地方金融机构我被他们的程序员表达它们(B)锁定在他们的MS SQL Server 2005数据库(一个或多个)并没有使问题我认为(他们的程序员与痴迷)斥责对我来说很有意义。

如果财务操作从未更新,删除甚至不正确的操作(“交易”的一部分?)通过在数据库中插入(添加)新的更正记录来更正,则可能存在锁定,阻塞,死锁的问题)?
这是英文的术语?在其他语言中,它被称为storno,stornoed(?)操作/记录。

所以,据我所知,“交易”真的永远不会回滚,从来没有不正确/不存在的记录,只有非实际的记录。

更新:
我搜索了storno并找不到任何结果,其定义在英文或英文文本中使用。
我只在意大利语中找到了storno的定义(用拉丁字母)。
但是会计是在意大利发明的,很多意大利会计术语被用在其他语言中,例如在俄罗斯的会计(银行)中。
我也认为这是国际上公认的金融操作问题的做法,不是吗?

UPDATE2:
美国洛特给我链接到The way that transactions are reversed in an ERP application is a big deal!告知storn是反向交易。

嗯,这是不正确的。 Storno不仅TRANSATION,它是校正不正确的操作虽然2个操作结合似乎扭转tranaction任何操作(事务的一部分)(由2个操作 - 计入并扣除于目标和源账户)。

所以,storno不是通过世界通用财务会计的做法?

无论如何,我想避免讨论会计细节/技术/术语,并且在记录从不删除或更新时将问题限制在上下文中。

什么是与锁定,在这种情况下封锁,死锁,性能可能出现的问题?

+0

“其他语言?”你真的可以具体吗? – 2010-10-01 01:55:50

+1

你在说这个吗? http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html – 2010-10-01 01:56:51

+0

@ S.Lott,发表您的答案。我喜欢它,因为它对我很有帮助。在主文章 – 2010-10-01 02:21:23

回答

2

很好地总结了“Storno Transactions”或“Reversing Transactions”。在很多地方。

http://richardatopenbravo.blogspot.com/2010/02/way-that-transactions-are-reversed-in.html

http://help.sap.com/saphelp_46b/helpdata/en/d2/6f921f415e11d182b10000e829fbfe/content.htm

http://forum.wordreference.com/showthread.php?t=1875166

不要混为一谈会计软件实现。一个合理的实现可以通过最小的锁定来实现。但是,这并不意味着什么。你可能已经赢得了一个责备,因为软件是(一)设计糟糕和(b)要求,因为设计不良小心锁定。

可能是什么问题...?

由于我们不知道软件编写得有多好,有多差,所以无法猜测。他们可能知道一些你不知道的系统。

一个简单的storno交易系统应该易于实现。的确,应该是是微不足道的。

如果在插入过程中使用页面级锁定,则一对“仅插入”表仍可能遇到死锁。

表A中,页面1具有交易X.

表B的插入,第2页在交易Y.

表B的插入,第2页在交易X.插入

表A第1页在事务Y中有一个插入。

避免死锁的唯一方法是让整个系统使用一个表。或者将所有交易限制在一个表中。或者使用单个数据库范围的锁。

如果您有多表操作(和页面级锁定),那么即使只进行了插入操作,您仍然会有潜在的死锁。显然这很少见,但仍然有可能。

+0

中查看我的更新“或使用单个数据库范围的锁。”呃,这就是所谓的单用户系统。当然,你已经减少了死锁,但是你已经序列化了所有的交易。 – PerformanceDBA 2010-11-02 15:28:49

+0

* ...即使只有插入操作。显然这很少见,但仍然有可能。*这不是“稀有”。插入会导致在各个点上的锁定:堆;索引页面;当需要移动行时。当用户数增加时,阻塞锁和因此死锁增加。这是普通的。 – PerformanceDBA 2010-11-02 15:31:29

+0

@PerformanceDBA:“SQL服务器将锁定”与死锁不同。使用单个可锁定资源,死锁在逻辑上是不可能的。 – 2010-11-02 18:25:47