Sql-server – New database server hardware and software inserts slower than old setup

sql server

We are upgrading our database hardware and software. The previous server is about 5 years old and is running SQL Server 2005 while the new one is SQL Server 2012. Every hardware component is faster in the new server.

Selects are faster and multiple inserts inside a transaction are around 50% faster, but raw inserts are actually slower by about 50%.

For example if I run the following code on each server the old setup is done in about 30 seconds and the new one takes 45. Throwing transactions around it results in old setup running in about 12 seconds and new setup running in about 6 seconds.

CREATE TABLE [dbo].[test] ( [testval] [varchar](50) NULL) ON [PRIMARY];

declare @id int
set @id = 1

while @id <= 250000
begin
insert into test (testval)
values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')

set @id = @id + 1
end

Just not clear on why the difference exists. Any suggestions would be appreciated.

Hardware

Old

Dell PowerEdge 2970
Six-Core AMD Opteron 2427 2.19 GHz X 2
16 GB RAM
Microsoft Windows Server 2008 SP2 x64
4 X 300GB SAS 2.5 10K RAID5

New2 servers are actually involved with the same hardware. They are setup for clustering and asynchronous mirroring. We have turned mirroring off and there is no change in results

Dell R720
Intel Xeon CPU EU-2640 v2 @ 2.00 GHz X 2
64 GB RAM
Microsoft Windows Server 2012 R2 Standard x64
RAID 10 with 4x15k for log files, 4x10k for mdf files, 2x10 for OS

sys.configuration

configuration_id name value minimum maximum value_in_use description is_dynamic is_advanced

Old

101 recovery interval (min) 0   0   32767   0   Maximum recovery interval in minutes    1   1
102 allow updates   0   0   1   0   Allow updates to system tables  1   0
103 user connections    0   0   32767   0   Number of user connections allowed  0   1
106 locks   0   5000    2147483647  0   Number of locks for all users   0   1
107 open objects    0   0   2147483647  0   Number of open database objects 0   1
109 fill factor (%) 0   0   100 0   Default fill factor percentage  0   1
114 disallow results from triggers  0   0   1   0   Disallow returning results from triggers    1   1
115 nested triggers 1   0   1   1   Allow triggers to be invoked within triggers    1   0
116 server trigger recursion    1   0   1   1   Allow recursion for server level triggers   1   0
117 remote access   1   0   1   1   Allow remote access 0   0
124 default language    0   0   9999    0   default language    1   0
400 cross db ownership chaining 0   0   1   0   Allow cross db ownership chaining   1   0
503 max worker threads  0   128 32767   0   Maximum worker threads  0   1
505 network packet size (B) 4096    512 32767   4096    Network packet size 1   1
518 show advanced options   1   0   1   1   show advanced options   1   0
542 remote proc trans   0   0   1   0   Create DTC transaction for remote procedures    1   0
544 c2 audit mode   0   0   1   0   c2 audit mode   0   1
1126    default full-text language  1033    0   2147483647  1033    default full-text language  1   1
1127    two digit year cutoff   2049    1753    9999    2049    two digit year cutoff   1   1
1505    index create memory (KB)    0   704 2147483647  0   Memory for index create sorts (kBytes)  1   1
1517    priority boost  0   0   1   0   Priority boost  0   1
1519    remote login timeout (s)    20  0   2147483647  20  remote login timeout    1   0
1520    remote query timeout (s)    600 0   2147483647  600 remote query timeout    1   0
1531    cursor threshold    -1  -1  2147483647  -1  cursor threshold    1   1
1532    set working set size    0   0   1   0   set working set size    0   1
1534    user options    0   0   32767   0   user options    1   0
1535    affinity mask   0   -2147483648 2147483647  0   affinity mask   1   1
1536    max text repl size (B)  65536   0   2147483647  65536   Maximum size of a text field in replication.    1   0
1537    media retention 0   0   365 0   Tape retention period in days   0   1
1538    cost threshold for parallelism  5   0   32767   5   cost threshold for parallelism  1   1
1539    max degree of parallelism   0   0   64  0   maximum degree of parallelism   1   1
1540    min memory per query (KB)   1024    512 2147483647  1024    minimum memory per query (kBytes)   1   1
1541    query wait (s)  -1  -1  2147483647  -1  maximum time to wait for query memory (s)   1   1
1543    min server memory (MB)  0   0   2147483647  16  Minimum size of server memory (MB)  1   1
1544    max server memory (MB)  2147483647  16  2147483647  2147483647  Maximum size of server memory (MB)  1   1
1545    query governor cost limit   0   0   2147483647  0   Maximum estimated cost allowed by query governor    1   1
1546    lightweight pooling 0   0   1   0   User mode scheduler uses lightweight pooling    0   1
1547    scan for startup procs  0   0   1   0   scan for startup stored procedures  0   1
1548    awe enabled 0   0   1   0   AWE enabled in the server   0   1
1549    affinity64 mask 0   -2147483648 2147483647  0   affinity64 mask 1   1
1550    affinity I/O mask   0   -2147483648 2147483647  0   affinity I/O mask   0   1
1551    affinity64 I/O mask 0   -2147483648 2147483647  0   affinity64 I/O mask 0   1
1555    transform noise words   0   0   1   0   Transform noise words for full-text query   1   1
1556    precompute rank 0   0   1   0   Use precomputed rank for full-text query    1   1
1557    PH timeout (s)  60  1   3600    60  DB connection timeout for full-text protocol handler (s)    1   1
1562    clr enabled 1   0   1   1   CLR user code execution enabled in the server   1   0
1563    max full-text crawl range   4   0   256 4   Maximum  crawl ranges allowed in full-text indexing 1   1
1564    ft notify bandwidth (min)   0   0   32767   0   Number of reserved full-text notifications buffers  1   1
1565    ft notify bandwidth (max)   100 0   32767   100 Max number of full-text notifications buffers   1   1
1566    ft crawl bandwidth (min)    0   0   32767   0   Number of reserved full-text crawl buffers  1   1
1567    ft crawl bandwidth (max)    100 0   32767   100 Max number of full-text crawl buffers   1   1
1568    default trace enabled   1   0   1   1   Enable or disable the default trace 1   1
1569    blocked process threshold   0   0   86400   0   Blocked process reporting threshold 1   1
1570    in-doubt xact resolution    0   0   2   0   Recovery policy for DTC transactions with unknown outcome   1   1
1576    remote admin connections    0   0   1   0   Dedicated Admin Connections are allowed from remote clients 1   0
16384   Agent XPs   1   0   1   1   Enable or disable Agent XPs 1   1
16385   SQL Mail XPs    0   0   1   0   Enable or disable SQL Mail XPs  1   1
16386   Database Mail XPs   1   0   1   1   Enable or disable Database Mail XPs 1   1
16387   SMO and DMO XPs 1   0   1   1   Enable or disable SMO and DMO XPs   1   1
16388   Ole Automation Procedures   0   0   1   0   Enable or disable Ole Automation Procedures 1   1
16389   Web Assistant Procedures    0   0   1   0   Enable or disable Web Assistant Procedures  1   1
16390   xp_cmdshell 1   0   1   1   Enable or disable command shell 1   1
16391   Ad Hoc Distributed Queries  1   0   1   1   Enable or disable Ad Hoc Distributed Queries    1   1
16392   Replication XPs 0   0   1   0   Enable or disable Replication XPs   1   1

