数据库 – 分析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.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...