AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 13190
Accepted
Andreas Ågren
Andreas Ågren
Asked: 2012-02-17 06:03:00 +0800 CST2012-02-17 06:03:00 +0800 CST 2012-02-17 06:03:00 +0800 CST

可序列化隔离级别对 DDL 语句有什么影响?

  • 772

我正在使用 Red Gate SQL Compare 根据 SVN 和数据库之间的差异创建发布脚本。这导致脚本包含一堆表和过程更改并且工作正常。然而,有一件事让我感到困惑,它使用事务隔离级别可序列化。

我知道它对 dml 语句有什么作用,但我不确定它对 ddl 意味着什么。有人可以启发我,也许举个例子吗?

sql-server sql-server-2008
  • 2 2 个回答
  • 1419 Views

2 个回答

  • Voted
  1. Paul White
    2017-08-11T01:01:27+08:002017-08-11T01:01:27+08:00

    我知道它对 dml 语句有什么作用,但我不确定它对 ddl 意味着什么。

    一般来说,不多。

    DDL 包含范围广泛的操作(其中许多具有自己的特殊行为),但大多数 DDL 将Sch-M在命令持续期间或关键阶段(例如在大多数在线索引构建的结束)。这是限制性最强的锁类型,可防止在任何隔离级别进行任何类型的并发访问。

    即使Sch-M没有被锁定,引擎也会在适当的时候小心地锁定正确的锁,以确保最终结果是正确的。例如,不可能建立一个不能准确反映底层数据的索引。

    无论用户指定的任何会话隔离级别如何,以上所有内容均适用。


    就元数据的更改(即像 之类的视图下的系统结构sys.tables)而言,虽然 SQL Server 会自动确保正确更改,但用户访问仅在默认锁定READ COMMITTED隔离级别得到完全支持和保证。

    引用元数据访问、隔离级别和锁定提示(强调):

    SQL Server 不保证在通过目录视图、兼容性视图、信息架构视图、发出元数据的内置函数访问元数据的查询中会遵循锁定提示。

    在内部,SQL Server 数据库引擎仅READ COMMITTED支持元数据访问的隔离级别。例如,如果事务具有隔离级别,SERIALIZABLE并且在事务内尝试通过使用目录视图或发出元数据的内置函数来访问元数据,这些查询将一直运行,直到它们作为READ COMMITTED. 但是,在快照隔离下,由于并发 DDL 操作,对元数据的访问可能会失败。这是因为元数据没有版本。因此,在快照隔离下访问以下内容可能会失败:

    • 目录视图
    • 兼容性视图
    • 信息模式视图
    • 发出元数据的内置函数
    • sp_help一组存储过程
    • SQL Server Native Client 目录程序
    • 动态管理视图和功能

    从同一页面:

    下表提供了各种隔离级别下的元数据访问摘要。

    元数据访问的隔离级别支持

    尽管没有得到保证或支持,但在隔离状态下访问元数据(例如目录视图、DMV)READ UNCOMMITTED以避免阻塞问题可能很重要。大多数工具和诊断脚本都大量使用READ UNCOMMITTED隔离(通常使用同义但名称误导的NOLOCK提示)。有关示例,请参阅Glenn Berry 的诊断查询。

    作为不READ UNCOMMITTED接受访问的示例,请参阅Aaron Bertrand 撰写的元数据函数应遵循与元数据查询相同的隔离语义和坏习惯:使用(某些)元数据“帮助程序”函数。

    以高于读取提交的隔离访问元数据甚至不被尊重——信息将以READ COMMITTED隔离语义读取。


    如果非要我猜的话,我会说问题中的比较工具将隔离设置SERIALIZABLE为覆盖生成的脚本中的任何 DML。

    • 5
  2. Best Answer
    JNK
    2012-02-17T06:06:55+08:002012-02-17T06:06:55+08:00

    我相信它对 DDL 的意义与对 DML 的意义相同。关于该主题的msdn 文章实际上在该部分下为您提供了一个非常清晰的概念SERIALIZABLE:

    此选项与在事务中的所有 SELECT 语句中的所有表上设置 HOLDLOCK 具有相同的效果。

    基本上只要你的事务在运行,就不能对你直接或间接引用的任何对象执行任何 DDL。

    • 4

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve