目前我有一个 SQL 服务器,它的 CPU 使用率很高。有大量的读写操作持续发生。
该机器是双 Xeon E5645 @2.4GHz,配备 48GB 内存并在 raid 5 中使用 SSD 驱动器。
我想增强我们的 sql 实例的性能。我们正在考虑购买一台 4 CPU 服务器,其中配备 3GHz 以上的 Xeon 处理器。
然而,我们正在讨论是否使用 Windows 集群。然后只需设置集群在 1 台机器上运行,并根据工作负载的需要添加更多机器。
这是一个可行的解决方案吗?还是说只要一台机器就够了?我是不是应该不用 2008 集群了?
这是使用查询从服务器获取的一些数据。
选择 DB_NAME(fs.database_id) 作为 [数据库名称]、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, num_of_writes,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 作为 [io_stalls],num_of_reads + num_of_writes 作为 [total_io], CAST((io_stall_read_ms + io_stall_write_ms)/(1.0 + num_of_reads + num_of_writes) AS NUMERIC(10,1)) AS [平均 io 停顿毫秒] 来自 sys.dm_io_virtual_file_stats(null,null) 作为 fs 内连接 sys.master_files AS mf ON fs.数据库ID = mf.数据库ID 并且 fs.[文件 ID] = mf.[文件 ID] 按 avg_io_stall_ms DESC 选项排序(重新编译);
数据库名称 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
大家有什么建议?
答案1
Windows Clustering 的全名是 Windows Failover Clustering。它不是主动/主动数据库实例。听起来它不是你要找的东西。MSSQL 服务器不做分片或任何类似的事情。可以说它是“向上扩展”而不是“向外扩展”。
答案2
Windows 故障转移群集为群集资源(服务、应用程序、虚拟机)提供高可用性。它不提供工作负载“共享”。
答案3
与其将多个磁盘绑定到系统本身的条带 RAID(使用单个控制器,这是性能下降的地方),不如使用 SAN 布置,这样您的磁盘将由针对数据传输进行了优化的冗余控制器运行。当然,SAN 解决方案可能很昂贵,因此这取决于您要管理的数据量(以及数据的价值)。
大多数 SAN 可以设置多种类型的 RAID 阵列。根据您想要的冗余程度,您可以使用 RAID 0+1(两个没有奇偶校验的条带阵列,彼此镜像),这样如果驱动器发生故障,您就不会受到奇偶校验性能的影响。或者您可以设置 RAID 5+1(带或不带热备用)以添加额外的冗余层。