English 中文(简体)
阅读
原标题:Read committed Snapshot VS Snapshot Isolation Level

能否帮助我了解何时使用SNAPSHOT与READ COMMITTEDSPSHOTQ服务器的隔离水平?

我的理解是,在大多数情况下,READ COMMITTEDSPSHOT是行之有效的,但不能肯定何时可以脱离SNAPSHOT。

增 编

最佳回答

<代码>READ COMMITTED SNAPSHOT对文字和悲观写字表示乐观。 相比之下,<代码>SNAPSHOT对文字表示乐观和乐观。

微软建议READ COMMITTEDSPSHOT,供多数需要浏览的用户使用。

阅读这一优异之处 微软条款: Choosing Row editioning-based Isolation Levels。 它解释了隔离水平的好处和代价。

And here s a more thorough one: http://msdn.microsoft.com/en-us/library/ms345124(SQL.90).aspx

问题回答

“entergraph [! [[Isolation levels table] ] ] ]

见以下例子:

<>Read committedd Snapshot

更改数据库财产如下:

ALTER DATABASE SQLAuthority
SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE
GO

<><>>>>

USE SQLAuthority
GO
BEGIN TRAN
UPDATE DemoTable
SET i = 4
WHERE i = 1

<>2>>

USE SQLAuthority
GO
BEGIN TRAN
SELECT *
FROM   DemoTable
WHERE i = 1

结果——第2届会议的成绩显示,由于目前的交易是NOT的。 这是避免阻挡和阅读承诺数据的方法。

<><>>>>

COMMIT

<>2>>

USE SQLAuthority
GO
SELECT *
FROM   DemoTable
WHERE i = 1

结果——第2届会议的成绩显示没有增长,因为届会更新了行文。 1. 导言 我们再次看到有决心的数据。

<>Snapshot Isolong>

这是新的隔离水平,从2005年的服务器开始。 对于这一特点,需要改变申请,因为它必须使用新的孤立程度。

变化数据库设置如下。 我们需要确保数据库中没有交易。

ALTER DATABASE SQLAuthority SET AllOW_SNAPSHOT_ISOLATION ON

现在,我们也需要改变孤立的联系水平,采用以下方式:

<><>>>>

USE SQLAuthority
GO
BEGIN TRAN
UPDATE DemoTable
SET i = 10
WHERE i = 2

<>2>>

SET TRANSACTION ISOLATION LEVEL SNAPSHOT
GO
USE SQLAuthority
GO
BEGIN TRAN
SELECT *
FROM   DemoTable
WHERE i = 2

结果——即使我们把价值改变为10,我们仍将看到第2届会议的旧记录(TWO)。

现在,请在第一届会议上进行交易

<><>>>>

COMMIT

让我们回到第二场会议,再次选择。

<>2>>

SELECT *
FROM   DemoTable
WHERE i = 2

我们仍然将看到这一记录,因为第2届会议以轻率的孤立方式表明了交易。 除非我们完成交易,否则我们就不会看到最新记录。

<>2>>

COMMIT
SELECT *
FROM   DemoTable
WHERE i = 2

现在,我们不应认为这一行文已经更新。

见:SQL Authority,

对Snapshot和Snapshot的重新读写没有讨论Snapshot可能发生、但Snapshot未重新承付的已准备好的“快速更新冲突”例外,就不完整。

缩略语中,Snapshot的隔离检索了交易开始之日承诺的数据,然后对文字和文字都使用乐观的锁定。 如果在试图进行交易时发现有些其他数据有改动,则该数据库将撤销整个交易,并产生错误,导致在呼吁书中更新冲突例外。 这是因为在交易结束时,受交易影响的数据与交易开始时不同。

缩略语 承付额没有受到这一问题的影响,因为它使用了记号(悲观书写)的锁,并在每个说明上获得所有承付数据的信息。

在Snapshot和NOT Snapshot读写中发生的最新冲突的可能性,是两者之间的极端重大差别。

仍然具有相关性,从法案评论开始 我读了更多的话,并做了一些可能对其他人有用的说明。

通过缺席的单一声明(包括SlectT)关于“排放”数据的工作(READ COMMITTED),问题是:他们是否等到数据是“错误的”,在阅读时停止他人工作?

www.un.org/Depts/DGACM/index_spanish.htm 1. 通过右边点击加以确定 DB “Properties -> Options ->Misc”:

www.un.org/Depts/DGACM/index_spanish.htm 应急/锁定: On [违约应当]:

  • Use SNAPSHOT for select (read), do not wait for others, nor block them.
  • Effects operation without code change
  • ALTER DATABASE <dbName> SET READ_COMMITTED_SNAPSHOT [ON|OFF]
  • SELECT name, is_read_committed_snapshot_on FROM sys.databases

www.un.org/Depts/DGACM/index_spanish.htm 一致性:允许Snapshot Isolation [违约,可拆解——离去]:

  • Allow client to request SNAPSHOT across SQL statements (transactions).
  • Code must request "transaction" snapshots (like SET TRANSACTION ...)
  • ALTER DATABASE <dbName> SET ALLOW_SNAPSHOT_ISOLATION [ON|OFF]
  • SELECT name, snapshot_isolation_state FROM sys.databases

