SQL Server Database Mirroring Tips and Tricks, Part 3

One of the challenges you face with SQL Server database mirroring is making sure that all of the databases that are dependent on each other will failover together, so they are running on the same side of the database mirroring partnership at all times.  There is no built-in support for this with database mirroring, but SQL Server 2012 lets you use AlwaysOn Availability Groups to have multiple databases failover to a different node all together. You do need SQL Server 2012 Enterprise Edition in order to use AlwaysOn Availability Groups. If you want to get somewhat similar functionality with SQL Server database mirroring, you can try using the techniques that I will outline in this post.

First, you need to be running synchronous database mirroring on each database in order to do a manual failover. If you are going to pay the write performance penalty (due to the two-phase commit process) for synchronous database mirroring, then you really should also have a Witness instance so you can have automatic failover capability. It is really not recommended to run synchronous database mirroring without also having a witness instance, since you hurt write performance without getting the benefit of automatic failover.

These steps will help you make sure that all of your dependent databases are running on the same side of the mirror, and that they will failover together at roughly the same time (at least within 15-30 seconds of when the “main” database fails over).

Step 1: Create a stored procedure called sp_FailoverUserDatabase in the master database of the Principal and the Mirror instance of your database mirroring partnership. I use the sp_ prefix for the stored procedure name on purpose, since this SP will be in the master database. You must be running in the context of the master database when you do a database failover with ALTER DATABASE  databaseName SET PARTNER FAILOVER;

USE [master];
GO

/* sp_FailoverUserDatabase ===================================================
Description : Failover a user database from the master database
Used By: Only used to monitor the database instance               
 
Last Modified           Developer         Description 
-----------------------------------------------------------------------------
12-27-2011              Glenn Berry       Created     
=============================================================================*/
CREATE PROCEDURE [dbo].[sp_FailoverUserDatabase]
(@DatabaseName nvarchar(128))
AS
    SET NOCOUNT ON;
    DECLARE @MirroringRole tinyint = 0;
    DECLARE @SQLCommand nvarchar(255);
      
      
    -- Get mirroring role for database
    SET @MirroringRole = (SELECT mirroring_role
                          FROM sys.database_mirroring
                          WHERE DB_NAME(database_id) = @DatabaseName);  
    
    -- Must be in Principal role                                  
    IF @MirroringRole = 1  -- Principal
        BEGIN
            SET @SQLCommand = N'ALTER DATABASE ' + @DatabaseName + N' SET PARTNER FAILOVER;';
            EXECUTE (@SQLCommand);
        END                                   
      
    RETURN;

 

Step 2: Create a new database called ServerMonitor on both the Principal and the Mirror instance of your database mirroring partnership. This database should use the Simple recovery model, and you do not want to mirror it. You want two completely separate copies of the database on each side of the mirror. You could also use an existing “Utility” type database that you might be using for storing instance level metrics.

 

Step 3: Create a stored procedure called DBAdminSynchronizeMirroringStatus in the ServerMonitor database of the Principal and the Mirror instance of your database mirroring partnership. You will want to modify it to use your database names.  This stored procedure will be called by a SQL Agent job.

USE ServerMonitor;
GO

/* DBAdminSynchronizeMirroringStatus =========================================
Description : Get database mirroring status for your "main" database and 
              failover appropriate databases if needed
Used By: Only used to monitor the database instance               
 
Last Modified           Developer         Description 
-----------------------------------------------------------------------------
12-27-2011              Glenn Berry       Created   
=============================================================================*/
CREATE PROCEDURE [dbo].[DBAdminSynchronizeMirroringStatus]
AS
      SET NOCOUNT ON;
      DECLARE @MirroringRole tinyint = 0;
                        
      -- Get mirroring role for your "main" database
      SET @MirroringRole = (SELECT mirroring_role
                            FROM sys.database_mirroring
                            WHERE DB_NAME(database_id) = N'MainDatabaseName');   
 
      IF @MirroringRole = 2 -- Mirror
            BEGIN
                  -- MainDatabaseName failed-over, so failover other databases
                  EXEC [master].dbo.sp_FailoverUserDatabase N'DatabaseOne';
                  
                  EXEC [master].dbo.sp_FailoverUserDatabase N'DatabaseTwo';
                  
                  EXEC [master].dbo.sp_FailoverUserDatabase N'DatabaseThree';

                  -- Add more databases as needed. Make sure to change the database names!
                    
            END
                                          
      RETURN;

 

