Dell 12th Generation Rack Mounted Server Comparison

I think it is useful to examine the various 12th generation, rack-mounted server models available from Dell, comparing them from a SQL Server perspective. There are currently seven models in this line, ranging from an entry-level, single-socket server to a four-socket server. All of these servers use the Intel Xeon E5 processor (Sandy Bridge), but different models use different series of that processor family, which is a very important  detail to pay attention to for SQL Server 2012 usage. You could easily compare the available server models from another vendor in the same way, and I will probably do that in a future post.

Dell PowerEdge R320
This model server has a 1U form factor, one processor socket, and uses the Intel Xeon E5-2400 series processor. It has six memory slots (96GB total RAM with 16GB DIMMs), has eight 2.5 inch drive bays, and has one PCI-E 3.0 x8 and one PCI-E 3.0 x16 expansion slots. It has a total of four, six, or eight physical cores for SQL Server 2012 core licensing purposes. It has a total of eight, twelve, or sixteen logical cores with Intel hyper-threading enabled. The R320 is an interesting option for some smaller workloads, since it uses the Xeon E5-2400 series Sandy Bridge-EN processor (that is usually used in two-socket systems) instead of the Xeon E3-1200 Sandy Bridge or Xeon E3-1200 v2 series Ivy Bridge processor that is used in most new single-socket servers. This lets you use up to 96GB of RAM instead of being limited to 32GB of RAM, and it lets you have up to eight physical processor cores instead of being limited to four physical processor cores. The downside of this is being limited to slower processor clock speeds with the E5-2400 series compared to the E3-1200 series processors, which means you will see slower single-threaded performance. The R320 might be a good choice for a DW type of workload, where the extra processor cores and higher memory capacity would be more useful. A single-socket server with an Intel E3-1200 v2 series processor would be better for a small OLTP workload. Keep in mind that SQL Server 2012 Standard Edition is limited to 64GB of RAM.

Dell PowerEdge R420
This model server has a 1U form factor, two processor sockets, and uses Intel Xeon E5-2400 series processors. It also has twelve memory slots (192GB total RAM with 16GB DIMMs), has eight 2.5 inch drive bays, and has two PCI-E 3.0 x16 expansion slots. It has a total of eight, twelve, or sixteen physical cores for SQL Server 2012 core licensing purposes. It has a total of sixteen, 24, or 32 logical cores with Intel hyper-threading enabled. This model is a bad choice for SQL Server 2012. The Xeon E5-2400 series  Sandy Bridge-EN processor is very limited  compared to the Xeon E5-2600 series Sandy Bridge-EP processor. It has slower clock speeds, less memory bandwidth, and less memory capacity. Since you pay the same amount for each SQL Server 2012 core license regardless of what type of physical core is in the processor, the E5-2400 series is a bad choice compared to the E5-2600 series. Another problem with this model server is the fact that it only has two PCI-E expansion slots and eight internal drive bays, which limits your overall I/O capacity and performance.

 

Dell PowerEdge R520
This model server has a 2U form factor, two processor sockets, and uses Intel Xeon E5-2400 series processors. It also has twelve memory slots (192GB total RAM with 16GB DIMMs), has eight 3.5 inch drive bays, and has three PCI-E 3.0 x8 and one PCI-E 3.0 x16 expansion slots. It has a total of eight, twelve, or sixteen physical cores for SQL Server 2012 core licensing purposes. It has a total of sixteen, 24, or 32 logical cores with Intel hyper-threading enabled. This model is also a bad choice for SQL Server 2012 since it uses the same Intel Xeon E5-2400 series processor as the R420 . It does have four PCI-E expansion slots, which is a little better for I/O capacity and performance. Still, I would steer clear of both the R420 and R520 models for SQL Server 2012 usage.

 

Dell PowerEdge R620
This model server has a 1U form factor, two processor sockets, and uses Intel Xeon E5-2600 series processors. It has 24 memory slots (384GB total RAM with 16GB DIMMs), has ten 2.5 inch drive bays, and has one PCI-E 3.0 x8 and two PCI-E 3.0 x16 expansion slots. It also has a total of eight, twelve, or sixteen physical cores for SQL Server 2012 core licensing purposes. It has a total of sixteen, 24, or 32 logical cores with Intel hyper-threading enabled. The R620 is a much better choice for SQL Server 2012 than either the R420 or R520 since it uses the Intel Xeon E5-2600 series Sandy Bridge-EP processor. That processor series gives you higher clock speeds, higher memory bandwidth, and higher memory capacity compared to the Xeon E5-2400 series Sandy Bridge-EN processor. The R620 is limited to three PCI-E expansion slots, but it does have ten internal drive bays. Overall, it is a good model for use as an entry level two-socket database server, especially if you want a 1U form factor.

 

