性能Azure弹性池数据库

时间:2017-01-20 11:00:33

标签: sql-server database azure azure-elastic-scale

我们遇到了Azure hits database cpu limits too easily中提到的类似问题。 我们还使用Azure Elastic池,并为每个客户创建一个新数据库。我们首先使用EF6-code来处理SQL内容。

使用网络前端,用户可以创建客户。他们每周都会这样做几次,有时候(并不总是,但肯定是每周一次)数据库只是部分创建,我们得到Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement错误。 当我们删除此客户端/数据库并再次创建它工作正常。 当然这很烦人。我们现在正在努力捕获此错误,删除数据库并重新启动代码中的创建。这有谁有类似的经验,希望是更好的解决方案?

同时创建数据库需要很长时间:3-5分钟。每个数据库只有18个表。我们可以加快速度吗?

工作流程的下一步是解析用户上传的XML文件。 我们使用EF6填充模型并将其保存到数据库中。这真的很慢。 XML文件包含我们需要填写几个表(大约15个表)的员工数据。例如,我们有一个包含4416名员工的9.7MB XML文件和' .save()'步骤大约需要12分钟。考虑到客户每年大约有25个XML文件,并且用户一次上传5年,这种节省需要的时间太长。

我们已经查看了代码并了解了EF6的界限,我们认为我们无法对其进行更优化。我们现在正在查看Azure订阅的配置,但文档很吓人,我们无法弄清楚要改进哪些内容以获得更好的性能。

非常感谢任何指导。

2 个答案:

答案 0 :(得分:0)

我在Microsoft Azure上交叉发布此问题> Azure SQL数据库论坛:https://social.msdn.microsoft.com/Forums/en-US/b7c7ad0a-0be4-4b15-8ae6-494181ec60b1/how-to-increase-max-number-of-databases-allowed-without-increasing-pricetier?forum=ssdsgetstarted 答案是:

  

您无法将部分(仅限某些资源)扩展到其他层。您无法仅扩展最大数据库数。

这不是我希望的答案。

答案 1 :(得分:0)

我有一个云应用程序,它非常类似地使用新的数据库分片创建新的客户实例。我发现创建这些Azure数据库的代码必须非常容错。这是我的所作所为:

  1. 创建数据库时,请使用至少5分钟的超时超时。返回需要很长时间。

  2. 等待更长时间,因为即使脚本运行并且执行返回到您的应用程序,数据库仍然无法使用。我有一个简单的查询,我每隔10秒对数据库运行一次。首先,查询在运行时抛出异常;我捕获异常以防止错误冒泡。一段时间后,查询将成功运行,您知道数据库已准备好接收请求。如果Azure从未成功创建表,我会在50次尝试之后停止以阻止无限循环。

  3. 现在,对于像这样的常规程序流使用try / catches并且反复命中资源通常是不好的做法,但是,这是我发现的唯一方法100%的时间用于此问题