通过ARM模板部署PostgreSQL因配置变更过多失败求解决方案
解决ARM模板部署PostgreSQL Flexible Server配置时的"服务器忙"报错
当通过ARM模板批量设置数十项PostgreSQL配置时,默认的并行部署会导致服务器同时接收多个配置变更请求,触发<server> is busy with another operation错误。以下是无需切换到脚本即可解决问题的方案:
核心解决思路:串行化配置部署
ARM模板默认会并行部署同类型资源(如多个Microsoft.DBforPostgreSQL/flexibleServers/configurations),你需要通过链式依赖让配置项依次执行,确保前一个配置完成后再启动下一个。
修改示例
假设你有两个配置项,调整后的模板结构如下:
// 第一个配置项:archive_mode { "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations", "apiVersion": "2023-06-01-preview", "name": "[concat(variables('postgresdb_name'), '/archive_mode')]", "dependsOn": [ "[resourceId('Microsoft.DBforPostgreSQL/flexibleServers', variables('postgresdb_name'))]" ], "properties": { "value": "always", "source": "user-override" } }, // 第二个配置项:shared_buffers,依赖前一个配置完成 { "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations", "apiVersion": "2023-06-01-preview", "name": "[concat(variables('postgresdb_name'), '/shared_buffers')]", "dependsOn": [ "[resourceId('Microsoft.DBforPostgreSQL/flexibleServers', variables('postgresdb_name'))]", "[resourceId('Microsoft.DBforPostgreSQL/flexibleServers/configurations', variables('postgresdb_name'), 'archive_mode')]" ], "properties": { "value": "1GB", "source": "user-override" } }
批量配置的处理方式
对于33项配置,你需要为每个后续的配置项添加对前一个配置的依赖:
- 第1个配置仅依赖PostgreSQL服务器
- 第2个配置依赖服务器 + 第1个配置
- 第3个配置依赖服务器 + 第2个配置
- ...以此类推
额外优化建议
- 区分静态与动态配置:部分配置(如
max_connections)无需重启服务器,而有些(如archive_mode)会触发重启。将无需重启的配置放在前面,需要重启的放在后面,减少重启次数。 - 使用稳定API版本:考虑将
apiVersion切换为正式版(如2023-12-01),预览版可能存在未完善的并发处理逻辑。
内容的提问来源于stack exchange,提问作者thmswlkr
相关产品推荐
相关产品推荐

