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 / 问题 / 192268
Accepted
Rainbolt
Rainbolt
Asked: 2017-12-03 21:16:29 +0800 CST2017-12-03 21:16:29 +0800 CST 2017-12-03 21:16:29 +0800 CST

是否可以禁用特定表的锁?

  • 772

是否可以在任何版本的 SQL Server 中禁用特定表的所有锁?

我有一些表在部署时填充了数据。例如,其中一个较小的表[items].[Colour]包含'Blue', 'Green', 'Red', 'White'。部署后,应用程序只会从这些表中进行选择(从不插入、更新或删除)。我开始思考,如果这些表只能从中读取,那么锁有什么意义呢?我认为获得锁定需要一些时间。即使那段时间被证明是微不足道的,在我自己测试差异之前,我的一部分也不会满意。

当我自己搜索答案时,我发现我可以将整个数据库标记为只读,并且可能会有一些好处。我想要这些好处,但要逐桌进行。我还阅读了有关禁用锁升级的信息,但如果我正确理解文档,那只会导致更多(尽管粒度更细)锁,这与我想要实现的相反。

我知道我可以更新每个使用该表的查询以获得NOLOCK提示,但这会引入一个次要问题。将来当我教我的应用程序如何Colour在运行时学习新的 s 时,我是否要更新每个使用该表的查询以删除NOLOCK提示?这听起来很麻烦。


这个问题似乎收到了一些反对票,并且没有提供任何解释,我将假设这是因为这似乎是我要求的过早优化。正如一条现已删除的评论所指出的,过早的优化是万恶之源。我知道,我并没有过早地优化。这就是为什么。

我可以每秒轮询一次此 API 。它没有在链接页面上说明,但我在某处看到了规则(相信我)。无论如何,我的应用程序需要 100 毫秒到 800 毫秒才能发出 HTTP 请求、下载 gzip 压缩的文本文件并解压缩它。大部分时间都花在等待 API 响应上。这让我几乎没有时间将所有数据处理成漂亮、整洁、规范化的数据库表。如果我要有竞争力,我必须在 200 毫秒或更短的时间内处理所有数据。我非常接近实现我的目标,以至于我通过丢弃我可能不需要的数据来偷工减料,将所有数据一次性发送到一个大的丑陋的数据包中,等等。所以是的,我正在优化,但不是过早地(在我看来)。

我也认识到我所要求的可能没有性能优势。事实上,到目前为止提供的一种解决方案似乎根本不会影响性能。不过,在我问这个问题之前,我不可能知道这一点,现在任何想知道这是否对他们有帮助的未来访客都可以看到我执行的测试,并且知道这是不值得的。那不是很有用吗?

如果这不能解决反对者的担忧,请考虑发表评论,说出你认为我可以改进的问题。

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

1 个回答

  • Voted
  1. Best Answer
    David Spillett
    2017-12-04T01:24:40+08:002017-12-04T01:24:40+08:00

    您可以将单个文件组设置为只读,但除非最近的 SQL 服务器版本更改了主控,否则这不会带来将整个数据库设置为只读时发现的减少锁定的好处。

    您可以尝试将只读配置保存在单独的数据库中,并使用跨数据库查询来访问它。使用同义词以便您可以引用这些对象,就好像它们仍然是本地表一样。在我脑海中,我不能说这是否会按预期运行(减少锁定),或者查询计划程序/运行程序最终是否会像对待只读文件组一样对待这种安排,但它可能作为一个选项值得测试。如果它确实有效,那么将对象迁移回普通数据库只需将数据复制到新表并更新同义词,或者完全执行同义词并直接为表命名(如果这是唯一的实例,我建议后者该数据库的前者,如果您有许多在给定时间可能处于不同版本的数据库,

    注意:(正如 Rainbolt 在下面的评论中指出的那样)使用这样的跨数据库访问将阻止您定义外键约束,因此即使这确实通过锁定差异带来了性能优势,它仍然不会推荐的。因此,将上述答案视为“技术上你可以”而不是好的建议!您可以使用检查约束以一种方式实现约束,或者在通常具有 FK 约束的任何地方触发,但这是维护/调试和强制执行另一种方式的额外工作(如果它是,则不允许从引用的对象中删除行)被别处的行引用)是不可能的。

    • 3

相关问题

  • 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