none
数据页锁定问题(Lanch) RRS feed

答案

  • 假如你Dump某个page的话,你可以看到里面有一个放置objectid的区域,而且只有objectid,从而可以从物理上证明一个page只属于一个表。
    • 已标记为答案 杨国防 2012年11月9日 4:35
    2012年11月9日 4:00

全部回复

  • 你的语句是什么样的?两表连接?查询单表B的话肯定没有影响的,但是如果表连接的话肯定B表会有锁。

    2012年11月8日 7:14
  • A表有锁,跟B表查询没有关联,两个是独立的

    如果你在查询B表的时候,因为JOIN之类的原因,会访问A表被锁定的页

    2012年11月8日 7:20
  • 皱大哥:http://blogs.msdn.com/b/apgcdsd/archive/2012/08/13/buffer-latch-timeout.aspx

    这个上面说的

    EX – Exclusive Latch 独占模式,主要用于写数据页的时候需要,

    如果A表由于插入数据结果占用了一个数据页ROWPAGE1,但是如果此时对B表进行select,有可能会访问到数据页ROWPAGE1上B表的数据,此时就应该不能访问了吧!是这样理解的吗?

    2012年11月8日 7:32
  • 一个页只有一个表的数据.

    想不想时已是想,不如不想都不想。

    2012年11月8日 7:43
    版主
  • 页是sql server 存储的基本单位,所以不会存在一个页分配给多个对象的情况
    2012年11月8日 8:00
  • Maybe confused with extent which can be shared.
    2012年11月8日 13:57
  • 如果说由于A表加了页锁的话,我查询此页上B表的数据就不能访问了吗?

    你好,
    页级锁是指在事务的操纵过程中,无论事务处理数据的多少,每一次都锁定一页,在这个页上的数据不能被其他事务操纵。在页级锁中,即使是一个事务只操纵页上的一行数据,那么该页上的其他数据行也不能被其他事务使用。

    所以如果B表和A表在同一页的话,应该是不能访问的。

    Thanks,
    Amy Peng


    Description: Description: TechNet 论坛好帮手立刻免费下载TechNet论坛好帮手

    2012年11月9日 1:59
    版主
  • Single page can't be shared by multiple tables.
    2012年11月9日 2:15
  • 假如你Dump某个page的话,你可以看到里面有一个放置objectid的区域,而且只有objectid,从而可以从物理上证明一个page只属于一个表。
    • 已标记为答案 杨国防 2012年11月9日 4:35
    2012年11月9日 4:00
  • LZ我之前写过一篇“SQLSERVER页面错误的解决方案记录”

    你可以看到sqlserver里面的页的面纱,究竟页面是怎样构成的

    一般一个页面会存储索引或者数据,而不管是索引或者数据他存储的都是同一张表的数据或者同一张表的索引

    文章地址:http://www.cnblogs.com/lyhabc/archive/2012/10/22/2733509.html

    下面是我的文章的大概内容,有兴趣的话LZ可以看一下,可以让LZ了解多点sqlserver页面的东西

    下面说一下解决步骤:
     
    步骤一:找出页所属objectid 和页面信息
     
    使用”DBCC PAGE(dbid,fileid,pageid,formatid) --formatid一般为3“  (formatid的可选值为1,2,3 一般3是比较友好的其余两种显示格式比较深奥)
     
    语句来找出错的那个页面的信息
     
    1 EXEC sys.sp_helpdb @dbname = pratice   --找出数据库ID
    2 
    3 USE pratice 
    4 
    5 EXEC sys.sp_helpfile  --找出数据文件ID 
     
     
    然后就可以运行下面语句了:
     
    下面这两句要一起运行
     
    1 DBCC TRACEON(3604,-1)
    2 
    3  DBCC PAGE(13,1,10,3)   --指定错误页面号10 
     
     
     再说明一下indexid的值
     
    IndexId=0 堆 数据页
    IndexId=1 聚集索引  索引页
    IndexId>1 非聚集索引  索引页
     
    由于时间关系我直接输出了,里面有解析
    
    根据objectid运行下面语句看看页面属于哪个对象
     
    1 SELECT 
    2 s.name AS N'架构名',
    3 o.name AS N'表名'
    4 FROM sys.sysobjects o INNER JOIN sys.schemas s ON o.uid=s.schema_id
    5 WHERE o.id=44


    给我写信: QQ我:点击这里给我发消息


    2012年11月10日 6:26