为了支持事务,我上周将一个项目的所有MySQL表从MyISAM迁移到InnoDB。为此,我使用了 alter table 命令。
大多数工作正常,但是一个特定的查询运行非常非常慢,并且总是给出错误 Incorrect key file for table '/tmp/#sql_xxxx_x.MYI
后来我将问题缩小到 2 个表的内部连接,即 user 表和 agreement 表。而内连接发生在user的外键字段(即agreement_id)和agreement的主键字段(即id )。
user 表只有 50,000 行数据,而 agreement 表只有一行。并且我们已经为用户的agreement_id设置了索引。
无论如何,这似乎是一个非常轻量级的查询,但结果却是整个瓶颈。
这是协议(protocol)的完整架构:
CREATE TABLE IF NOT EXISTS `agreement` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`remark` varchar(200) NOT NULL,
`content` longtext NOT NULL,
`is_active` tinyint(1) NOT NULL,
`date_stamp` datetime NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
我怀疑的一件事是 agreement 表中的 remark 的 longtext 字段,但我们没有使用该字段进行内部连接,实际上查询是即使我们没有在查询结果中选择 remark 也很慢。
最后,我们将agreement表从innoDB转回MyISAM,一切正常。不到 1 秒即可完成查询。
现在,我的问题是这里到底发生了什么?这是否意味着一旦 innoDB 表包含任何文本字段,那么该表就不能用于内部连接?
我希望我能知道真正的原因,这样我以后就可以避免同样的问题。
非常感谢。
最佳答案
这是一个著名的棘手问题。最可能的原因是/tmp 中的空间不足。
这是我保存在书签中的链接,可能会对您有所帮助:http://www.mysqlperformancetuning.com/a-fix-for-incorrect-key-file-for-table-mysql
In my experience, limited though it is, the primary reason for seeing this error message is because your tmpdir has run out of space. Like me you'll check how much free space you have: 1Gb, 2Gb, 4Gb. It may not be enough. And here's why: MySQL can create temporary tables bigger than that in a matter of seconds, quickly filling up any free space. Depending on the nature of the query and the size of the database naturally.
您也可以尝试 REPAIR在你的 table 上,但对我来说它和霹雳舞一样有用:/
关于mysql innodb inner join with longtext 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076416/
有人知道为什么我的rails3.0.7cli这么慢吗?当我运行railss或railsg时,他大约需要5秒才能真正执行命令...有什么建议吗?谢谢 最佳答案 更新:我正在将我的建议从rrails切换到rails-sh,因为前者支持REPL,而rrails不是用例。此外,当与ruby环境结合使用时,修补似乎确实可以提高性能变量,现在反射(reflect)在答案中。一个可能的原因可能是这个performancebuginruby每当在ruby代码中使用“require”时,它就会调用一些代码(更多详细信息here)。在使用Rai
我有这段代码:date_counter=Time.mktime(2011,01,01,00,00,00,"+05:00")@weeks=Array.new(date_counter..Time.now).step(1.week)do|week|logger.debug"WEEK:"+week.inspect@weeks从技术上讲,代码有效,输出:SatJan0100:00:00-05002011SatJan0800:00:00-05002011SatJan1500:00:00-05002011etc.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效
最近,当我运行vim来编辑ruby文件或rails项目时,它需要很长时间才能启动。但是在纯文本文件上调用时它启动速度很快。有什么方法可以找出哪些rubyvim插件最能延长启动时间? 最佳答案 如果您使用的是7.2.286或更新版本,您可以运行vim--startuptimevim.outfoo.rb记录启动过程的各个部分需要多长时间。 关于ruby-ruby插件会使启动vim很慢吗?,我们在StackOverflow上找到一个类似的问题: https:
关于Rails在开发模式下运行缓慢的类似帖子也有,但这些帖子中的解决方案都没有对我产生任何影响。我试过安装可以提高性能的gem并修改配置文件,但都没有成功。我刚开始使用Rails,所以我正在运行“Rails入门”指南中的启动应用程序,这是一个小博客。我已经按照推荐安装了Ruby1.9.3和Rails3.2.13。我在OS/X10.7.5上运行。当加载教程应用的起始页时,实际上只有1行文本和1个链接,需要20-40秒。对任何页面的每个后续请求都需要20-40秒。然而,当我查看服务器日志时,Rails所做的任何事情似乎都不会花费很长时间。日志中的事件之间的时间一直在占用。作为Rails的初
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion我喜欢RubyonRails,我将它用于我所有的Web开发项目。几年前,有很多人在谈论Rails是一个内存大户,以及它如何不能很好地扩展,但这些建议被GreggPollackhere搁置了。.不过最近,我听到有人说Ruby本身很慢。为什么Ruby被认为很慢?我不觉得Ruby很慢,但话又说回来,我只是用它来制作简单的CRUD应用程序和公司博客。在我发现Ruby变慢之前,我需要做什么样的项目?还是这种缓慢只是
我有一个函数平均需要250毫秒才能完成。我想在更短的时间内完成此操作,functionupdateDisplay(){varstart=newDate().getTime();var$this=$(this);vardata=$this.data('ansi');varhtml='';for(vari=0;i';}varcreate=newDate().getTime();console.log('Buildhtml:'+(create-start));$this.html(html);varend=newDate().getTime();console.log('Updatehtml
我正在测试将html元素动态添加到DOM的不同方法的速度。我构建了一个测试器here(代码是工作版本,非常草率)。对于不同的浏览器,结果(非常)不同,Chrome在速度方面获得了所有分数,而Opera位居第二-但这不是这里的问题。在Firefox中,我检测到清除div(从它的子节点)时出现问题。添加大约50.000个div元素时,需要很长时间才能清除,仅使用[div].innerHTML="";这是怎么回事?Firefox是否为此实现了一些内在的垃圾收集方法? 最佳答案 虽然我不确定innerHTML="",但您遗漏了一个可能使用D
我刚刚在我的Windows10机器上下载了VS152015Community,并安装了所有默认包。无论出于何种原因,如果我尝试打开一个javascript文件或几乎任何其他扩展,加载它大约需要15-20秒。这段代码在文本中只说了单词test。现在无论出于何种原因,如果我决定右键单击javascript文件并选择打开方式>“MicrosoftVisualStudio版本选择器”它不是使用普通的MicrosoftVisualStudio2015,而是立即打开,最多只需2-3秒...这是怎么回事?这太烦人了!我已经重新安装VS3次,清除了所有旧的垃圾文件,甚至尝试在没有安装单个工具或扩展的情
我在几个地方读到for-in循环比遍历数组慢...虽然我知道与在场景后面发生的任何迭代相比,在sizeof(type)block中向前移动实际上是毫不费力的一个对象的键,我还是很好奇,究竟是什么原因这么慢...是否必须执行反向散列函数才能获取key,这个过程很慢? 最佳答案 在任何特定引擎的情况下,真正的答案可能取决于该引擎的实现。(差异的大小,如果有的话。)但是,有不变量。例如,考虑:varobj={a:"alpha",b:"beta"};varname;for(nameinobj){console.log(obj[name]);
我需要使我的网站在客户端更快。我想知道我过多的Javascriptcookie操作是否会降低浏览器的速度。它使用硬盘驱动器,这是计算机中最慢的组件。在严重碎片化的硬盘驱动器上,cookie操作会卡住浏览器吗?JS是否对cookie写入/读取(缓存等)进行了任何优化。我可以利用这些优化来改进我的网站吗?用服务器端数据库替换客户端cookie是不可能的,因为我的服务器已经重载了。 最佳答案 有几种方法可以加快客户端页面的速度,但我猜测减少cookie的使用最多只能节省几微秒。总的来说,请确保您只保存所需的内容。您还可以进行大量其他优化,