Questions tagged «locking»

通过临时授予请求锁定的进程的独占访问权限来管理对共享数据或资源的并发访问的机制。

1
没有WHERE子句的UPDATE是否会锁定PostgreSQL中的表?
整个表UPDATE(没有指定WHERE子句)是否在PostgreSQL中锁定了一个表?例如,它是否防止行被删除/插入? 例如,如果运行,是否 UPDATE t1 SET key = 'value' 可以t1在UPDATE执行过程中插入新行? 如果否,我UPDATE是否可以期望即使启动后出现的行也会更新?(键DEFAULT 'value'的定义中没有)


1
SQL Server如何在UPDATE期间同时返回新值和旧值?
在高并发期间,我们遇到了返回无意义结果的查询的问题-结果违反了发出查询的逻辑。重现了一段时间。我设法将可重现性问题分解为少数几个T-SQL。 注意:实时系统中有问题的部分由5个表,4个触发器,2个存储过程和2个视图组成。对于发布的问题,我已经将实际系统简化为更易于管理的内容。事情已经减少了,列被删除了,存储过程被内联了,视图变成了普通的表表达式,列的值改变了。说了这么长的话,虽然后面的内容会重现错误,但可能更难以理解。您必须避免怀疑为什么某种事物以这种方式构造。我在这里试图弄清楚为什么这种玩具模型中的错误情况可重复发生。 /* The idea in this system is that people are able to take days off. We create a table to hold these *"allocations"*, and declare sample data that only **1** production operator is allowed to take time off: */ IF OBJECT_ID('Allocations') IS NOT NULL DROP TABLE Allocations CREATE …

1
是什么导致“等待表级锁定”错误?
我们已经使数据库挂起了两次,并试图找到原因。 show processlist Waiting for global read lock | INSERT INTO {myisam_table} ... 在这里,磁盘空间已满,因此我们认为问题已经解决了,但第二天中午又挂起了: show processlist Waiting for table level lock | UPDATE {myisam_table} ... 是什么原因造成的? Mysql默认引擎:InnoDB。 数据库混合了MyISAM和InnoDB引擎的表。 日志发布在这里: http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/


5
是否可以自动通知我SQL Server中的长时间阻塞?
大约每周一次,我必须解决SQL Server 2005数据库上的阻塞链,这是由Access 2003前端的长期读取锁定引起的。每当用户打开某个表单时,该锁便被取出;当用户完成滚动或关闭该表单时,该锁便被释放。由于我们的许多用户打开此表单作为参考,因此这些锁会保留一段时间。对表的任何更新都会导致阻塞,并且突然之间没有人可以从该表中进行选择,因为他们都在等待第一个锁。这对我们来说是个大问题,因为许多应用程序都依赖于此数据。我知道这种锁定行为是Access与链接表一起工作的一部分。 我一直在通过Activity Monitor解决问题,方法是在发现问题时杀死SELECT进程中的Head Blocker。这是一个问题,不仅是因为我花了一些时间手动进行操作,而且还因为它是被动的。到我听说时,对于许多人来说已经是一个问题。 我想知道是否有一种自动方法来检查这些持久的封锁链,并通过电子邮件发送或自动解决问题。逻辑看起来很简单(“如果匹配此SELECT查询的任何进程被阻塞超过一分钟,请通知我/杀死它”),但我不知道如何使用SQL Server来实现。 对于它的价值,我认为正确的解决方案是修复或重写应用程序。但是,由于部门的政治原因,在接下来的几个月中这不是一个选择,因此我正在寻找一个权宜之计。

4
了解SQL Server锁定和并发性的资源?
最近的矿山锁定和并发问题证明了这一点很困难。 您能否为中级至高级的SQL专业人员提供任何良好的资源,以便对这些专业知识进行深入研究,从而使他们能够适当地学习该领域中的所有固有陷阱,从而进行适当的学习? 我在考虑各种资源-教程,博客,手册页,PASS会话或任何其他内容。

3
Postgres,MVCC和锁定
我有一系列类似于以下内容的SQL语句: BEGIN; SELECT counter FROM table WHERE id=X FOR UPDATE; REALLY COMPLEX QUERY; UPDATE table SET counter=Y WHERE id=X; END; 我想防止在重新计算计数器值时读取该计数器,但是根据Postgres的文档,“行级锁不影响数据查询;它们仅阻止写入同一行的写入器。” 问题: 如果不阻止读取,那么“排他性”行锁又有什么意义呢?只是为了防止其他事务获取共享锁吗? 如果我使用SELECT ... FOR SHARE读取该行,是否会达到与“排他”锁相同的效果? 是否可以为表/模式/数据库关闭MVCC并允许就地写入?

2
在数据集查询中设置NOLOCK提示的选项
一些情况: 首先,我们编写报告只是“直截了当”,在查询中没有任何锁定提示。对于较大的报告,这有时会导致锁定问题。在第一,我们通过使用补救这WITH (NOLOCK)提示在查询表。 因为(a)它是相当突兀,和(b)很容易忘记一个表的提示,我们搬到了第二种方法设置TRANSACTION ISOLATION LEVEL到READ UNCOMMITTED每个数据集的查询的顶部(这是罚款)。 您可能会猜到,忘记其中一个数据集的提示仍然很容易。因此,这导致了一个问题: 问题:与报告查询一起发送NOLOCK提示的选项有哪些? PS。我意识到这在某种程度上是一个XY问题(我还有很多其他的X选择,例如优化查询,不对操作数据库进行报告等),但是尽管如此,它还是试图使之成为一个有效的问题。 选项: 以下是上述选项,并添加了一些选项,我很好奇它们是否可以工作: WITH (NOLOCK)为每个表设置提示。(突兀,很容易忘记) 将READ UNCOMMITTED整个查询的隔离级别设置为。(仍然容易忘记) 是否可以在报告级别指定?例如,确保一个报表的所有数据集查询都将不锁定地运行。 是否可以在其他SSRS级别上指定它?例如,可能是为某个报表文件夹设置此设置,还是使用扩展名? 是否可以在数据源/连接字符串级别指定此名称?例如,所有相关报告是否都使用特定的“无锁数据源”? 与上一个选项相关:也许可以为特定的“ no-lock-sql-user”(在连接中使用的那个)指定默认的锁定提示? ??? 哪些选项可行?有没有我错过的选择?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.