Dell PowerEdge R720
This model server has a 2U form factor, two processor sockets, and uses Intel Xeon E5-2600 series processors. It has 24 memory slots (384GB total RAM with 16GB DIMMs), has sixteen 2.5 inch drive bays, and has six PCI-E 3.0 x8 and one PCI-E 3.0 x16 expansion slots. It has a total of eight, twelve, or sixteen physical cores for SQL Server 2012 core licensing purposes. Total of sixteen, 24, or 32 logical cores with Intel hyper-threading enabled. The R720 is one of my favorite models in the Dell 12th generation line. It uses the same Intel Xeon E5-2600 series processor as the R620, but it has seven PCI-E expansion slots and sixteen internal drive bays, which combine to give you a lot of potential I/O capacity and performance. It does cost a little bit more than the R620, and it is in a 2U vertical size, so there are some scenarios where I would prefer an R620. An example scenario would be an OLTP workload where I knew that I would have external SAN storage with very good random I/O performance, and I wanted to be able to use 1U database servers instead of 2U database servers.

 

Dell PowerEdge R720xd
This model server has a 2U form factor, two processor sockets, uses Intel Xeon E5-2600 series processors, has 24 memory slots (384GB total RAM with 16GB DIMMs), has 26 2.5 inch drive bays, and has four PCI-E 3.0 x8 and two PCI-E 3.0 x16 expansion slots. Has a total of eight, twelve, or sixteen physical cores for SQL Server 2012 core licensing purposes. Total of sixteen, 24, or 32 logical cores with Intel hyper-threading enabled. The R720xd is similar to the R720, except that it has 26 internal drive bays and only six PCI-E expansion slots. This model could be a good choice if you can run your I/O workload on 26 internal drive bays, some or all of which could be solid state drives (SSDs). This could let you avoid the expense of an external direct-attached storage (DAS) enclosure or a storage area network (SAN).

 

Dell PowerEdge R820
This model server has a 2U form factor, four processor sockets, and uses Intel Xeon E5-4600 series processors. It has 48 memory slots (768GB total RAM with 16GB DIMMs), has sixteen 2.5 inch drive bays, and has five PCI-E 3.0 x8 and two PCI-E 3.0 x16 expansion slots. It also has a total of sixteen, 24, or 32 physical cores for SQL Server 2012 core licensing purposes. Total of 32, 48, or 64 logical cores with Intel hyper-threading enabled. The R820 has four processor sockets in a 2U vertical size. It uses the Intel Xeon E5-4600 series processor, which has lower clock speeds than the Xeon E5-2600 series. There is also some non-uniform memory access (NUMA) scaling loss as you move from a two-socket to a four-socket server, i.e. a four socket server does not have twice the scalability as a two socket server with the exact same processor. The R820 does have sixteen internal drive bays and seven PCI-E expansion slots, so it has good I/O capacity and performance potential. It also has twice the total RAM capacity compared to an R620, R720, or R720xd. In spite of all these factors, I would tend to prefer two R720xd servers instead of one R820 server, assuming you can split your workload between two servers. You would have faster, less expensive processors, over three times as many internal drive bays, and nearly twice as many PCI-E expansion slots, while paying the same SQL Server 2012 license costs. I really like the R720xd, with its 26 internal drive bays. I suspect that a very high percentage of SQL Server workloads would run extremely well on an R720xd. If 26 internal drives did not give you enough I/O performance and capacity, you could always add some internal solid state storage cards or use some form of external storage.

