当前位置: 首页 > 知识库问答 >
问题:

TABLOCK是否会提高批量插入的性能?

缪晋
2023-03-14

我只是想知道TABLOCK是否会提高批量插入的性能?

根据中的第一个答案https://dba.stackexchange.com/questions/165966/how-does-one-investigate-the-performance-of-a-bulk-insert-statement,看来塔洛克会的。

根据官方文件https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15,它说“如果一个表没有索引并且指定了TABLOCK,那么它可以由多个客户端同时加载。”但对于我的情况,只需要一个会话就可以将数据批量插入数据库,因此我似乎根本不需要指定TABLOCK。

这个问题我已经问过了https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a957cd37-ec96-4beb-8a4b-03d783c7f91e/whether-tablock-will-improve-the-performance-of-bulk-insert-or-not?forum=transactsql但是没有得到令人满意的答案,所以我不得不在这里重新提出这个问题。

谢谢

共有1个答案

屠晟睿
2023-03-14

TABLOCK指定在批量导入操作期间获取表级锁。如果表没有索引并且指定了TABLOCK,则可以由多个客户端同时加载该表。缺省情况下,锁定行为由批量加载时的表选项表锁决定。在批量导入操作期间保持锁可以减少表上的锁争用,在某些情况下可以显著提高性能。

如果数据插入到只有一个会话表锁的表中对您没有任何好处,但当许多会话可以将数据插入到表中时,表锁可以减少进程中的锁争用。但当您的表有表锁时,另一个会话无法访问表。

 类似资料:
  • 我有一个数据模型,在一个实体和11个其他实体之间有一对多的关系。这12个实体一起代表一个数据包。我遇到的问题是,在这些关系的“多”端发生的插入数量。其中一些可以有多达100个单独的值,因此要在数据库中保存一个完整的数据包,最多需要500次插入。 我在InnoDB表中使用MySQL 5.5。现在,通过对数据库的测试,我发现在处理批插入时,它可以轻松地每秒执行15000次插入(对于加载数据,插入次数甚

  • 问题内容: 我有一个数据模型,该数据模型在一个实体和其他11个实体之间具有一对多关系。这12个实体一起代表一个数据包。我遇到的问题是与这些关系的“许多”方面发生的插入次数有关。其中一些可以具有多达100个单独的值,因此要将一个完整的数据包保存在数据库中,最多需要500次插入。 我正在将MySQL 5.5与InnoDB表一起使用。现在,通过测试数据库,我发现在处理批量插入时,它每秒可以轻松地每秒进行

  • 问题内容: Kotlin是否可以提高性能?有基准测试吗?Kotlin比Java快吗?我在Kotlin网站上找到了这个。https://kotlinlang.org/docs/reference/comparison- to-java.html 谈论语言功能而不是性能。 问题答案: Kotlin生成的字节码与Java非常相似,因此Kotlin代码的性能在大多数情况下与等效Java代码的性能相同。 内

  • 在尝试将CLOB从一个数据库复制到另一个数据库时,我发现Oracle(11g)的性能很差。我尝试了几件事,但都没能改善这一点。 CLOB用于收集报告数据。这可能是相当大的一个记录到记录的基础上。我在远程数据库(通过WAN)上调用一个过程来构建数据,然后将结果复制回公司总部的数据库进行比较。一般格式为: 为了提高性能,我将远程站点的结果累积到表的远程副本中。在程序运行结束时,我尝试将数据复制回来。此

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量