SQL Server 2016 与 2012 插入性能对比

Olg*_*ykh 14 performance sql-server sql-server-2012 sql-server-2016

  • 我在同一台服务器上有两个 SQL Server 实例:

    • Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 标准版(64 位)
    • Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) 企业版(64 位)
  • sp_configure 结果在两个实例上相同(新的 2016 选项除外)。

  • 我在同一个磁盘文件夹上的两个实例上创建了新数据库。自动生长参数相同。

  • 自动创建和自动更新统计选项被关闭。

  • 然后我做了一个测试,将 10000 次插入到一个堆中:

set nocount on
go

create table dbo.TestInsert ( i int not null, s varchar(50) not null )

declare @d1 datetime, @d2 datetime, @i int
set @d1 = getdate() 
set @i = 1

while @i <= 10000
begin
  insert into dbo.TestInsert ( i, s ) select @i, replicate( 'a', 50 )
  set @i = @i + 1
end

set @d2 = getdate()
select datediff(ms, @d1, @d2)
drop table dbo.TestInsert
Run Code Online (Sandbox Code Playgroud)

结果 1

平均测试时间

  • 2012 - 530 毫秒
  • 2016 - 600 毫秒

因此,2016 年大约慢了 11%。

  • 然后我做了一个 SQL Profiler 跟踪,结果保存到表中,以查看以微秒为单位的单次插入持续时间。

结果 2

2012 年与 2016 年单次插入持续时间的直方图: 在此处输入图片说明

来自 sys.dm_io_virtual_file_stats 的事务日志增长为:

  • 2012 - 5174784 字节
  • 2016 - 5171200 字节

在这些测试期间,两个实例都会启动。但是一个测试每次只在一个实例上运行。我为每个实例分配了 8Gb RAM。查询计划是相同的。在自己的机器上运行每个实例会很有趣。但可能一台机器更好,因为这里我们没有硬件和环境隐藏的差异。

问题

  • 为什么 2016 年比较慢?
  • 有人可以重现这个测试吗?

Ang*_* M. 1

显然,在同一服务器中拥有完全相同的版本是非常困难的,但是......我希望我的结果会对您有所帮助。我有两台配置为 Windows Server 2012 R2 Standard 的不同计算机。不幸的是,他们没有相同的硬件,但相似:

  1. 机器 1 (SQL Server 2016)

    • 处理器:Intel(R) Xeon(r) CPU X5650 @2.67GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 2016 年 4 月 29 日 23:23:58 版权所有 (c) Windows Server 2012 R2 Standard 6.3 上的 Microsoft Corporation 标准版(64 位)(内部版本 9600:)(虚拟机管理程序)
  2. 机器 2 (SQL Server 2012)

    • 处理器:Intel(R) Xeon(R) CPU E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 2014 年 5 月 14 日 18:34:29 版权所有 (c) Windows NT 6.3 上的 Microsoft Corporation 标准版(64 位)(内部版本 9600:)(虚拟机管理程序)

我在两台机器上运行了您提供的相同脚本 5 次,并获得了以下平均值:

  • 2012年:9961
  • 2016年:8971

您获得的结果几乎相反。无论如何,正如您所看到的,我的 2012 年机器具有更好的处理器,但通常显示差异的硬盘是相同的。因此,即使 2012 年有更好的资源,对我来说还是有点慢。

(抱歉,请再次检查,我的第一个版本有一些重要的勘误)