SQL Server 2019 插入性能:CentOS 7 对比 Windows 10

SQL Server 2019 Insert Performance: CentOS 7 vs Windows 10

我们有一个数据库的小样本导出(约 10 万行)。格式是一个 .sql 文件,每行都有 Insert 语句:

Set Identity_Insert dbtable ON
Insert into dbtable (Id,Name) values(1,N'dummy');
... repeated 1k rows
Set Identity_Insert dbtable OFF
GO

除了这不是 exporting/importing 的最佳实践之外,我们观察到 SQL Server 2019 运行 在 Linux 上的主要性能差异(CentOS 7) 对比 Windows 10 上的 运行。两个 SQL 服务器都使用最新的安装程序进行了全新设置,开箱即用,因此没有进行任何特殊设置或优化。

Time for 100k Inserts
CentOS 7: ~330 seconds
Windows 10: ~17 seconds

关于计算能力,CentOS 系统应该更强大,运行 在具有 16 个内核、32 GB 内存和高带宽存储集群的 HPC 集群上。 Windows 系统是典型的办公室笔记本电脑(i7、16 GB、SSD)。

知道从哪里开始进行故障排除吗?不同 OS 之间 SQL 服务器的基本安装/默认设置是否存在重大差异?

默认情况下,每个插入都是一个单独的自动提交事务。 SQL 服务器将在每次插入后将事务日志缓冲区刷新到磁盘以加固事务。这些物理写入所需的时间(在本例中为 100K)将因存储子系统的 IOPS 功能而有很大差异。对于顺序写入 IOPS 工作负载,即使在 PC 上,本地 SSD 的性能也可能优于企业级 SAN 存储,这是很常见的,因为 SAN 延迟高于本地 PCI 总线。

在大型事务中批量插入将减少物理事务日志写入的次数并显着加快插入脚本的速度。