问题:它不是一个,另一个是“Repired Snapshot”和“Snapshot Isolation”。 它们是两个Snapshot病例,要么可以独立处理,要么可以独立处理,让Snapshot Isolation 略多于一个先进专题。 允许Snapshot Isolation允许法典进一步控制Snapshot土地。

如果你想一行的话,问题似乎很清楚:系统没有复制件,那么读者必须等到任何其他人都写了字,作者还必须等到其他人阅读的时候——这段话必须锁定全部时间。 促成“照读Snapshot On”使亚洲开发银行能够支持“快速拷贝”,以避免这些锁。

www.un.org/Depts/DGACM/index_spanish.htm Rambling on...

我认为,“重新使用的Snapshot On”应该是任何正常的MSServer数据库的电离率,过早地优化了FALSE。

然而,Im公司对一个连续锁持更坏的说法,不仅因为你可以处理多个桌子的问题,而且因为在服务器浏览锁上使用“锁定”级锁(锁定与储存近相联的随机行),而且存在一个门槛,即多锁点触发板锁锁锁——大概是更多的“乐观”性能优化,有可能阻挡公共数据库的问题。

让我描述两个未提及的观点。

首先,要说明如何使用这两种方法,因为两者都不是疏忽。

SNAPSHOT和READ_COMMITTED_SNAPSHOT是两个不同的孤立程度。

国民核算体系

begin transaction
set transaction isolation level snapshot;
-- ...
commit

READ_COMMITTED_SNAPSHOT 不能像这样使用。 READ_COMMITTED_SNAPSHOT既是数据库一级的选择,又是暗含/自动的孤立程度。 为了使用该数据库,你需要使该数据库能够用于整个数据库:

alert database ... set read_committed_snapshot on;

以上数据库的设置是,每当你进行交易时:

begin transaction
set transaction isolation level read committed;
-- ...
commit

有了这一选择,反恐执行局的所有交易都将在READ_COMMITTED_SNAPSHOT的隔离水平而不是下进行。 这一情况自动发生,影响到根据数据库向总统办公室发放的所有READ-COMMITTED交易。 不可能根据READ进行交易。 COMMIT 反恐执行局的孤立程度,因为与这一水平的所有交易都将自动转化为READ。 COMMITTED_SNAPSHOT.

第二,你盲目使用READ-COMMITTED_SNAPSHOT方案。

为了说明它能够产生什么样的问题,想象你们会像这样的简单事件:

create table Events (
  id int not null identity(1, 1) primary key,
  name nvarchar(450) not null
  -- ...
)

并且,你定期对它进行问询。

begin transaction
set transaction isolation level read committed; -- automatically set to read committed snapshot when this setting is ON on database level 
select top 100 * from Events where id > ${lastId} order by id asc; 
commit

更不用说要把交易和明显的孤立程度附在外。 READ-COMMITTED是违约的孤立程度,如果你在交易集团中不提问题,就会在ReAD_COMMITTED交易中暗含这一损失。

阁下发现,根据READ_COMMITTED_SNAPSHOT级的自我强化特性值,可能会出现空白。

您可以很容易地用以下文字加以模拟:

begin transaction
insert into Events (name) values ( test 1 );
waitfor delay  00:00:10 
commit

......以正常的措辞:

insert into Events (name) values ( test 2 );

你在10人中行使的投票职能,将返回单行,宽2。

上一次更新之后的民意调查 我不会再回头。 有1位代表将在10位之后到场。

第1号援助会有效运行。

如果你使用READ_,就不会发生这种情况。 COMMITTED Without READ_COMMITTED_SNAPSHOT 汽车晋升方案。

它值得理解。 它与以下事实无关:IDENTITY一栏没有保证独一无二。 它与以下事实没有关系:IDENTITY一栏没有保证严格单一州。 即便没有侵犯独一无二和严格单一州,你仍然有差距——在看到用低女做事之前,有可能看到高女做事。

在READ-COMMITTED下,这一问题确实存在。

Under READ -COMMITTED 你们也可以看到差距——例如。 转回的交易。 但是,这些差距将是永久的——即。 你们不会因为永远不会重新出现而ski。 比如,在你看到较高的女婴之后,你就看到了较低的女婴。

请理解上述问题及其影响,然后再将READ-COMMITTED_SNAPSHOT转而来。

对这一选择的管制在于开发商和db行政责任的灰色区域。 如果你重新管理,你不应盲目地把它当作开发商,在开发应用和扭转READ_COMMITTED_SNAPSHOT可能违反这些假设时,可能依赖READ_COMMITTED semantics,很难找到 b。





相关问题
Export tables from SQL Server to be imported to Oracle 10g

I m trying to export some tables from SQL Server 2005 and then create those tables and populate them in Oracle. I have about 10 tables, varying from 4 columns up to 25. I m not using any constraints/...

SQL server: Can NT accounts be mapped to SQL server accounts

In our database we have an SQL server account that has the correct roles to access some of the databases. We are now switching to windows authentication and I was wondering if we can create a NT user ...

SQL Server 2000, ADO 2.8, VB6

How to determine if a Transaction is active i.e. before issuing Begin Transaction I want to ensure that no previous transaction are open.. the platform is VB6, MS-SQL Server 2000 and ADO 2.8

热门标签