我们有一个数据库的小样本导出(~100k行)。格式为每行包含Insert语句的.sql文件:
Set Identity_Insert dbtable ON
Insert into dbtable (Id,Name) values(1,N'dummy');
... repeated 1k rows
Set Identity_Insert dbtable OFF
GO除了这不是导出/导入的最佳实践之外,我们还观察到在Linux (CentOS 7)上运行的SQL Server 2019与在Windows10上运行的SQL Server 2019之间的主要性能差异。这两个SQL Server都是使用最新安装程序全新设置的,并且开箱即用,因此没有进行特定的设置或优化。
Time for 100k Inserts
CentOS 7: ~330 seconds
Windows 10: ~17 seconds关于计算能力,CentOS系统应该更强大,运行在具有16核、32 GB内存和高带宽存储集群的高性能计算集群上。Windows系统是一种典型的办公笔记本电脑(i7、16 GB、固态硬盘)。
有什么想法可以从哪里开始进行故障排除?SQL Server的基本安装/默认设置在不同操作系统之间是否存在重大差异?
发布于 2021-03-29 18:51:46
缺省情况下,每个插入都是一个单独的自动提交事务。SQL Server将在每次插入后将事务日志缓冲区刷新到磁盘,以加强事务。这些物理写入所需的时间(在本例中为100K)将因存储子系统的IOPS功能而大不相同。对于顺序写入IOPS工作负载,即使是在PC上,本地SSD也可能优于企业级SAN存储,这并不少见,因为SAN延迟高于本地PCI总线。
对大型事务中的插入进行批处理将减少物理事务日志写入的数量,并显著加快插入脚本的速度。
https://stackoverflow.com/questions/66820440
复制相似问题