更改服务层或性能级别以及数据库停机时间

Dav*_*New 9 azure azure-sql-database

我已经确定我们可能需要很快扩展到下一个服务层(标准到高级).

对于其他感兴趣的人,本文为分析SQL数据库提供了很好的指导.

我的问题: 在扩展到不同的服务层或性能级别时是否有任何停机时间?

Bil*_*son 6

取决于您对"停机时间"的定义.我多次改变了性能水平.从标准到高级,我们遇到了很多错误.以下是一些示例:

System.Data.SqlClient.SqlException(0x80131904):从服务器接收结果时发生传输级错误.(提供程序:TCP提供程序,错误:0 - 远程主机强制关闭现有连接.)---> System.ComponentModel.Win32Exception(0x80004005):远程主机强制关闭现有连接.

System.Data.SqlClient.SqlException(0x80131904):ALTER DATABASE命令正在进行中.请在登录数据库'...'之前至少等待五分钟,以便完成命令.在命令完成之前,某些系统目录可能已过期.如果您更改了数据库名称,请使用新数据库名称以用于将来的活动.

System.Data.SqlClient.SqlException(0x80131904):服务处理您的请求时遇到错误.请再试一次.错误代码40174.当前命令发生严重错误.结果(如果有的话)应该被丢弃.

System.Data.DataException:无法提交事务.底层连接未打开或尚未初始化.

我的建议是尽可能在非工作时间或维护期间更改性能等级.


Cra*_*aig 5

更换层时没有停机时间,我已经完成了几次.虽然改变不是立竿见影的,但确实需要至少5分钟,但在此期间它将正常运作.


Nic*_*eod 5

如上所述,这取决于您对停机时间的定义.当事务可以回滚时,层会有一个短暂的时间段.

从本页的"向上扩展或向下扩展..."部分开始:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-service-tiers

请注意,更改数据库的服务层和/或性能级别会在新的性能级别创建原始数据库的副本,然后将连接切换到副本.在此过程中没有数据丢失,但在我们切换到副本的短暂时间内,与数据库的连接被禁用,因此可以回滚一些正在进行的事务.此窗口有所不同,但平均不到4秒,超过99%的情况下不到30秒.很少,特别是如果在禁用连接时飞行中有大量交易,则此窗口可能会更长.

由于"正在进行中的事务"通常是指在连接断开时运行的事务,因此似乎在事务中断时可能会断开任一连接,或者,跨多个连接操作的事务可能会失败并在连接中被回滚在切换期间被拒绝.如果是后者,则在切换期间可能不会经常影响简单事务.如果是前者,那么繁忙的数据库几乎肯定会看到一些影响.