事务隔离级别不同的线程大量写入

时间:2014-10-23 07:09:36

标签: sql-server transactions bulkinsert isolation-level

我有很多线程在DB中写入两个表中的一些数据。 tbl_raw_data tbl_parsed_data ,其中 tbl_parsed_data 具有 tbl_raw_data 的外键。

我还需要写得非常快。

在检查改进写入的选项时(假设读取时间非常重要),我的一位朋友告诉我,我需要检查适合我逻辑的事务隔离级别。 在阅读了一些关于这个问题的文章之后,我理解的是这个属性会影响阅读。

是否存在影响写作的事务隔离级别?对于许多连接上运行的大量线程,哪种隔离级别“最佳”?

我找错了地方吗?

我可以做些什么来改善大量写作?

我正在使用SQL服务器,这些线程来自TomEE服务器,它写入通过HTTP请求发送的数据。

2 个答案:

答案 0 :(得分:0)

隔离级别确实不会影响写入。无论如何,锁定在大多数情况下对性能的影响可以忽略不计(除非你阻止)。你正在考虑一个没有成果的方向。为了说服自己,使服务器负载并使用PerfView对其进行分析。大多数SQL Server的代码都将花费(反)序列化数据。

研究SQL Server中众所周知的批量插入技术。来自基本上SqlBulkCopy的客户。在服务器上,它将是具有大批量的INSERT语句(或者只是一个这样的语句)。

事务通常会提高性能,因为它们允许(不可避免的)日志写入延迟和批处理。

答案 1 :(得分:0)

你认为这个属性会影响阅读。

但需要注意的是,它会创建不同的锁,用于读取,写入不同级别的行,表级别等。锁定的问题是它们消耗资源并显着减慢速度。根据您的要求,如果您不介意“脏读”,“不可重复读取”和“不可重复读取”。和幻影'如果读取,您可以将隔离级别设置为“未提交读取

我无法保证确切的性能改进,但绝对对于大型并行连续读/写数据,它应该至少是默认设置的10倍。

还有另一种方法来查看问题:

有时,如果有连续多个并发请求进入,则数据库负载过大。您仍然可以根据您的要求进行设计(始终要考虑读取设计)。有效的解决方案一直是批处理。

  • 您始终可以从多个请求中收集数据并批量运行事务。这样,对于特定的隔离级别来说会更快。
  • 你真的需要交易吗?同意您拥有外键关系,但您始终可以先提交 tbl_raw_data 行,然后再提交 tbl_parsed_data 行数据。