MS SQL 并发,多余的锁

     2023-05-08     292

关键词:

【中文标题】MS SQL 并发,多余的锁【英文标题】:MS SQL Concurrency, excess Locks 【发布时间】:2008-10-10 15:39:49 【问题描述】:

我在 ms sql 2000 上有一个数据库,一次被数百名用户访问。使用 Reporting Services 2005 访问同一数据库的大量报告。

当有大量报告正在运行并且人们同时使用数据库时,我们会看到阻塞进程达到系统开始为在这种情况下一段时间后进行的任何事务提供超时的水平。

是否有一种全局方法可以最大限度地减少阻塞,以便事务可以继续进行。

【问题讨论】:

【参考方案1】:

如果更新不经常发生并且数据库主要用于报告,请使用乐观锁定。

SQL Server 有一个相当悲观的锁定默认值。

查看SQL Server Table Hints 可能会让您入门。

【讨论】:

【参考方案2】:

报告可以使用WITH(NOLOCK)

其他可能性是使用数据库的只读副本运行报告,或者使用针对报告需求进行了优化的数据库的数据仓库版本。

【讨论】:

我们要解决的问题是必须制作报告才能实时获取最新数据。这使得复制变得难以跟上。 您对最新的定义可能意味着编写数据的人必须等待——毕竟,他们可能会使报告无效......【参考方案3】:

由于您已经在报告中使用 NOLOCK 提示和 READ UNCOMMITTED 隔离级别,因此调查需要转向传入的事务查询。这可能会变得很深。也许应用程序将事务保持打开的时间过长。也可能是您在其他一些查询卷中进行了大量表扫描或范围扫描,并且这些可能为长时间运行的事务持有共享锁。那些共享锁会阻止你的作者。

您需要开始查看 sp_lock,查看哪些类型的锁未完成,查看被阻塞的查询试图获取哪些锁,然后检查阻塞请求者的查询。

如果您不熟悉 SQL Server 锁定,这将对您有所帮助: Understanding SQL Server 2000 Locking

另外,也许您可​​以描述一下您的磁盘子系统。它可能尺寸过小。

【讨论】:

【参考方案4】:

感谢大家的支持。我们为缓解这个问题所做的工作是创建一个新的数据库,每小时执行一次日志传送过程,以保持与真实数据库的同步。不需要实时数据的报告指向该数据库,而需要实时数据的报告则受到限制,因此只有少数人可以访问它们。该方法的缺点是数据将长达一小时不同步,我们只需要为此目的创建一个新服务器。此外,当日志传送过程运行时,每个连接都会在很短的时间内下降,但对于非常长的过程或报告来说可能是一个问题。在此之后,我将验证报告中的查询,以便了解可以优化的内容。谢谢,我会向整个 IT 部门推荐该网站。

【讨论】:

通过乐观锁(版本号)降低并发时的锁竞争问题

 在高并发下,经常需要处理SELECT之后,在业务层处理逻辑,再执行UPDATE的情况。  若两个连接并发查询同一条数据,然后在执行一些逻辑判断或业务操作后,执行UPDATE,可能出现与预期不相符的结果。  在不使用悲观锁与... 查看详情

sql实战新手入门:理解锁

参考技术A  理解锁  在一个多用户环境中并发是最重要的问题之一当多个会话向共享的资源读取或写入数据时数据可能丢失它的完整性为了避免出现这种情况每一个称职的RDBMS都实现了并发控制机制对于RDBMS服务器通过各种... 查看详情

java并发编程juc中的锁

 一前言  前面已经说到JUC中的锁主要是基于AQS实现,而AQS(AQS的内部结构 、AQS的设计与实现)在前面已经简单介绍过了。今天记录下JUC包下的锁是怎么基于AQS上实现的二同步锁  同步锁不是JUC中的锁但也顺便提下,... 查看详情

java多线程并发编程中的锁

