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 / 问题 / 241745
Accepted
Michael Green
Michael Green
Asked: 2019-07-01 21:12:27 +0800 CST2019-07-01 21:12:27 +0800 CST 2019-07-01 21:12:27 +0800 CST

OPTIMIZE_FOR_SEQUENTIAL_KEY 的实施和禁忌症

  • 772

SQL Server 2019 CTP3.1引入了一项优化来解决最后一页插入争用。这采用名为的索引选项OPTIMIZE_FOR_SEQUENTIAL_KEY的形式。

人们认为这可能是Bw-Tree或Bz-Tree的一种改编。然而,这些依赖于可变大小的页面,而当前的存储引擎需要固定大小的页面。

优化是如何实现的?此优化如何改变当前的 B 树算法?在什么情况下我会选择不部署这个选项?

研究

反向键方法的专利。

我使用 DBCC PAGE 快速浏览了一下,比较了 2017 年与 2019 年以及 2019 年在 int IDENTITY 列的唯一聚集索引上使用和不使用 OPTIMIZE_FOR_SEQUENTIAL_KEY 的情况。没有什么可以明显解释新行为。这让我觉得它是一个算法的东西,而不是一个结构的东西,这是有道理的。

来自 MS的博客文章。

此功能似乎以检测和避免车队为中心。

sql-server optimization
  • 1 1 个回答
  • 727 Views

1 个回答

  • Voted
  1. Best Answer
    stacylaray
    2020-04-25T21:37:32+08:002020-04-25T21:37:32+08:00

    优化是通过对试图插入的工作人员应用流量控制来减少严重的争用和护送来实现的。这个想法是基于每个调度程序的不公平插入互斥量,它可以帮助避免闩等待名单的建立和结果的护送。当用户使用选项 OPTIMIZE_FOR_SEQUENTIAL_KEY 选择加入每个索引时,然后我们对插入工作程序进行流量/流量控制。本质上,每个调度器使用不公平互斥锁(在优化开启的 HoBt 级别),流量控制将只允许每个调度器的一个 worker 进入竞争页面锁存器的插入代码路径,这样我们就可以减少车队并提高并发插入的可伸缩性。Pam Lahoud 在她的博客文章中提供了所有这些细节我在功能规范或设计文档中找不到任何指示对当前 B-Tree 算法进行更改的内容。考虑的其他解决方案(其中一个是利用您在问题中引用的反向键索引的优化形式)具有潜在的缺点,并且大多数都涉及对引擎的根本更改。将来可能会考虑这些其他解决方案,但该解决方案在没有从根本上改变引擎的情况下提供了显着的改进。

    您不希望将其部署在您不希望或遇到最后一页插入争用的地方。

    • 7

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

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

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

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

热门标签

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