当前位置:首页 » 数据仓库 » sql数据库阻塞
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql数据库阻塞

发布时间: 2023-06-05 11:33:41

sql server 阻塞进程怎么解决

SQL Server 的内存管理机制是:
有可用内存, 则为新需求分配内存
无可用内存时, 释放内存来处理新需求.

这是SQL Server 缓冲池的预期行为。
默认情况下,在启动 SQL Server之后,SQL Server会根据操作系统报告的物理内存数来动态增大或缩小高速缓冲存储器的容量。
只要可用物理内存大小保持在4MB到10MB之间,SQL Server 缓冲池就会继续增大(保留可用物理内存在4MB到10MB之间是为了
避免操作系统因为缺少内存而频繁地换页)。如果物理可用内存变得较少的时候,则SQL Server会将一些内存释放给操作系统。

解决方案:
1.给操作系统、sql server打最新补丁
2.确保不是病毒原因(可能性比较小)
3.sql server设计时的要求就是最大可能的减少磁盘的I/O,磁盘I/O是比较消耗资源的,这个磁盘I/O包括了读取数据库文件
还有和虚拟内存的页交换。如果还有足够的可用内迟散胡存它都会毫不吝啬的使用的(没有设置上限),它会根据需要动态获取和
释放内存的。你要分析的是这占用的内存开销主要用做了什么?是不是有大型的查询或事务操作。
4.如果服务器是专职的数据库服务器,不建议设置最大内存上限。如果还有其它重要的服掘枯务在机器上运行,就要考虑它的内存
使用是否会影响其它服务的正常的运行和性能。码拦如果你的服务器除了sql服务, 还有其他服务需求, 则需要设置sql server的最大内存限制

⑵ 如何查看oracle 中某条sql阻塞了某个sql

死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
1)用dba用户执行以下语句

selectusername,lockwait,status,machine,programfromv$sessionwheresidin
(selectsession_idfromv$locked_object)

如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:
Username:死锁语句所用的数据库用户;
Lockwait:死锁的状态,如果有内容表示被死锁。
Status: 状态,active表示被死锁
Machine: 死锁语句所在的机器。
Program: 产生死锁的语句主要来自哪个应用程序。
2)用dba用户执行以下语句,可以查看到被死锁的语句。

selectsql_textfromv$sqlwherehash_valuein
(selectsql_hash_valuefromv$sessionwheresidin
(selectsession_idfromv$locked_object))

⑶ oracle sql阻塞怎么解决

使用v$locked_object视图查看阻塞会话的session id,然后通过v$session+v$sql视图查看一下正在执行什么操作。如果可以,使用alter session命令kill掉即可解决阻塞。

⑷ 数据库阻塞和死锁的区别

数据库阻塞的现象:第一个连接占有资源没有释放,而第二个连接需要获取这个资源。如果第一个连接没有提交或者回滚,
第二个连接会一直等待下去,直到第一个连接释放该资源为止。对于阻塞,数据库无法处理,所以对数据库操作要及时地提交或

者回滚。
数据库死锁的现象:第一个连接占有资源没有释放,准备获取第二个连接所占用的资源,而第二个连接占有资源没有释放,
准备获取第一个连接所占用的资源。这种互相占有对方需要获取的资源的现象叫做死锁。对于死锁,数据库处理方法:牺牲一个
连接,保证另外一个连接成功执行

⑸ 常见的SQL Server阻塞情形有哪些

这一类阻塞的特征,就是问题连接早就进入了空闲状态(sysprocesses.status='sleeping'和sysprocesses.cms='awaiting command'),但是,如果检查 sysprocesses.open_tran,就会发现它不为0,以及事务没有提交。这类问题很多都是因为应用端遇到了一个执行超时,或者其他原因,当时执行的语句倍提前终止了,但是连接还保留着。应用没有跟随发来的事务提交或回滚指令,导致一个事务被遗留在 Sql Server 里。

解决办法:

应用程序本身必须意识到任何语句都有可能遇到意外终止的情况,做好错误处理工作。这些工作包括:

· 在做 Sql Server 调用的时候,须加上错误捕捉和处理语句:If @@Trancount>0 RollBack Tran;(在程序中设置If @@Error<>0 Rollback Tran; 并不总是能执行到该语句)

⑹ 关于SQL Server 进程阻塞的问题

我估计你是不是要在第一个语句中,加上完成事务的语句啊。在UPDATE语句之后用Commint
TRAN。

⑺ 如何解决 SQL Server 中的锁升级所致的阻塞问题

防止锁升级的最简单和最安全方法是使短的事务,以便不超过锁升级阈值,会减少昂贵查询的锁定占地面积。有多种方法可以获得这一目标,其中许多将列出:
拆分成几个较小的操作大的批处理操作。例如,假设您运行下面的查询从审核表中,删除几个几十万旧记录并随后发现它导致阻塞其他用户的锁升级:
DELETE FROM LogMessages WHERE LogDate < '2/1/2002'

通过一次删除这些记录几百,可以极大地减少积累每个交易记录,并防止锁升级的锁数。例如:
SET ROWCOUNT 500
delete_more:
DELETE FROM LogMessages WHERE LogDate < '2/1/2002'
IF @@ROWCOUNT > 0 GOTO delete_more
SET ROWCOUNT 0