As a database professional, I would be actively lobbying against using the R420 or R520 models, since they have the entry-level Intel Xeon E5-2400 series processors, which have lower clock speeds and less memory bandwidth compared to the Intel Xeon E5-2600 series processors that are used in the R620, R720, and R720xd. They also have half of the total memory capacity and far fewer PCI-E slots compared to the higher end models. They are a little less expensive, but the hardware cost delta is very small compared to the SQL Server 2012 license costs. Remember, you are paying for SQL Server 2012 core licenses based on physical core counts, so you want to get the best package you can as far as the rest of the server goes. One nice fact is that the Intel Xeon E5 processor family is available in four-core, six-core, and eight core models, with specific four-core models having higher base clock speeds than the “top-of-the line” eight-core model processor. If you wanted to minimize your SQL Server 2012 core-based licensing costs and were willing to give up some scalability and capacity, you could pick one of these faster base clock speed four-core model processors for your server and actually see very good single-threaded performance.

A good example of a fast, quad-core Intel Xeon E5 processor is the Intel Xeon E5-2643 that runs at a base clock speed of 3.3GHz, with a Turbo Boost speed of 3.5GHz. This processor would give very good OLTP performance at 50% the SQL Server 2012 Core license cost of an eight-core Intel Xeon E5-2690 that runs at a base clock speed of 2.9GHz, with a Turbo Boost speed of 3.8GHz.

How to Create SQL Server Agent Alerts for Critical Errors

One necessary part of being a responsible DBA is to try to configure your SQL Server instances in such a manner so they will be as reliable as possible. This begins with how you initially install and configure the operating system and SQL Server, and what you do over time to maintain and monitor your SQL Server instances. I recently wrote a three part series about how to provision a new SQL Server instance that is available on the SimpleTalk web site. Part One is here, Part Two is here, and Part Three is here. If you read and follow my recommendations in those three articles, you will have a very good foundation to build on going forward.

