如何扩展 SQL Server 2008(或 2012)?基本上,我知道有两种选择:
放大:
如果 CPU 受限,我可以清楚地看到从 1 个 CPU 核心到 2 到 4 个。或者如果 RAM 使用量猛增,只需添加更多 RAM。假设没有应用程序级别的更改,SQL Server 2008/2012 是否真的可以弥补不足并以这种方式扩展?为了尽量减少猜测,假设我没有做一些愚蠢的事情,比如消耗 CPU 周期、进行交叉连接等。
向外扩展:
目前还不清楚向外扩展将如何工作。我的意思是,如果我在第一个 SQL 服务器旁边添加了另一个 SQL 服务器,查询如何知道要在哪个服务器上运行?前面是否有一些负载平衡器(它是否随 SQL Server 软件提供?)?它是否需要更改应用程序级别才能向外扩展?或者我是否必须对数据进行分片并拥有根据数据分片键调用正确数据库服务器的自定义代码?
希望有经验的人提供意见。
SQL Server 不会像这样向外扩展。它扩大规模。
有 3 个方面可以做到这一点,受版本限制
当然,使用更高版本,例如 Enterprise
SQL Server 不分片,任何此类解决方案(您可以研究 MySQL 分片解决方案)都会增加系统的复杂性和开销。
使用 RAM、SSD、更多磁盘卷来传播 IO、用于 tempdb 和日志的单独驱动器等扩展一台服务器(+ 备用节点/镜像)通常非常简单
此外,如果您发现 SQL Server 受 CPU 限制,那么它通常是糟糕的设计和/或索引和/或编写不佳的查询,除非您有大量负载。
就像 gbn 所说,SQL 并没有像其他 RDBM 那样真正横向扩展。但是,许多人忽略了横向扩展的一个方面,那就是始终有一个单独的系统用于报告目的。
永远不要让报告针对生产运行。在另一台服务器上为自己构建一个报告数据库。
理想情况下,您的报告系统将仅包含报告所需的数据,并且其结构和优化方式与您的生产系统不同。
数据将根据需要输入到报告系统中(即每小时从生产、每日馈送等中进行的涓涓更新)。
一种快速而肮脏(且效率极低)的方法是在另一台服务器上简单地拥有生产数据库的完整副本。该副本可以通过完整备份、事务日志传送、镜像(带快照)、复制等来维护。
但是我不推荐这种方法。完全备份和恢复需要时间,尤其是在较大的数据库上。复制是复杂且有问题的。日志传送为您提供只读数据库。使用快照进行镜像可能是一个很好的答案,但您仍然会遇到未针对报告目的进行优化的生产模式。
一个单独的报告系统是要走的路。
不同版本的SQL Server在它们要使用的 CPU 和内存方面有不同的限制。但除此之外,答案是肯定的——如果有空闲的 CPU 周期或内存页可用,服务器通常会在需要时使用它们,除非另有配置。
基本上,是的。当您需要避免锁争用时,通常会进行“横向扩展”。如果您有大量锁定的长时间运行的查询,您可能希望将这些查询与“实时”交互式查询或由用户操作某种界面并等待及时响应启动的查询更新周期分开。显然,解决这个问题需要更改应用程序(或至少更改中间件,如果您有 3 层设计)。