我有很多线程在DB中写入两个表中的一些数据。 tbl_raw_data 和 tbl_parsed_data ,其中 tbl_parsed_data 具有 tbl_raw_data 的外键。
我还需要写得非常快。
在检查改进写入的选项时(假设读取时间非常重要),我的一位朋友告诉我,我需要检查适合我逻辑的事务隔离级别。 在阅读了一些关于这个问题的文章之后,我理解的是这个属性会影响阅读。
是否存在影响写作的事务隔离级别?对于许多连接上运行的大量线程,哪种隔离级别“最佳”?
我找错了地方吗?
我可以做些什么来改善大量写作?
我正在使用SQL服务器,这些线程来自TomEE服务器,它写入通过HTTP请求发送的数据。
答案 0 :(得分:0)
隔离级别确实不会影响写入。无论如何,锁定在大多数情况下对性能的影响可以忽略不计(除非你阻止)。你正在考虑一个没有成果的方向。为了说服自己,使服务器负载并使用PerfView对其进行分析。大多数SQL Server的代码都将花费(反)序列化数据。
研究SQL Server中众所周知的批量插入技术。来自基本上SqlBulkCopy
的客户。在服务器上,它将是具有大批量的INSERT
语句(或者只是一个这样的语句)。
事务通常会提高性能,因为它们允许(不可避免的)日志写入延迟和批处理。
答案 1 :(得分:0)
你认为这个属性会影响阅读。
但需要注意的是,它会创建不同的锁,用于读取,写入不同级别的行,表级别等。锁定的问题是它们消耗资源并显着减慢速度。根据您的要求,如果您不介意“脏读”,“不可重复读取”和“不可重复读取”。和幻影'如果读取,您可以将隔离级别设置为“未提交读取 。
我无法保证确切的性能改进,但绝对对于大型并行连续读/写数据,它应该至少是默认设置的10倍。
还有另一种方法来查看问题:
有时,如果有连续多个并发请求进入,则数据库负载过大。您仍然可以根据您的要求进行设计(始终要考虑读取设计)。有效的解决方案一直是批处理。