`
happmaoo
  • 浏览: 4465788 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

UPDATE 时, 如何避免数据定位处理被阻塞

阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

问题描述:

数据库PUBS中的authors表,想锁定CITYaaa的记录,为什么执行下面的命令后,CITYbbb的记录也被锁定了,无法进行UPDATE.

BEGIN TRANSACTION

SELECT * FROM authors

WITH (HOLDLOCK)

WHERE city='aaa'

如何才能锁定CITYAAA的记录,而且CITYBBB的记录依然能SELECTUPDATE

问题分析:

应该不是被锁住,应该只是检索数据的时候,需要从aaa的记录扫描到bbb的记录,而aaa被锁住了,所以扫描无法往下进行,这样看起来似乎就是bbb也被锁住了。

当然,也有可能确实是被锁住了,SQL Server的锁定默认是行级的,如果你的资源不足,则可能导致锁自动升级为页级甚至表级锁,这样会导致更多的记录被锁定。

使用下面的语句, 如果能读出数据, 则多半是第1种情况.

SELECT *

FROM authors WITH (READPAST)

WHERE city='bbb'

如果读不出数据, 则一般是第2种情况.

问题解决方法:

SELECT UPDATE 走不同的索引,这样在UPDATE 的时候,不用扫描已经锁定的数据就可以定义到记录,UPDATE 也就不会被阻塞了

指定索引用类似下面的语句:

SELECT *

FROM authors WITH (HOLDLOCK, INDEX=索引名)

WHERE city='aaa'

UPDATE A SET

xx = xx

FROM authors A WITH (INDEX=索引名)

WHERE city='bbb'

当然,要保证仅扫描索引就可以定义到记录,否则可能还是会被阻塞。

补充

对于熟悉SQL Server锁的读者,可以通过 sp_lock,或者查询系统表 master.dbo.syslocksmaster.dbo.syslockinfo来确定行为。




分享到:
评论

相关推荐

    MapGIS k9 数据管理代码

    在处理大量数据时,异步操作是非常重要的,它可以避免程序因为等待IO操作完成而阻塞。MapGIS K9的API支持异步操作,允许开发者在后台处理数据,提高用户体验。 8. 性能优化: 当进行数据管理时,理解如何优化数据...

    PostgreSQL数据库典型故障案例及处理技巧.docx

    5. 通过对表进行批量 update 时,避免同时进行 autovacuum_analyze 操作。 二、PostgreSQL 数据库性能优化 PostgreSQL 数据库的性能优化是非常重要的,特别是在高并发情况下。下面是一些常见的性能优化方法: 1. ...

    基于Android ContentProvider的总结详解

    使用`CursorLoader`或`AsyncTask`可以帮助异步加载数据,避免阻塞UI线程。 6. **自定义ContentProvider**:自定义ContentProvider时,可以根据实际需求调整数据模型和操作逻辑,比如创建自定义数据库表,或者实现更...

    SoftVersionDataUpdate:SoftVersionDataUpdate - the data update after software version update (软件版本更新后的数据更新)

    通过理解和掌握这些知识点,开发者能够在更新iOS软件版本时,有效地处理数据更新,确保用户数据的安全和软件的顺畅运行。在实际操作中,通常会有一个名为"SoftVersionDataUpdate-master"的项目或代码库,包含实现...

    oracle常见的锁查询和处理

    这些视图可以帮助识别导致锁冲突的会话信息,查看引起冲突的SQL语句,以及定位被锁定的数据对象。例如,通过`v$session`视图,可以找出持有特定表锁的会话,通过`v$lock`可以查看当前的锁状态。 处理锁冲突: 解决...

    Python库 | pymongo-3.7.0-py3.4-macosx-10.6-intel.egg

    在数据处理方面,pymongo提供了一种流式API,允许在获取大量数据时避免一次性加载到内存中,从而避免内存溢出的问题。此外,它还支持索引管理,使得查询性能得以优化,开发者可以通过`create_index()`方法创建索引,...

    ocenbase 设计文档

    - **RS信息缓存与管理**:MergeServer存储tablet分布信息和schema信息,用于数据定位和JOIN操作,确保数据处理的效率和准确性。 - **属性过滤**:MergeServer还负责根据预设的过滤条件筛选查询结果,只返回符合...

    content_provider_demo

    它在后台线程中执行查询操作,避免阻塞主线程,提升用户体验。在`content_provider_demo`中,使用CursorLoader可以确保数据加载不会影响UI的流畅性。 - `LoaderManager`和`LoaderCallbacks`用于管理和控制Loader的...

    保存当前经纬度到数据库

    在移动应用中,这些操作通常在异步线程中执行,以避免阻塞用户界面。 综上所述,实现“保存当前经纬度到数据库”这一功能需要掌握地理位置API的使用、数据建模、数据库设计和管理、以及用户界面与后端交互的技巧。...

    ContentProvider的快速上手策略

    2. **数据安全**:当暴露数据给其他应用时,务必确保数据安全,避免敏感信息泄露。 3. **性能优化**:合理使用UriMatcher和CursorLoader,提高数据读取效率,避免内存泄漏。 4. **错误处理**:处理异常情况,如...

    android数据库SQLite3详细讲解

    - **更新数据**:`UPDATE`语句用于修改已存在的数据,通常配合`WHERE`子句定位要修改的行。 - **删除数据**:`DELETE FROM`语句用于删除表中的数据,同样可以使用`WHERE`子句指定删除条件。 4. **事务处理**: ...

    android中Content Provider

    7. **CursorLoader与LoaderManager**:在大型数据操作时,推荐使用`CursorLoader`,它在后台线程加载数据,避免阻塞UI。配合`LoaderManager`,可以在数据改变时自动重新加载,提升用户体验。 8. **异步数据访问**:...

    安卓通讯录

    合理使用线程避免阻塞UI,批量操作而非单个处理以提高效率,都是需要考虑的因素。 通过以上技术实现的“安卓通讯录”应用,不仅能满足用户基本的联系人管理需求,还能提供安全的数据备份和恢复功能,使得用户在更换...

    毕业设计-基于Visual Basic的商品配送库存管理系统设计与代码实现

    6. **多线程编程**:如果系统需要执行耗时操作(如大量数据导入导出),可以使用Thread类创建后台线程,避免阻塞主线程,提高用户体验。 7. **文件操作**:在库存管理系统中,可能需要读写CSV或Excel文件来导入导出...

    SQLLite Server操作实现Demo源码SQLiteDemo.rar

    8. **错误处理和日志记录**:良好的错误处理机制和日志记录可以帮助开发者在遇到问题时快速定位和解决问题。 9. **数据备份与恢复**:了解如何备份数据库到外部存储,以及如何在需要时恢复这些备份,是应用程序健壮...

    apiObject:简化GET,POST,UPDATE,DELETE和OTHERS的JS方法

    考虑到JavaScript的非阻塞特性,apiObject可能采用Promise或者async/await语法来处理异步请求。这使得代码更易于理解和维护,同时提供了链式调用的可能性。 **配置和自定义** apiObject可能还允许用户配置请求的...

    android-contact.zip_android contact _android contact_android-co

    使用AsyncTask或者其他的异步框架,可以在后台处理数据,避免阻塞主线程。 9. **UI设计**:在MyAddressBook2.3可能包含一个简单的联系人管理界面示例,展示了如何将查询到的联系人数据显示在ListView或RecyclerView...

    MySQL中UPDATE语句使用的实例教程

    MySQL中的UPDATE语句是用于修改现有数据记录的关键命令,它允许你更新数据库表中的特定字段。在本实例教程中,我们将深入理解UPDATE...在处理大量数据时,务必谨慎操作,遵循最佳实践,以确保系统的稳定性和高效性。

    greendaodemo

    GreenDao支持事务处理,可以在一组操作中保证数据的一致性。可以使用`DaoSession.beginTransaction()`开始一个事务,`setSuccessful()`提交事务,`endTransaction()`结束事务,如果在事务中发生异常,可以通过`...

    mysql-4.pdf

    当没有使用索引或者查询条件无法精确定位到单行数据时,InnoDB可能会退化为表锁,导致并发性能下降。因此,良好的索引设计对于优化并发性能至关重要。 综上所述,理解MySQL中的行锁机制、InnoDB内存结构、RedoLog与...

Global site tag (gtag.js) - Google Analytics