Step 4: Create a new SQL Server Agent job called “Synchronize Mirroring Status” that simply calls the DBAdminSynchronizeMirroringStatus stored procedure in your ServerMonitor database. Make sure this job is enabled, but do not have it running on a schedule!  You only want it to be called by the SQL Server Agent Alert that you are going to create in the next step.

Step 5: Create a new SQL Server Agent Alert to detect automatic database mirroring state changes for your “main” database. This needs to use a Windows Management Interface (WMI) query like this:

SELECT * FROM Database_Mirroring_State_Change WHERE DatabaseName = ‘MainDatabaseName’ AND State = 8  

State = 8 means that you had a database mirroring state change for that database due to an automatic failover. This could have happened because of a loss of network connectivity between the Principal instance and the Mirror instance. You will want to change the name of the database and the name of the SQL Server Agent Alert (to something like “Account Database Automatic Mirroring Change”), assuming your main database is called Account. Figures 1 and 2 show the basics for how to configure this SQL Agent Alert. You would also want to have the Alert notify your operators with an e-mail and page as you deem appropriate.

image

Figure 1: General tab for SQL Agent Alert

 

image

Figure 2: Response tab for SQL Agent Alert

 

Step 6: Create a second SQL Agent Alert job to detect manual database mirroring state changes for your “main” database. This needs to use a Windows Management Interface (WMI) query like this:

SELECT * FROM Database_Mirroring_State_Change WHERE DatabaseName = ‘MainDatabaseName’ AND State = 7

State = 7 means that you had a database mirroring state change for that database due to a manual failover. This will happen when you manually failover this “main” database. You will want to change the name of the database and the name of the SQL Server Agent Alert (to something like “Account Database Manual Mirroring Change”), assuming your main database is called Account.

So there you have it, a pretty simple way to “roll your own” Availability Group kind of functionality using database mirroring.

Posted in SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 | Tagged | 12 Comments

Microsoft DreamSpark Program

Back in 2008, Microsoft rolled out the DreamSpark program as a means to get Microsoft software design and development tools in the hands of students at no charge. It was initially only for university or college students, but it has been expanded to also cover high school students. Basically, this means that any high school, college student, or faculty member (in most major countries) can download copies of many Microsoft operating systems, servers, and development tools for free.  If you fall into one of those categories, it is pretty easy to get signed up and verified into the program, so you can get your hands on the software for free.

Some of the most valuable items are Visual Studio 2010 Professional, Windows Server 2008 R2 Standard, and SQL Server 2008 R2 Developer Edition. The Microsoft DreamSpark site has more details about the program.

Posted in Microsoft | Tagged | Leave a comment

SQL Server Database Mirroring Tips and Tricks, Part 2

If you ever find yourself having to setup database mirroring between different, untrusted Windows Domains, one of the most common ways to do it involves creating certificates on each instance, creating logins and users for those certificates, and copying the certificates back and forth between the instances. I will have a future post that walks you through all of the gory details of doing this. In the meantime, I thought this little collection of certificate and endpoint queries would be a useful tool for troubleshooting, and checking your progress as you setup database mirroring using certificates.

-- Some useful certificate and mirroring endpoint queries
-- Glenn Berry 
-- March 2012
-- https://sqlserverperformance.wordpress.com/
-- Twitter: GlennAlanBerry
  
