在使用 Azure 的时候发现一个有趣的现象。
每天早上同事们开始开发工作的时候,不管是谁,第一次运行程序的时候都会出现数据库连接错误的提示。
2020-10-30 09:26:39.890 DEBUG 9398 --- [nio-8080-exec-2] com.zaxxer.hikari.pool.HikariPool : HikariPool-Azure - Cannot acquire connection from data source
com.microsoft.sqlserver.jdbc.SQLServerException: Database 'sco' on server 'sco-db' is not currently available. Please retry the connection later. If the problem persists, contact customer support, and provide them the session tracing ID of '{C7F5F05C-76C3-41A9-8823-977205A60F4B}'. ClientConnectionId:1cb47252-b3f2-4b69-af0e-7e44994e21b6
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
随后随时连接都不会有问题了。
查看过连接池的配置,也是正常的。
原因和解决
经过一段时间的分析后发现,在日志中,提示有重新启动数据库:
在查看日志的时候,也出现了一次连接失败的提示。
然后再出现连接失败的提示后,显示的所有连接都是成功的。
由此可以判断,在 Azure 数据库中是否有一个没有连接将会将数据库设置到休眠状况的配置。
根据官方的链接中有关文档的提示:https://docs.microsoft.com/en-us/azure/azure-sql/database/serverless-tier-overview#autoresuming
确实有一个休眠和恢复的配置。
你也可以取消这个功能。你可以通过下面的路径进行操作,选择 Configure,然后选择 Auto-Pause Delay。
你可以设置休眠时间,或者直接取消。
如果你的条件允许,或者预算比较宽裕的话,建议就直接取消这个功能。