目前我有一个正在经历高CPU使用率的SQL服务器。 有大量的读写不断发生。
该机器是一个双至强E5645 @ 2.4GHz与48GB的RAM和使用SSD驱动器在RAID 5。
我想加强我们的SQL实例的马力。 我们正在考虑在3GHz +范围内使用Xeon的4个CPU服务器。
不过,我们正在争论使用Windows群集。 然后设置群集在1台机器上运行,并根据工作负载需求添加更多机器。
这是一个可行的解决scheme? 或者只有一台机器就够了? 我应该不打扰2008年的集群吗?
以下是使用查询的服务器的一些数据。
SELECT DB_NAME(fs.database_id)AS [数据库名称],mf.physical_name,io_stall_read_ms,num_of_reads, CAST(io_stall_read_ms /(1.0 + num_of_reads)AS NUMERIC(10,1))AS [avg_read_stall_ms],io_stall_write_ms, CAST(io_stall_write_ms /(1.0 + num_of_writes)AS NUMERIC(10,1))AS [avg_write_stall_ms], io_stall_read_ms + io_stall_write_ms AS [io_stalls],num_of_reads + num_of_writes AS [total_io], CAST((io_stall_read_ms + io_stall_write_ms)/(1.0 + num_of_reads + num_of_writes)AS NUMERIC(10,1)) AS [avg_io_stall_ms] FROM sys.dm_io_virtual_file_stats(null,null)AS fs INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id AND fs。[file_id] = mf。[file_id] ORDER BY avg_io_stall_ms DESC OPTION(RECOMPILE);
数据库名称io_stall_read_ms num_of_reads avg_read_stall_ms io_stall_write_ms num_of_writes avg_write_stall_ms io_stalls total_io avg_io_stall_ms
RViewWf 19751827778 232140460 85.1 7254139 1444051 5.0 19759081917 233584511 84.6
大家build议什么?
Windows群集的全名是Windows故障转移群集。 这不是主动/主动数据库实例。 这听起来不像是你在找什么。 MSSQL服务器不会做分片或任何东西。 它可以“扩大”而不是“扩大”可言。
Windows故障转移群集为群集资源(服务,应用程序,虚拟机)提供了高可用性。 它不提供工作量“共享”。
而不是将多个磁盘绑定到系统本身的条带化RAID(使用单个控制器,这是您的perf perf命中的地方),最好使用SANconfiguration,以便您的磁盘由冗余控制器优化数据传输。 当然,SAN解决scheme可能会很昂贵,所以它要依赖于您要pipe理的数据量(以及它的价值)。
大多数SAN可以设置多种types的RAIDarrays。 根据您想要的冗余程度,您可以使用RAID 0 + 1(两个无奇偶校验,相互镜像的条形arrays)运行,以便在驱动器出现故障时不会影响奇偶性能。 或者您可以设置RAID 5 + 1(带或不带热备份)以添加额外的冗余层。