One subject that I touched on in Part Three of that series was how to use some T-SQL to quickly create SQL Server Agent Alerts for a number of critical error conditions. SQLskills own Paul Randal previously wrote about this. The code below is an updated version of the script that I included in my article that automatically picks up the server name and uses that as part of the alert name. It also uses variables for the operator name and for the alert category name. In this script, the delay between responses is set to 900 seconds, which is 15 minutes. That might be a little on the long side, but I did not want the operator to get spammed with e-mail alerts every couple of minutes. You can always adjust that value to whatever you see fit.

   1: -- Add important SQL Agent Alerts to your instance

   2:

   3: -- Change the Alert names and @OperatorName as needed

   4: -- Glenn Berry

   5: -- SQLskills

   6: -- 9-27-2012

   7:

   8: USE [msdb];

   9: GO

  10:

  11: -- Make sure you have an Agent Operator defined

  12: -- Change @OperatorName as needed

  13: DECLARE @OperatorName sysname = N'SQLDBAs';

  14:

  15: -- Change @CategoryName as needed

  16: DECLARE @CategoryName sysname = N'SQL Server Agent Alerts';

  17:

  18: -- Add Alert Category if it does not exist

  19: IF NOT EXISTS (SELECT *

  20:                FROM msdb.dbo.syscategories

  21:                WHERE category_class = 2  -- ALERT

  22:                AND category_type = 3

  23:                AND name = @CategoryName)

  24:     BEGIN

  25:         EXEC dbo.sp_add_category @class = N'ALERT', @type = N'NONE', @name = @CategoryName;

  26:     END

  27:

  28: -- Get the server name

  29: DECLARE @ServerName sysname = (SELECT @@SERVERNAME);

  30:

  31:

  32: -- Alert Names start with the name of the server 

  33: DECLARE @Sev19AlertName sysname = @ServerName + N' Alert - Sev 19 Error: Fatal Error in Resource';

  34: DECLARE @Sev20AlertName sysname = @ServerName + N' Alert - Sev 20 Error: Fatal Error in Current Process';

  35: DECLARE @Sev21AlertName sysname = @ServerName + N' Alert - Sev 21 Error: Fatal Error in Database Process';

  36: DECLARE @Sev22AlertName sysname = @ServerName + N' Alert - Sev 22 Error Fatal Error: Table Integrity Suspect';

  37: DECLARE @Sev23AlertName sysname = @ServerName + N' Alert - Sev 23 Error: Fatal Error Database Integrity Suspect';

  38: DECLARE @Sev24AlertName sysname = @ServerName + N' Alert - Sev 24 Error: Fatal Hardware Error';

  39: DECLARE @Sev25AlertName sysname = @ServerName + N' Alert - Sev 25 Error: Fatal Error';

  40: DECLARE @Error825AlertName sysname = @ServerName + N' Alert - Error 825: Read-Retry Required';

  41:

  42:

  43:

  44: -- Sev 19 Error: Fatal Error in Resource

  45: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev19AlertName)

  46:     EXEC msdb.dbo.sp_add_alert @name = @Sev19AlertName,

  47:                   @message_id=0, @severity=19, @enabled=1,

  48:                   @delay_between_responses=900, @include_event_description_in=1,

  49:                   @category_name = @CategoryName,

  50:                   @job_id=N'00000000-0000-0000-0000-000000000000';

  51:

  52: -- Add a notification if it does not exist

  53: IF NOT EXISTS(SELECT *

  54:           FROM dbo.sysalerts AS sa

  55:           INNER JOIN dbo.sysnotifications AS sn

  56:           ON sa.id = sn.alert_id

  57:           WHERE sa.name = @Sev19AlertName)

  58:     BEGIN

  59:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev19AlertName, @operator_name=@OperatorName, @notification_method = 1;

  60:     END

  61:

  62:

  63:

  64:

  65:

  66: -- Sev 20 Error: Fatal Error in Current Process

  67: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev20AlertName)

  68:     EXEC msdb.dbo.sp_add_alert @name = @Sev20AlertName,

  69:                   @message_id=0, @severity=20, @enabled=1,

  70:                   @delay_between_responses=900, @include_event_description_in=1,

  71:                   @category_name = @CategoryName,

  72:                   @job_id=N'00000000-0000-0000-0000-000000000000'

  73:

  74: -- Add a notification if it does not exist

  75: IF NOT EXISTS(SELECT *

  76:           FROM dbo.sysalerts AS sa

  77:           INNER JOIN dbo.sysnotifications AS sn

  78:           ON sa.id = sn.alert_id

  79:           WHERE sa.name = @Sev20AlertName)

  80:     BEGIN

  81:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev20AlertName, @operator_name=@OperatorName, @notification_method = 1;

  82:     END

  83:

  84:

  85:

  86: -- Sev 21 Error: Fatal Error in Database Process

  87: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev21AlertName)

  88:     EXEC msdb.dbo.sp_add_alert @name = @Sev21AlertName,

  89:                   @message_id=0, @severity=21, @enabled=1,

  90:                   @delay_between_responses=900, @include_event_description_in=1,

  91:                   @category_name = @CategoryName,

  92:                   @job_id=N'00000000-0000-0000-0000-000000000000';

  93:

  94: -- Add a notification if it does not exist

  95: IF NOT EXISTS(SELECT *

  96:           FROM dbo.sysalerts AS sa

  97:           INNER JOIN dbo.sysnotifications AS sn

  98:           ON sa.id = sn.alert_id

  99:           WHERE sa.name = @Sev21AlertName)

 100:     BEGIN

 101:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev21AlertName, @operator_name=@OperatorName, @notification_method = 1;

 102:     END

 103:

 104:

 105:

 106: -- Sev 22 Error: Fatal Error Table Integrity Suspect

 107: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev22AlertName)

 108:     EXEC msdb.dbo.sp_add_alert @name = @Sev22AlertName,

 109:                   @message_id=0, @severity=22, @enabled=1,

 110:                   @delay_between_responses=900, @include_event_description_in=1,

 111:                   @category_name = @CategoryName,

 112:                   @job_id=N'00000000-0000-0000-0000-000000000000';

 113:

 114: -- Add a notification if it does not exist

 115: IF NOT EXISTS(SELECT *

 116:           FROM dbo.sysalerts AS sa

 117:           INNER JOIN dbo.sysnotifications AS sn

 118:           ON sa.id = sn.alert_id

 119:           WHERE sa.name = @Sev22AlertName)

 120:     BEGIN

 121:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev22AlertName, @operator_name=@OperatorName, @notification_method = 1;

 122:     END

 123:

 124:

 125: -- Sev 23 Error: Fatal Error Database Integrity Suspect

 126: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev23AlertName)

 127:     EXEC msdb.dbo.sp_add_alert @name = @Sev23AlertName,

 128:                   @message_id=0, @severity=23, @enabled=1,

 129:                   @delay_between_responses=900, @include_event_description_in=1,

 130:                   @category_name = @CategoryName,

 131:                   @job_id=N'00000000-0000-0000-0000-000000000000';

 132:

 133: -- Add a notification if it does not exist

 134: IF NOT EXISTS(SELECT *

 135:           FROM dbo.sysalerts AS sa

 136:           INNER JOIN dbo.sysnotifications AS sn

 137:           ON sa.id = sn.alert_id

 138:           WHERE sa.name = @Sev23AlertName)

 139:     BEGIN

 140:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev23AlertName, @operator_name = @OperatorName, @notification_method = 1;

 141:     END

 142:

 143:

 144: -- Sev 24 Error: Fatal Hardware Error

 145: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev24AlertName)

 146:     EXEC msdb.dbo.sp_add_alert @name = @Sev24AlertName,

 147:                   @message_id=0, @severity=24, @enabled=1,

 148:                   @delay_between_responses=900, @include_event_description_in=1,

 149:                   @category_name = @CategoryName,

 150:                   @job_id=N'00000000-0000-0000-0000-000000000000';

 151:

 152: -- Add a notification if it does not exist

 153: IF NOT EXISTS(SELECT *

 154:           FROM dbo.sysalerts AS sa

 155:           INNER JOIN dbo.sysnotifications AS sn

 156:           ON sa.id = sn.alert_id

 157:           WHERE sa.name = @Sev24AlertName)

 158:     BEGIN

 159:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev24AlertName, @operator_name = @OperatorName, @notification_method = 1;

 160:     END

 161:

 162:

 163: -- Sev 25 Error: Fatal Error

 164: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Sev25AlertName)

 165:     EXEC msdb.dbo.sp_add_alert @name = @Sev25AlertName,

 166:                   @message_id=0, @severity=25, @enabled=1,

 167:                   @delay_between_responses=900, @include_event_description_in=1,

 168:                   @category_name = @CategoryName,

 169:                   @job_id=N'00000000-0000-0000-0000-000000000000';

 170:

 171: -- Add a notification if it does not exist

 172: IF NOT EXISTS(SELECT *

 173:           FROM dbo.sysalerts AS sa

 174:           INNER JOIN dbo.sysnotifications AS sn

 175:           ON sa.id = sn.alert_id

 176:           WHERE sa.name = @Sev25AlertName)

 177:     BEGIN

 178:         EXEC msdb.dbo.sp_add_notification @alert_name = @Sev25AlertName, @operator_name = @OperatorName, @notification_method = 1;

 179:     END

 180:

 181:

 182:

 183: -- Error 825: Read-Retry Required

 184: IF NOT EXISTS (SELECT name FROM msdb.dbo.sysalerts WHERE name = @Error825AlertName)

 185:     EXEC msdb.dbo.sp_add_alert @name = @Error825AlertName,

 186:                   @message_id=825, @severity=0, @enabled=1,

 187:                   @delay_between_responses=900, @include_event_description_in=1,

 188:                   @category_name = @CategoryName,

 189:                   @job_id=N'00000000-0000-0000-0000-000000000000';

 190:

 191:

 192: -- Add a notification if it does not exist

 193: IF NOT EXISTS(SELECT *

 194:           FROM dbo.sysalerts AS sa

 195:           INNER JOIN dbo.sysnotifications AS sn

 196:           ON sa.id = sn.alert_id

 197:           WHERE sa.name = @Error825AlertName)

 198:     BEGIN

 199:         EXEC msdb.dbo.sp_add_notification @alert_name = @Error825AlertName, @operator_name = @OperatorName, @notification_method = 1;

 200:     END

 201: GO

 202:

 203:

 204:

 205:

 206:

Save Money on SQL Server 2012 Licensing Costs

I recently had a chance to record a 33 minute podcast interview on RunAs Radio #281 with Richard Campbell, where I talked about the licensing changes in SQL Server 2012 and how to select your new hardware to minimize your SQL Server 2012 licensing costs. I also talked about Intel versus AMD processors, and talked about which Intel processors were good and bad choices for different workloads on SQL Server 2012.

RunAs Radio has been putting out weekly podcasts since April of 2007, and they have a lot of good content available there! Paul Randal and Kimberly Tripp did RunAs Radio #221 back in July 2011. Paul also did RunAs Radio #74 and RunAs Radio #72.