首先,我不是数据库专家..所以我不确定我的术语或其他任何内容是否正确,但如果你能忍受我,我希望你能得到这个想法。
我有一个SQL Azure数据库,它为社交网络提供支持。每天都有数以百万计的交易,从非常简单的交易到复杂的SELECTS,根据距离等对成千上万的用户进行排序。
我的用户数量每天增长,我知道(相信)在某些时候我需要实现分片,或者使用SQL Azure Federation来保持我的应用程序正常运行,因为1个SQL Azure资源有限。但我的问题是,我怎么知道我什么时候需要这样做?
我知道当我开始使用太多资源时,我的查询会受到限制......但是据我所知,这可能会在明天开始,或者在几年后开始。
如果我知道我达到了80%的允许范围,那么我知道我需要优先考虑解决方案以帮助我扩展规模,但如果我只使用10%那么我知道我可以把它放在后面,然后再处理它。
我找不到任何方式,甚至没有提及如何衡量这一点?
有什么建议吗?
谢谢,
史蒂芬
答案 0 :(得分:1)
我不知道有任何内置的方法来衡量这一点。如果有人那么我会非常有兴趣听到它。
然而,Microsoft AppFabric CAT最佳实践团队有一个很棒的库,它是一个瞬态故障处理框架。 See here
这会做很多事情,包括处理重试逻辑以打开连接和运行查询。您可以使用它,但在SQL Azure受到限制时会稍微扩展它以进行记录。
这可能不会给你提供你想要的警告,但会在你接近极限时帮助你知道。如果您将此方法与某种应用程序/数据库压力测试结合使用,那么您可以在实际使用之前找到限制。
根据您提供的数字,我现在肯定会开始查看分片。
答案 1 :(得分:1)
如果你没有这样做,我建议你阅读下面的文章;它包含有关SQL Azure限制条件的基本原因的有趣信息。了解监视的限制因素可以帮助您找出数据库被限制的原因。
Technet Article: SQL Azure Connection Management
谢谢你顺便提一下Enzo图书馆(免责声明:我写的)!
然而,了解限制的原因将是我的第一个建议,因为根据原因,分片可能会或可能不会帮助您。例如,如果thottling的问题是过多的锁定,则分片可能确实会减少对单个数据库的锁定,但它可能会在以后再次出现并咬你。
谢谢 的Herve
答案 2 :(得分:0)
打击限制的最佳做法1)尽可能缩短查询次数2)批量运行工作负载3)采用重试机制。
我还想向您介绍几种资源。 1)sql azure限制和解码原因码:http://msdn.microsoft.com/en-us/library/ff394106.aspx#throttling 2)http://geekswithblogs.net/hroggero/archive/2011/05/26/cloud-lesson-learned-exponential-backoff.aspx