数据库 – 分析Mnesia查询

前端之家收集整理的这篇文章主要介绍了数据库 – 分析Mnesia查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的Mnesia DB运行缓慢,我们认为它应该更快一些.

所以我们需要对它进行简要介绍并弄清楚发生了什么.

有很多选项表明自己:

运行fprof,看看时间到了
运行cprof,看看哪些函数调用了很多

不过这些都是相当标准的性能监控风格工具.问题是我如何实际执行查询分析 – 哪些查询花费的时间最长.如果我们是Oracle或MySQL商店,我们将只运行一个查询分析器,它将返回需要很长时间运行的各种查询.这不是Mnesia似乎可用的工具.

所以问题是:

> Mnesia描述了什么技巧
>有什么工具存在来描述Mnesia – 没有我想,但证明我错了:)
>您如何配置查询并优化您的mnesia数据库安装

展开讨论

fprof作为概要分析工具的一个问题是它只会告诉您正在查看的特定查询.所以fprof告诉我,X是缓慢的,我调整下来加快.然后,低点,操作Y(足够快)现在狗慢了.所以我提出Y,并意识到,使Y快速方法是让X慢.所以我最终做了一系列的双边权衡

我实际需要的是一种管理多边权衡的方法.我现在已经记录了2个公制负载的实际用户活动,我可以重播.这些日志代表我想优化的内容.

sql数据库上的“正确”查询分析器将能够对sql语句的结构进行概要分析,例如所有语句的形式为:

SELECT [fieldset] FROM [table] WHERE {field = *parameter*},{field = *parameter*}

并说285个这种形式的查询平均运行0.37ms

他们的魔术答案是:当这个表单的17个查询花了6.34秒运行,并对表X进行了全表扫描,你应该在字段Y上放置一个索引

当我通过一系列代表性的用户活动获得这样的结果时,我可以开始推理一轮的权衡,并设计一个测试模式.

测试模式将是:

>活动X将查询A,C
而C更快,但查询E和F
比较慢
>测试和测量
>然后批准/不批准

我一直在使用Erlang来“知道”这个没有这样的查询分析器,我想知道的是其他人(谁必须有这个问题)是关于mnesia优化的原因.

解决方法

我挂了回来,因为我不太了解Erlang或Mnesia,但是我很了解性能调优,而且从讨论到目前为止这听起来很典型.

这些工具fprof等听起来像大多数工具,从gprof得到他们的基本方法,即仪器功能,计数调用,采样程序计数器等.很少有人拥有这种做法的很多时间.对于这样的工具的用户,您的沮丧声音是典型的.

有一种不太了解的方法,您可能会考虑,outlined here.它是基于随机抽取少量(10-20)程序状态的样本,并且理解每个样本,而不是总结.通常,这意味着检查调用堆栈,但是您也可能需要检查其他信息.有不同的方法可以做到这一点,但我只是在调试器中使用暂停按钮.我不是想得到精确的时间或调用计数.那些是最多的间接线索.相反,我问每个样本“它在做什么,为什么?”如果我发现它正在做一些特定的活动,例如执行X查询,它正在为目的z寻找y类型的答案,并且它在多个样本上执行,那么它所做的样本的分数是粗略但可靠的估计是什么时间的一部分.机会很好,这是我可以做的事情,并得到一个很好的加速.

Here’s a case study of the use of the method.

猜你在找的MsSQL相关文章