我正在设置一个在Windows Azure上运行的系统,对于该系统,我预计会有大量数据和高流量。为了处理它,我正在设计一个联邦数据库。我对应用程序本身在需要时拆分(或删除)联邦数据库很感兴趣。触发这些操作的原因有2个: 1)数据库的大小正在达到Windows Azure中允许的限制,2)服务器中的流量太高,拆分操作将提高性能,从而保持较低的响应时间(运行速度较快)。(逆操作基于类似的推理)。
我的问题是:我如何以编程方式检测这两个条件?
发布于 2012-03-28 17:40:21
您可以使用Sql Azure Dynamic Management Views以编程方式监视Sql Azure数据库。请注意,您不能一次监视整个联邦数据库,而是监视它的每个成员。
使用动态管理视图检查与大小相关的条件1)应该是直接的。检测与流量/性能相关的条件2)比较困难,因为您首先需要确定有意义的确切指标及其阈值。
要记住的一件非常重要的事情是,拆分和删除操作的行为非常不同。SPLIT是一种在线操作(它不涉及任何停机时间),通过该操作将分区成员划分为两个数据库。数据将自动在这两者之间拆分。此行为意味着拆分可能确实是从自动扩展过程中触发的。
然而,下降的情况却截然不同。当删除联盟成员时,Sql Azure会将其键值范围移动到较低或较高的邻居联盟成员,但数据本身会被删除。您可以在this文章中获得更详细的描述(在文章中搜索"Scaling down“)。基本上,您必须从删除的数据库中手动导出数据,然后手动将其合并到目标数据库中。从技术上讲,您可以通过Sql Azure迁移向导的命令行版本自动执行合并操作,但这是有风险的。在投入生产之前,它需要进行大量的测试。
微软正计划在联盟成员删除上实现自动合并,但这将在未来的版本中发生。就目前而言,我不推荐自动缩减规模。
更新
对于感兴趣的人,您可以投票支持联合SQL Azure数据库here上的合并操作。
https://stackoverflow.com/questions/9899558
复制相似问题