New

101 recovery interval (min) 0   0   32767   0   Maximum recovery interval in minutes    1   1
102 allow updates   0   0   1   0   Allow updates to system tables  1   0
103 user connections    0   0   32767   0   Number of user connections allowed  0   1
106 locks   0   5000    2147483647  0   Number of locks for all users   0   1
107 open objects    0   0   2147483647  0   Number of open database objects 0   1
109 fill factor (%) 0   0   100 0   Default fill factor percentage  0   1
114 disallow results from triggers  0   0   1   0   Disallow returning results from triggers    1   1
115 nested triggers 1   0   1   1   Allow triggers to be invoked within triggers    1   0
116 server trigger recursion    1   0   1   1   Allow recursion for server level triggers   1   0
117 remote access   1   0   1   1   Allow remote access 0   0
124 default language    0   0   9999    0   default language    1   0
400 cross db ownership chaining 0   0   1   0   Allow cross db ownership chaining   1   0
503 max worker threads  0   128 65535   0   Maximum worker threads  1   1
505 network packet size (B) 4096    512 32767   4096    Network packet size 1   1
518 show advanced options   1   0   1   1   show advanced options   1   0
542 remote proc trans   0   0   1   0   Create DTC transaction for remote procedures    1   0
544 c2 audit mode   0   0   1   0   c2 audit mode   0   1
1126    default full-text language  1033    0   2147483647  1033    default full-text language  1   1
1127    two digit year cutoff   2049    1753    9999    2049    two digit year cutoff   1   1
1505    index create memory (KB)    0   704 2147483647  0   Memory for index create sorts (kBytes)  1   1
1517    priority boost  0   0   1   0   Priority boost  0   1
1519    remote login timeout (s)    10  0   2147483647  10  remote login timeout    1   0
1520    remote query timeout (s)    600 0   2147483647  600 remote query timeout    1   0
1531    cursor threshold    -1  -1  2147483647  -1  cursor threshold    1   1
1532    set working set size    0   0   1   0   set working set size    0   1
1534    user options    0   0   32767   0   user options    1   0
1535    affinity mask   0   -2147483648 2147483647  0   affinity mask   1   1
1536    max text repl size (B)  65536   -1  2147483647  65536   Maximum size of a text field in replication.    1   0
1537    media retention 0   0   365 0   Tape retention period in days   1   1
1538    cost threshold for parallelism  4   0   32767   5   cost threshold for parallelism  1   1
1539    max degree of parallelism   16  0   32767   0   maximum degree of parallelism   1   1
1540    min memory per query (KB)   1024    512 2147483647  1024    minimum memory per query (kBytes)   1   1
1541    query wait (s)  -1  -1  2147483647  -1  maximum time to wait for query memory (s)   1   1
1543    min server memory (MB)  0   0   2147483647  16  Minimum size of server memory (MB)  1   1
1544    max server memory (MB)  2147483647  128 2147483647  2147483647  Maximum size of server memory (MB)  1   1
1545    query governor cost limit   0   0   2147483647  0   Maximum estimated cost allowed by query governor    1   1
1546    lightweight pooling 0   0   1   0   User mode scheduler uses lightweight pooling    0   1
1547    scan for startup procs  0   0   1   0   scan for startup stored procedures  0   1
1549    affinity64 mask 0   -2147483648 2147483647  0   affinity64 mask 1   1
1550    affinity I/O mask   0   -2147483648 2147483647  0   affinity I/O mask   0   1
1551    affinity64 I/O mask 0   -2147483648 2147483647  0   affinity64 I/O mask 0   1
1555    transform noise words   0   0   1   0   Transform noise words for full-text query   1   1
1556    precompute rank 0   0   1   0   Use precomputed rank for full-text query    1   1
1557    PH timeout (s)  60  1   3600    60  DB connection timeout for full-text protocol handler (s)    1   1
1562    clr enabled 0   0   1   0   CLR user code execution enabled in the server   1   0
1563    max full-text crawl range   4   0   256 4   Maximum  crawl ranges allowed in full-text indexing 1   1
1564    ft notify bandwidth (min)   0   0   32767   0   Number of reserved full-text notifications buffers  1   1
1565    ft notify bandwidth (max)   100 0   32767   100 Max number of full-text notifications buffers   1   1
1566    ft crawl bandwidth (min)    0   0   32767   0   Number of reserved full-text crawl buffers  1   1
1567    ft crawl bandwidth (max)    100 0   32767   100 Max number of full-text crawl buffers   1   1
1568    default trace enabled   1   0   1   1   Enable or disable the default trace 1   1
1569    blocked process threshold (s)   0   0   86400   0   Blocked process reporting threshold 1   1
1570    in-doubt xact resolution    0   0   2   0   Recovery policy for DTC transactions with unknown outcome   1   1
1576    remote admin connections    0   0   1   0   Dedicated Admin Connections are allowed from remote clients 1   0
1579    backup compression default  0   0   1   0   Enable compression of backups by default    1   0
1580    filestream access level 0   0   2   0   Sets the FILESTREAM access level    1   0
1581    optimize for ad hoc workloads   0   0   1   0   When this option is set, plan cache size is further reduced for single-use adhoc OLTP workload. 1   1
1582    access check cache bucket count 0   0   65536   0   Default hash bucket count for the access check result security cache    1   1
1583    access check cache quota    0   0   2147483647  0   Default quota for the access check result security cache    1   1
16384   Agent XPs   1   0   1   1   Enable or disable Agent XPs 1   1
16386   Database Mail XPs   0   0   1   0   Enable or disable Database Mail XPs 1   1
16387   SMO and DMO XPs 1   0   1   1   Enable or disable SMO and DMO XPs   1   1
16388   Ole Automation Procedures   0   0   1   0   Enable or disable Ole Automation Procedures 1   1
16390   xp_cmdshell 0   0   1   0   Enable or disable command shell 1   1
16391   Ad Hoc Distributed Queries  0   0   1   0   Enable or disable Ad Hoc Distributed Queries    1   1
16392   Replication XPs 0   0   1   0   Enable or disable Replication XPs   1   1
16393   contained database authentication   0   0   1   0   Enables contained databases and contained authentication    1   0

Best Answer

I truly and desperately suck when it comes to Windows and SQL Server, but what I've seen from the past with $some_enterprise_hardware_vendor with $some_their_model was that the RAID controller had a dead battery. That lead to disabled RAID cache, which was NOT visible from the server hardware management interface, everything was green there.

Linux, on the other hand, somehow saw that the battery was dead (and RAID caches disabled due that) and informed that in its dmesg output. The terrible I/O performance returned to expected after we changed the battery.

So... perhaps some kind of hardware glitch you have not yet spotted?