• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SQL2008中SQL应用之-阻塞(Blocking)应用分析

SQL2008中SQL应用之-阻塞(Blocking)应用分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sql2008,sql2008安装图解,sql2008密钥,sql2008数据库下载,sql2008 64位下载等相关知识,希望本文的分享对您有所帮助
通常短时间的阻塞没有问题,且是较忙的应用程序所需要的。然而,设计糟糕的应用程序会导致长时间的阻塞,这就不必要地锁定了资源,而且阻塞了其他会话读取和更新它们。

在SQL Server中,一个阻塞的进程会无限期地保持阻塞,或者直到它超时(根据set lock_timeout)、服务器关闭、进程被杀死、连接完成了更新或者其他发生在原始事务上的操作导致它释放了资源上的锁。

发生长时间阻塞的原因如下:

1、在一个没有索引的表上的过量的行锁会导致SQL Server得到一个锁,从而阻塞其他事务。

2、应用程序打开一个事务,并在事务保持打开的时候要求用户进行反馈或交互。这通常是让最终用户在GUI上输入数据而保持事务打开的时候发生。此时,事务引用的任何资源都会被占据。

3、事务BEGIN后查询的数据可能在事务事务开始前被调用

4、查询不恰当地使用锁定提示。例如,应用程序仅使用很少的行,但却使用一个表锁提示

5、应用程序使用长时间运行的事务,在一个事务中更新了很多行或很多表(把一个大量更新的事务变成多个更新较少的事务有助于改善并发性)

一、找到并解决阻塞进程

下面我们演示使用SQL Server动态管理视图sys.dm_os_waiting_tasks找出阻塞进程,该视图用于代替早期SQL Server版本中的系统存储过程sp_who

找出阻塞的进程后,我们使用sys.dm_exec_sql_text动态管理函数和sys.dm_exec_Connections(DMV)找出正在执行的查询的SQL文本,然后强制结束进程。

强制结束进程,我们使用kill命令。kill的用法,请参看MSDN:http://msdn.microsoft.com/zh-cn/library/ms173730.aspx

该命令有三个参数:

■session ID    要终止的进程的会话 ID。session ID 是在建立连接时为每个用户连接分配的唯一整数 (int)。在连接期间,会话 ID 值与该连接捆绑在一起。连接结束时,则释放该整数值,并且可以将它重新分配给新的连接。使用 KILL session ID 可终止与指定的会话 ID 关联的常规非分布式事务和分布式事务。
■UOW    标识分布式事务的工作单元 (UOW) ID。UOW 是可从 sys.dm_tran_locks 动态管理视图的 request_owner_guid 列中获取的 GUID。也可从错误日志中或通过 MS DTC 监视器获取 UOW。有关监视分布式事务的详细信息,请参阅 MS DTC 文档。使用 KILL UOW 可终止孤立的分布式事务。这些事务不与任何真实的会话 ID 相关联,与虚拟的会话 ID = '-2' 相关联。可使标识孤立事务变得更为简单,其方法是查询 sys.dm_tran_locks、sys.dm_exec_sessions 或 sys.dm_exec_requests 动态管理视图中的会话 ID 列。
■WITH STATUSONLY    生成由于更早的 KILL 语句而正在回滚的指定 session ID 或 UOW 的进度报告。KILL WITH STATUSONLY 不终止或回滚 session ID 或 UOW,该命令只显示当前的回滚进度。

在第一个查询窗口:

提示:第三个语句中,使用sys.dm_exec_connections(DMV)返回了Session ID为53的most_recent_sql_handle列。这是SQL文本在内存中的指针。作为sys.dm_exec_sql_text动态管理函数的输入参数使用。从sys.dm_exec_sql_text返回了text列,该列显示了阻塞进程的SQL文本。如果阻塞成串,必须通过blocking_session_id和session_ID列仔细查看每一个阻塞进程,直到发现原始的阻塞进程。


二、配置语句等待锁释放的时长

如果有一个事务或语句被阻塞,意味着它在等待资源上的锁被释放。我们可以事先通过set lock_Timeout来设定需要等待的时间。

语法如下:SET LOCK_TIMEOUT time_period

参数以毫秒为单位。超过时会返回锁定错误。示例:

在第一个窗口中执行:
</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 迁移sql2005到sql2008r2步骤
  • 基于SQL2005 SQL2008 表结构信息查询升级版的详解(含外键信息)
  • 同时安装vs2005团队开发版和sql 2005企业版的方法(downmoon原作)
  • sql2008 附加数据库时出现错误5123提示的解决方法
  • MSSQL 2005 安全设置图文教程
  • SQL2008中SQL应用之-阻塞(Blocking)应用分析
  • SQL2008中SQL应用之-锁定(locking) 应用分析
  • SQL2008中通过DBCC OPENTRAN和会话查询事务
  • 关于MSSQL 2005的安装与补丁
  • MSSQL 字符段分段更新

相关文章

  • 2017-05-11SQL Server 2005 模板参数使用说明
  • 2017-05-11如何利用SQL进行推理
  • 2017-05-11SQL Server 2000向SQL Server 2008 R2推送数据图文教程
  • 2017-05-11SQL Server 2008+ Reporting Services (SSRS)使用USER登录问题
  • 2017-05-11SQL Server 2005与sql 2000之间的数据转换方法
  • 2017-05-11Sql Server 2005 默认端口修改方法
  • 2017-05-11一步一步教你创建SQL 2005计划任务应用图解教程
  • 2017-05-11SQL Server 2008 数据库中创建只读用户的方法
  • 2017-05-11SQL查询日志 查看数据库历史查询记录的方法
  • 2017-05-11sql里将重复行数据合并为一行数据使用逗号进行分隔

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • PowerDesigner中如何导入SQL Server数据库
    • SqlServer 2005的排名函数使用小结
    • SQL Server 2008R2编写脚本时智能提示功能丢失的处理方法
    • SQL2005的维护计划无法删除的解决方法
    • SQL server 2008 更改登录验证方式的方法
    • Sql实现行列转换方便了我们存储数据和呈现数据
    • sqlserver2008安装报语言不符的解决方法
    • Sql2005注射辅助脚本[粗糙版]
    • SQLServer 查询当前服务器有多少连接请求的语句
    • SQL Server 移动系统数据库

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有