sql-server - 对 SQL Server 实例的负载平衡查询

标签 sql-server azure

我的应用程序正在查询一个只读 SQL Server 数据库。该数据库托管在 SQL Server Express 上,该数据库在 Azure 虚拟机中运行。执行的所有查询都非常相似。

现在我想在那里添加更多虚拟机并在它们之间进行负载平衡。目标是提高性能和高可用性(如果一台服务器出现故障,我希望将查询发送到剩余的服务器)。

进行负载平衡的正确方法是什么?我的应用程序是一个 .NET 应用程序。

我可以将虚拟机配置为云服务。在这种情况下,Azure 可以在 TCP 连接级别上在它们之间进行负载平衡。我能想到的另一个选择是在应用程序级别执行此操作,以循环方式选择要连接的服务器。

最佳答案

SQL Express性能高可用性 这两个词不能放在一起。同样,您将为更高 SQL 版本已经提供的功能重新发明轮子。

就性能而言,SQL Express 的内存限制为 1GB,这个内存很小。 SQL 性能的第一条规则是将数据保留在内存中,并避免写入磁盘。如果您无法在一个 SQL 实例中做到这一点,那么拥有多个实例可能不会充分改善情况,只会延迟最终的磁盘变动。您需要使用更高的版本,这会增加内存限制,更重要的是,包括其他一些有助于横向扩展的功能(例如复制、可用性组、日志传送...)

如果您的数据量很小且适合 1GB 内存,则只需在每个应用服务器上安装 SQL Express 即可。您声明您的数据库是只读的,因此您必须开发自己的方法来将所述数据库(例如脚本)部署到多个实例。将 SQL Express 实例保留在每个应用服务器本地,您可以完全跳过 TCP,并通过使用共享内存与 SQL 进行通信来获得一些效率提升,并且您对高可用性的需求有点没有实际意义。您拥有一对一的应用程序到 SQL 实例架构。

现在你的问题变成了前端负载平衡。如果您的应用程序确实是无状态的,则使用 DNS 循环,或者使用粘性/ session 感知代理负载均衡器。

关于sql-server - 对 SQL Server 实例的负载平衡查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511504/

相关文章:

python - 是否可以在 flask 应用程序中进行异步数据库调用?

node.js - Azure Function 将 SQL 服务器与浏览器中的空白页连接

azure - 在 Azure 数据工厂中移动(而不是复制)数据

python - 如何使用Azure定时器功能来运行python脚本?

sql - 使用 Sequelize 连接到本地 SQL Server

SQL Server - READPAST、UPDLOCK 更新方法?

sql-server - "Null"值在 SQL Server 中占用多少大小

.net - Cosmos SDK v3 不记录文档创建

azure - Docker-Compose/Kubernetes Yaml 文件上的 CentOS 镜像问题

sql-server - 如何使用 MSSQL 更新多个 XML 字段?