synchronized: https://www.cnblogs.com/dolphin0520/p/3923737.htmlLock:https://www.cnblogs.com/dolphin0520/p/3923167.html 查看详情

并发编程:也谈谈数据库的锁机制

http://www.2cto.com/database/201403/286730.html1.数据库并发的问题 数据库带来的并发问题包括:  1.丢失更新。  2.未确认的相关性(脏读)。  3.不一致的分析(非重复读)。4.幻像读。详细描述如下:1.1.丢失更新当两个或多... 查看详情

06.一文看懂并发编程中的锁

...有什么用呢?它们又有什么区别呢?今天我们就一起聊聊并发编程中的各种锁。关于锁的理论,他们都问什么?问题其实不多,基本上都是围绕着锁的设计理论提问。常见的问题如下:依旧使用图片代替Markdown的表格(​​在线E... 查看详情

《java并发编程的艺术》读后笔记-第五章java中的锁(代码片段)

文章目录《Java并发编程的艺术》读后笔记-第五章Java中的锁第五章Java中的锁1.Lock接口1-1定义1-2Lock的使用1-3Lock与synchronized区别1-4Lock的API2.队列同步器2-1定义2-2队列同步器的接口和示例2-3队列同步器的实现分析1)同步队列2ÿ... 查看详情

浅谈数据库的锁

...库的锁你知道多少?数据库的锁直接影响数据性能,在大并发的前提下,怎么保证数据不被死锁,提高数据库性能?如何加锁,何时加锁,加什么锁,你可以通过hint手工强行指定,但大多是数据库系统自动决定的。这就是为什... 查看详情

数据库的锁机制

数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读、不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念。并发控制在计算机科学,特别是程序设计、操... 查看详情

sqlite3的锁机制和并发控制详解

出自:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328753.html(ps:博主前后几篇文章都很不错!)一、概述:   在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(A 查看详情

并发编程-进程中的锁信号量事件和队列

概要:1.进程同步 1).(锁)Lock 2).信号量 Semaphore 3).事件 Event2.进程通讯:IPC是intent-ProcessCommunication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。IPC不是某个系统所独有的,任... 查看详情

高并发高并发分布式锁架构解密,不是所有的锁都是分布式锁!!(代码片段)

写在前面最近,很多小伙伴留言说,在学习高并发编程时,不太明白分布式锁是用来解决什么问题的,还有不少小伙伴甚至连分布式锁是什么都不太明白。明明在生产环境上使用了自己开发的分布式锁,为什么还会出现问题呢?... 查看详情

详解mysql中的锁机制

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决... 查看详情

并发编程的锁机制:synchronized和lock(代码片段)

1.锁的种类  锁的种类挺多,包括:自旋锁、自旋锁的其他种类、阻塞锁、可重入锁、读写锁、互斥锁、悲观锁、乐观锁、公平锁、可重入锁等等,其余就不列出了。我们这边重点看如下几种:可重入锁、读写锁、可中断锁、... 查看详情

java高并发编程实战1,那些年学过的锁

一、进程与线程程序本身是静态的,是众多代码的组合产物,代码保存在文件中。如果程序要运行,则需要将程序加载到内存中,通过编译器将其编译成计算机能够理解的方式运行。如果想启动一个Java程序,先要创建一个JVM进... 查看详情

java并发之synchronized

synchronized关键字最主要有以下3种应用方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁;实例锁,一个实例一把锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁;... 查看详情

java高并发之同步异步

1、概念理解:2、同步的解决方案:1).基于代码synchronized关键字 修饰普通方法:作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 修饰静态方法:作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。&... 查看详情

一种比读写锁更快的锁,还不赶紧认识一下(代码片段)

摘要:一起来聊聊在高并发环境下比ReadWriteLock更快的锁——StampedLock。本文分享自华为云社区《【高并发】高并发场景下一种比读写锁更快的锁,看完我彻底折服了!!》,作者:冰河 。什么是StampedLock?R... 查看详情