使查询尽可能高效,从而减少查询的锁的占地面积。大范围的搜索或大量的书签查找可能会增加锁升级 ; 的机会此外,它增加了死锁的可能性,并通常会影响并发性和性能。查找查询后,会导致锁升级,力图寻找销售机会,以创建新的索引,或者若要将列添加到现有索引删除索引和表扫描和索引的效率的最大化。请考虑将查询粘贴到查询分析器的查询窗口以在其上执行自动索引分析。为此,请在查询菜单上,单击在 SQL Server 2000 中,索引优化向导,或单击执行索引分析SQL Server 7.0 中。

这种优化的目标之一是使索引搜索返回尽可能少的行,以书签查找 (最大化的选择性的特定查询的索引) 的成本降到最低。如果 SQL Server 估计书签查找逻辑运算符可能会返回多个行,它可能使用的预取来书签查找。如果 SQL Server 不会使用书签查找预取,必须增加对该查询的一部分可重复的读取查询的一部分的事务隔离级别。这意味着什么可能看起来类似于在读取已提交的隔离级别的 SELECT 语句可能会获取数以千计的键锁 (聚集的索引和上一个非聚集的索引),这可能会导致此类查询超过锁升级阈值。这一点尤其重要,如果您发现已呈报的锁不共享的表锁,其中,但是,通常看不到在默认读取已提交的隔离级别。如果使用预取的书签查找子句导致升级,请考虑将其他列添加到索引查找或下方的书签查找逻辑运算符扫描索引的逻辑运算符出现在查询计划中的非聚集索引。可能会创建覆盖索引 (包括在查询中使用表中的所有列的索引),或至少一个覆盖已选择的列的列表中包括的所有内容如果使用联接条件或 WHERE 子句中的列的索引是不切实际的。

嵌套循环联接也可以使用预取,,这将导致相同的锁定行为。

如果不同的 SPID 当前持有的不兼容表锁,则不会发生锁升级。始终锁升级升级到表级锁,而从不页锁。此外,如果锁定升级尝试失败,因为另一个 SPID 持有的不兼容的选项卡锁,尝试升级该查询不会阻止在等待选项卡锁。相反,它将继续获取锁定在其原始、 更精细的级别 (行、 键或页),定期进行其他升级尝试。因此,防止在某个特定的表上的锁升级的一种方法是获取并与升级的锁类型不兼容的不同连接保持锁定。IX (意向排它) 锁在表级别不会锁定任何行或页,但它仍不兼容已呈报 s (共享的) 或 X (独占) 选项卡上的锁。例如,假设您必须运行的批处理作业修改大量mytable表中的行和已导致阻塞的出现是由于锁升级。如果此作业始终在不到一小时内完成,可能会创建包含以下代码中,事务处理性 SQL 作业和计划新作业启动批处理作业的开始时间前几分钟的时间:
BEGIN TRAN
SELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0
WAITFOR DELAY '1:00:00'
COMMIT TRAN

此查询获取,并一小时,这可以防止在表上的锁升级这段时间内保持在mytable的 IX 锁。这批不会修改任何数据或阻止其他查询 (除非其他查询强制使用 TABLOCK 提示的表锁,或如果管理员已经禁用页或行锁,通过使用sp_indexoption存储过程)。
此外,您可以通过启用跟踪标志 1211年禁用锁升级。但是,此跟踪标记会禁用所有的锁升级的 SQL Server 实例中的全局范围内。锁升级最大化 ; 否则减速的获取和释放锁的数千开销的查询的效率在 SQL Server 中提供非常有用的目的。锁升级还有助于最小化所需的内存,以跟踪的锁。可以将 SQL Server 锁结构中动态分配的内存是有限的的因此如果您禁用锁升级和锁定内存增长足够大、 分配额外的锁包含任何查询可能会失败并出现下面的错误:

错误: 1204,严重性: 19 日状态: 1
这一次,SQL Server 无法获得锁资源。有较少的活动用户时重新运行该语句,或者请求系统管理员检查 SQL Server 锁和内存配置。
注意"1204"错误时,它会停止当前语句的处理,并导致回滚当前事务。回滚本身可能会阻止用户或导致很长的数据库恢复时间,如果您在重新启动 SQL Server 服务。

使用锁定提示 (如 ROWLOCK 只会更改初始锁定计划。锁提示不能防止锁升级。

防止锁升级的前面部分讨论的其他方法是更好的方法比启用跟踪标记。此外,其他方法通常会导致查询性能优于禁用整个实例的锁升级。Microsoft 建议您启用此跟踪标记只是为了缓解严重阻塞引起锁升级,而其他选项,如那些讨论先前在本文中,所调查的。要启用跟踪标志,以便它打开时 SQL Server 启动时,将其添加为服务器启动参数。

添加服务器启动参数,用鼠标右键单击该服务器在 SQL 企业管理器中,单击属性然后单击在常规选项卡上的启动参数,然后添加下面的参数 (严格按照所示):
-T1211
您必须重新打开 SQL Server 服务为新的启动参数才会生效。如果您在查询分析器中运行下面的查询跟踪标记将立即生效:DBCC TRACEON (1211, -1)
但是,如果您没有添加-T1211启动参数traceon命令的效果时会丢失关闭并重新打开 SQL Server 服务。打开跟踪标志可防止任何将来的锁升级,但它不会反转任何已经发生的活动事务的锁升级。

⑻ sql同时查询一个库会拥堵吗

会。sql单个表扰绝弊数据量过大会导致增删改查都会变慢,所以sql同时查询一个库是会拥堵的,宏散可以岔开时间查询。SQL是结构化查询语缓族言,是一种计算机标准语言,用于和数据库管理系统打交道。