-- Get symmetric key information (do you have a ##MS_DatabaseMasterKey##)?
SELECT @@SERVERNAME AS [ServerName], name AS [KeyName], principal_id, symmetric_key_id, 
key_length, key_algorithm, algorithm_desc, create_date, modify_date, [key_guid]
FROM sys.symmetric_keys; 
 
-- Get certificate information
SELECT @@SERVERNAME AS [ServerName], name AS [CertificateName], certificate_id, principal_id, 
pvt_key_encryption_type_desc, issuer_name, [subject], [expiry_date], [start_date]
FROM sys.certificates;
 
-- Get mirroring endpoint information
SELECT @@SERVERNAME AS [ServerName], name AS [EndpointName], endpoint_id, principal_id, protocol, 
protocol_desc, [type], type_desc, [state], state_desc, is_admin_endpoint, 
[role], role_desc, is_encryption_enabled, connection_auth, 
connection_auth_desc, certificate_id, encryption_algorithm, encryption_algorithm_desc
FROM sys.database_mirroring_endpoints;
 
-- Get more mirroring endpoint information
SELECT @@SERVERNAME AS [ServerName], dme.protocol_desc, dme.type_desc, dme.state_desc, dme.role_desc, 
te.port, te.ip_address, is_encryption_enabled, connection_auth_desc, certificate_id, encryption_algorithm, 
encryption_algorithm_desc
FROM sys.database_mirroring_endpoints AS dme
INNER JOIN sys.tcp_endpoints AS te
ON dme.endpoint_id = te.endpoint_id;
 
-- Get endpoints that are using certificates
SELECT @@SERVERNAME AS [ServerName], dme.name AS [EndpointName], c.name AS [cert_name], 
c.[start_date], c.[expiry_date] 
FROM sys.database_mirroring_endpoints AS dme 
INNER JOIN sys.certificates AS c 
ON dme.certificate_id = c.certificate_id; 
 
-- Get logins that have been granted permissions to endpoints that are using certificates
SELECT @@SERVERNAME AS [ServerName], sp.name AS [login_name], e.name AS [EndpointName], 
c.name AS [cert_name], c.[start_date], c.[expiry_date] 
FROM sys.server_permissions AS ssp 
INNER JOIN sys.endpoints AS e 
ON e.endpoint_id = ssp.major_id 
AND ssp.class = 105                                               -- endpoint class
INNER JOIN sys.server_principals AS sp 
ON sp.principal_id = ssp.grantee_principal_id 
INNER JOIN sys.database_principals AS dp 
ON sp.[sid] = dp.[sid] 
INNER JOIN sys.certificates AS c 
ON dp.principal_id = c.principal_id 
WHERE e.[type] = 4;                                               -- database mirroring
Posted in Microsoft, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 | Tagged | 1 Comment

Microsoft Releases SQL Server 2008 SP3 Cumulative Update 4

Microsoft has also released SQL Server 2008 SP3 Cumulative Update 4. This is Build 10.00.5775.00, and it has ten fixes listed in the public fix list. Remember, this Cumulative Update is only for SQL Server 2008 SP3. It will not work on other Service Pack levels of SQL Server 2008, and it will not work on SQL Server 2008 R2 (which is a newer major release of SQL Server).  This Cumulative Update was actually released on March 20, but the URL for the public KB article was not working reliably until later that day.

Also, keep in mind that Cumulative Updates are, as the name implies, cumulative. That means you could go from SQL Server 2008 SP3 RTM, directly to SQL Server 2008 SP3 CU4 without having to install any of the earlier Cumulative Update packages for Service Pack 3.

Posted in Microsoft, SQL Server 2008 | Tagged | Leave a comment

Microsoft Releases SQL Server 2008 SP2 Cumulative Update 9

Right on schedule, Microsoft has released SQL Server 2008 SP2 Cumulative Update 9. This is Build 10.00.4330.00, and it has seven fixes listed in the public fix list. Remember, this Cumulative Update is only for SQL Server 2008 SP2. It will not work on other Service Pack levels of SQL Server 2008, and it will not work on SQL Server 2008 R2 (which is a newer major release of SQL Server).

Also, keep in mind that Cumulative Updates are, as the name implies, cumulative. That means you could go from SQL Server 2008 SP2 RTM, directly to SQL Server 2008 SP2 CU9 without having to install any of the earlier Cumulative Update packages. If you are still on the SQL Server 2008 SP2 branch, I think you should be planning on moving to the SP3 branch sometime this year, before Microsoft retires the SP2 branch.

Posted in Microsoft, SQL Server 2008 | Tagged | Leave a comment

SQL Server Database Mirroring Tips and Tricks, Part 1

Even though SQL Server Database Mirroring is deprecated in SQL Server 2012, it is still a very useful HA/DR technique that should work perfectly well for at least two-three major versions of SQL Server after the newly released SQL Server 2012. Microsoft’s deprecation language actually says that “the following SQL Server Database Engine features are supported in the next version of SQL Server, but will be removed in a later version. The specific version of SQL Server has not been determined.”  Based on past experience, this probably means you have between five to eight years before database mirroring is not supported in a  yet to be determined later version of SQL Server. It will continue to work in all prior versions of SQL Server, just as you would expect. Having said all of this, I want to make it very clear that if you are upgrading to SQL Server 2012, you will be using Enterprise Edition, and your database servers are in the same Windows Domain, then AlwaysOn Availability Groups is a much more flexible and robust solution compared to database mirroring. You should definitely be looking at AlwaysOn as a replacement for database mirroring and log shipping in that scenario.

If you are going to be using SQL Server 2008 R2 or below for a while, then you should not be afraid to use database mirroring as a part of your HA/DR solution (if it makes sense on its own merits), even though it has been deprecated in SQL Server 2012! Really though, you should be designing your HA/DR strategy based on your Recovery Point Objective (RPO), Recovery Time Objective (RTO), and available budget and resources, rather than based on your favorite technology. Fellow SQL Server MVP Paul Randal wrote an excellent Microsoft whitepaper called “Proven SQL Server Architectures for High Availability and Disaster Recovery”, that you can download from here.  I highly recommend that you read it if you are planning and designing an HA/DR architecture.

Assuming that database mirroring is something that is going to be a part of your HA/DR solution for a while, how do you actually get it designed and implemented, and how do you manage it with a demanding, real-life workload?  I hope to give you some guidance on all of this over a series of blog posts on the subject. How you specifically setup database mirroring depends on your overall HA/DR architecture, and your RPO/RTO requirements. For example, if you are trying to get some HA benefit from database mirroring (by itself), then you pretty much have to use synchronous database mirroring with a witness instance, since that is the only way you can get automatic failover of your databases. If you are looking to use database mirroring between geographically dispersed sites as part of your DR solution, then you would be more likely to be looking at asynchronous database mirroring (which requires Enterprise Edition).

For the purposes of this first post, let us assume that you want to have a good HA story within a single data center to start with, so you decide to use synchronous database mirroring with a witness instance. Here are a dozen checklist items that you need to consider as you are designing and implementing your database mirroring infrastructure:

  1. The “principal instance” and the “mirror instance” should use identical hardware
  2. Your database servers should be configured using standard hardware redundancy techniques
  3. The “principal instance” and the “mirror instance” should use identical, but separate I/O subsystems
  4. Your drive letters and directory structure for your SQL Server data files and SQL Server log files should be identical
  5. You should be running the same version, edition, and build of SQL Server on both sides of the mirroring partnership
  6. For simplicity, all members of the mirroring partnership should be in the same Windows Domain
  7. All members of the mirroring partnership need to be able to ping each other, and they should be able to communicate on port 1433 and port 5022 (by default)
  8. The “principal instance” and the “mirror instance” should have Windows Instant File Initialization enabled
  9. You should get your VLF counts and log file autogrow sizes under control for all of the user databases that you want to mirror
  10. All of the user databases that you want to mirror have to use the Full recovery model at all times
  11. Make sure to get your index maintenance situation in good shape before you mirror a database
  12. Use backup compression for your full and log backups

 

Here is a little bit of explanation of these guidelines:

The “principal instance” and the “mirror instance” should use identical hardware

The mirror instance could potentially be running your entire workload for an extended period in the event of a failover due to hardware failure, OS failure, etc. More importantly, if the mirror instance is severely underpowered compared to the principal instance, it can slow down your synchronous mirroring commits (although the main bottleneck is the write performance of the transaction log file drive on the Mirror).

Your database servers should be configured using standard hardware redundancy techniques

Regardless of what else you are doing in terms of HA/DR efforts, you should make sure to do the “standard” hardware HA techniques on each individual database server. These include things like installing the OS on a RAID 1 array with a dedicated hardware RAID controller, having dual power supplies plugged into different circuits, having multiple network connections plugged into different switches, having redundant paths for your storage, using RAID 10 for your storage, etc. This reduces  the chances of any single failure bringing down a server or causing data loss.

The “principal instance” and the “mirror instance” should use identical, but separate I/O subsystems

If you want or need to use synchronous mirroring, you need to make sure that the storage subsystem on the mirror instance can keep up with the I/O demands that it will see as a result of database mirroring. This is particularly important for the logical drive where your transaction log file is on the mirror instance. Having an inadequate I/O subsystem on the mirror will slow down all of your write operations on the principal server. I call that “dragging around a boat anchor”, and it is no fun at all! Make sure you don’t have the principal and mirror instances using the same SAN for both sides!  No matter what SAN vendors tell you, SANs can and do fail. If you are in a SAN shop, you really need both sides of the mirroring partnership to use a completely different SAN (which may be quite expensive). Personally, I have had very good results using high performance DAS on both sides of the mirroring partnership.

Your drive letters and directory structure for your SQL Server data files and SQL Server log files should be identical

While it is possible to restore a database to initialize database mirroring using the MOVE option, it is not a good idea. Where this will be a problem is if you decide to add a new database file to the Principal some time in the future. Since all DDL commands on the Principal get replayed on the Mirror, if you create a new file in a mirrored database using a drive letter or path that does not exist on the Mirror, your database will go into a suspended status until you can duplicate the path on the Mirror. You really should have a standardized drive letter and directory structure for all of your SQL Server instances. For example, I like to use L:\SQLLogs for log files, P:\SQLData for data files, T:\TempDB for TempDB files, etc.

You should be running the same version, edition, and build of SQL Server on both sides of the mirroring partnership

While you can mirror from older versions to newer versions (and then make a one way, one time failover from old to new to upgrade), you really should be on the same major version, service pack, and build of SQL Server on both sides of the database mirror. Both sides of the mirror have to be on the same edition of SQL Server. While the Witness instance can be running Express Edition, I like to also use that instance for other things, like a Remote Distributor for replication, a central management server, etc., which means you cannot use Express Edition for the Witness instance.

For simplicity, all members of the mirroring partnership should be in the same Windows Domain

It is possible to set up database mirroring across different domains using certificates, but that is fairly complicated. Using different domains also makes it nearly impossible to do something like running a database backup from the Principal directly to a file share on the Mirror (if you are using a domain account for the SQL Server Service account on both sides of untrusted domains).

All members of the mirroring partnership need to be able to ping each other, and they should be able to communicate on port 1433 and port 5022 (by default)

Database mirroring uses pings to check network connectivity between the members of the mirroring partnership. It also uses TCP port 5022 for the database mirroring endpoint (although you can use a different port if you want to). If these ports are not open between the servers, you are not going to be able to setup a mirroring partnership, end of story. I would also say, no matter what your network or operations staff tells you, you should trust but verify!  You can create a new, empty database on your Principal, and then try to mirror it to your Mirror instance. This is a lot quicker and easier than going though the work to mirror a large production database only to find out that you cannot do it because a port is blocked.

The “principal instance” and the “mirror instance” should have Windows Instant File Initialization enabled

This allows the required full database restore to initialize your mirror to go much, much faster. It also lets you grow data files much more quickly. This only works for SQL Server data files, and it is done by granting the “Perform volume maintenance tasks” right to the SQL Server Service Account on the instance, using the local Group Policy Editor. You will have to restart the SQL Server Service for this to go into effect.

You should get your VLF counts and log file autogrow sizes under control for all of the user databases that you want to mirror

Having a high VLF count in your transaction log file will slow down write performance and make database restores take a lot more time. If your VLF count is more than a couple of hundred, I would go through the easy steps to take care of that before you mirror your database. You also want to set your autogrowth increment for the log file to an appropriate size to keep your VLF counts from surging in the future.

All of the user databases that you want to mirror have to use the Full recovery model at all times

This means no switching to bulk-logged model for data loads, and it means you will have to be running regular transaction log backups based on your RPO goals, your write transaction rates, and the size of your transaction log file.

Make sure to get your index maintenance situation in good shape before you mirror a database

Index maintenance, whether it is a reorganization or a rebuild, will generate lots of transaction log activity that will have to be sent over to the mirror. This is particularly sensitive with synchronous database mirroring. It is just a good idea to try to get your database in fighting shape before you start mirroring it. You will also want to avoid “sledgehammer” index maintenance, where you rebuild all of your indexes on a regular basis, regardless of whether they actually need it.

Use backup compression for your full and log backups

This makes your backups and restores go faster (typically two-three times faster), and also makes the backup files much smaller, which makes them easier to copy across the network. This is very important when you are trying to initialize a database mirror of a large, write intensive database. It can save you many hours of effort and waiting!

 

So that is it for the first post in this series. More detailed information on some of the gritty details will be coming in future posts.

Posted in SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 | Tagged | 7 Comments

SQL Server Database Mirroring (Not Dead Yet)

SQL Server Database Mirroring is a high availability and disaster recovery feature that was added to the product with SQL Server 2005, and enabled without a trace flag in SQL Server 2005 SP1. It was enhanced in SQL Server 2008 with features like log stream compression and automatic page repair, and it is still fully supported in SQL Server 2012, even though SQL Server 2012 has the new AlwaysOn Availability Groups feature. I have had real life experience with database mirroring in mission critical environments for nearly six years. My experiences have been mostly good over the years, and DBM has saved my bacon on more than one occasion. It is far from perfect though, and I have learned a few tips and tricks over the years, through painful experience.

If you have the opportunity to upgrade to SQL Server 2012, you will want to very seriously seriously consider using AlwaysOn instead of database mirroring because of its many advantages. AlwaysOn is a much more flexible and powerful feature than database mirroring, that you can take advantage of with SQL Server 2012. If you are going to be using older versions of SQL Server for a while, database mirroring is still a very valuable tool as part of your overall HA/DR strategy. Keep in mind that database mirroring works at the database level, not the instance level. You have to mirror each user database separately, and you cannot mirror system databases. Each database can only be mirrored to one location, and the mirror copy is not accessible to your applications unless you take database snapshots of the mirror for read-only usage (which is pretty hard to manage in real life).  Your mirrored databases must use the Full recovery model at all times, and you have to be careful with DML and DDL operations that generate lots of transaction log activity (such as index builds or index maintenance) so that you don’t create a huge send queue on the principal or redo queue on the mirror.

You also have to take care of your SQL Server logins and SQL Server Agent jobs on both sides of the mirroring partnership. Finally, you have to keep in mind that there is no guarantee (out of the box) that all of your mirrored databases will failover together in the event of an automatic failover (unless the SQL Server Service is stopped on the principal). I have come up with some techniques over the years that help make database mirroring a somewhat better solution than it is straight out of the box, which I will be sharing in future posts.

Synchronous database mirroring (also known as high-safety mode) uses a two phase commit model for all write operations. A write operation is first written to the transaction log file on the principal copy of the database. Then the information for that transaction is read from the transaction log file on the principal, compressed (in SQL Server 2008 and above), and then sent over the network to the redo queue on the mirror server. Then it is written to the transaction log file on the mirror copy of the database. Finally, an acknowledgement of this is sent to the application that generated the write operation in the first place. All of this is necessary to guarantee that the two copies of the database are always 100% synchronized, and that no data loss is possible in the event of a database failover. It is also necessary to enable automatic failover, which also requires a separate witness instance.

Asynchronous  database mirroring (also known as high-performance mode) simply records all write operations to the transaction log of the principal copy of the database, and acknowledges the completion to the application that generated the write operation. Then, immediately afterwards, the information for that transaction is read from the transaction log file on the principal, compressed (in SQL Server 2008 and above), and then sent over the network to the redo queue on the mirror server. Then it is written to the transaction log file on the mirror copy of the database. In most cases (unless you are having network problems or I/O problems on the mirror), the databases will always be synchronized, but there is no guarantee of this. It is possible to have a send queue on the principal or a redo queue on mirror that could hold transactions that have been committed on the principal, but not yet committed on the mirror.  You must have SQL Server Enterprise Edition in order to use asynchronous database mirroring.

Because of the basic design and differences in how they work, it is impossible for synchronous database mirroring to be 100% as fast as asynchronous database mirroring for write operations. The performance penalty should only be a few milliseconds, depending on things like the network latency between the principal and mirror servers, and I/O latency on the log drive of the mirror server. With synchronous database mirroring, the geographical distance between the principal and mirror will affect your network latency. Read operation performance is not affected by database mirroring.

At any rate, I will be talking more about database mirroring in the near future!

Posted in Microsoft, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 | Tagged | 6 Comments

Intel Xeon E5-2600 Series Processors Released

Yesterday, Intel finally released the much anticipated Xeon E5-2600 family of processors, also known as Sandy Bridge-EP. This is a Tock release for Intel (which means a new microarchitecture) that still uses the same 32nm manufacturing process as the previous Xeon 5600 series (Westmere-EP). They will use the new Romley server platform for single and dual socket servers, replacing the existing Tylersburg platform that the Xeon 5600 series uses. While they were at it, they also released the uniprocessor Xeon E5-1600 series (which is basically the same as the Core i7 Sandy Bridge-E line released a few months ago).

A a database professional, you should be most interested in the dual socket Xeon E5-2600 family, which has models with 2, 4, 6, and 8 CPU cores (plus hyper-threading). If you are considering upgrading to SQL Server 2012 (which also went RTM yesterday), you would not want a dual-core version, since the new core based licensing model for SQL Server 2012 Enterprise Edition requires you to pay for a minimum of four cores per processor socket. If you need to be particularly cost sensitive about your SQL Server 2012 licensing costs, but still want the best performance possible, you should be looking at the Xeon E5-2643, which has four-cores (plus hyperthreading), a 3.3GHz base clock speed, and a 10MB L3 cache.

If you want the most scalability, regardless of the SQL Server 2012 license costs, you should be looking at the Xeon E5-2690, which has eight cores (plus hyperthreading), a 2.9GHz base clock speed (with turbo boost to 3.8GHz), and a 20MB L3 cache. If your server platform offers it, you also might consider the Xeon E5-2687W, which has a 150W TDP and a base clock speed of 3.1GHz, but is otherwise identical to the E5-2690.

As usual, Anandtech has a good, early review, complete with some SQL Server 2008 R2 benchmark results. They also include SQL Server 2008 R2 results comparing performance under the Windows Balanced and High Performance Power Plans. Tom’s Hardware has another review, that is more focused on high-end workstation performance, since you can buy two socket workstations with Sandy Bridge-EP processors.

Of course in order to use this new processor family, you are going to need a new server platform that supports it, so the Tier 1 server vendors have all released new server models for the Sandy Bridge-EP. For example, Dell has the 12th generation PowerEdge R720 and R720xd models, while HP has the DL380p Gen 8 line.  I am pretty excited by the specifications available in these new models. For example, the Dell PowerEdge R720xd has 24 memory slots (that can support 32GB DIMMs if you have deep enough pockets), 26 2.5 inch internal drive bays, and six PCI-E 3.0 slots (two x16, and four x8). You can also get 10Gb Ethernet support with a daughtercard.  Honestly, if you can’t build a very fast two socket SQL Server database server with one of these, you are not really trying!

Posted in Computer Hardware, Processors, SQL Server 2012 | Tagged , | Leave a comment

CPU-Z 1.60 Released

Pretty much right on schedule, Frank Delattre has released CPU-Z 1.60, which has support for some new and upcoming processors from both Intel and AMD, including the Ivy Bridge and Trinity lines.

image

Here you can see the CPU tab report for my Intel Core i5-2410M processor in my little 3.2lb Toshiba Portege R835-P55X. As I have said many times before, CPU-Z is a great little tool for quickly finding most of the gory details about your processor(s) and memory, whether it is in a laptop or in a database server.

Posted in Computer Hardware, Processors | Tagged | Leave a comment

What I Want For My Birthday

Dell has teased us with some images of their upcoming 12th Generation servers (that will support the Intel Sandy Bridge-EP processor). The PowerEdge R720xd is shown below. I want one of these…

Some more detailed information about these new servers is listed here.

Posted in Computer Hardware, Processors | Tagged | Leave a comment