当我使用 PHP 从资源(查询)中获取行时,我遇到了一个非常奇怪、毫无意义且完全随机的错误。
我的开发机器是带有 Apache 2.2 的 Windows XP SP3,而 MySQL 在虚拟机上运行,使用 ubuntu 10.04,具有 768mb 内存、100GB 硬盘和 4 个逻辑内核(Intel q6600)。然而,这个问题与 Windows 上的 PHP 无关,因为我在数据库机器上运行代码时遇到了同样的错误。
我正在使用 mysql 扩展(不是 mysqli 或 mysqlnd),但环顾四周,我针对与 mysqlnd 相关的错误创建了一个补丁扩展名,所以,我可能应该试试。
主要问题是,当我执行这个查询(一个非常大的查询,有几个派生表和超过 20 个连接)并快速处理结果并且一切顺利时,但是当我的代码花了大约 15/20 秒来处理一组行(我需要从一组以特定方式链接的行构建一个对象,我无法更改它,数据库不是我的,并从该对象制作一些 PDF)一段时间后(随机时间)我收到此错误“空行数据包正文”。
我使用无缓冲查询来减少内存消耗(如果我启用缓冲,我会得到大约 260MB 的已用内存)但这不应该是问题。
最佳答案
我遇到了同样的错误。我用的是 PDO,但基本上应该是一样的东西。
你在 MyISAM 表上操作吗?如果是这样,问题可能与此引擎使用的锁定模型有关:它锁定整个表,读取使用共享锁,写入使用独占锁。
这就是我试图做的事情:读取一个没有缓冲的大结果集,并更新同一个表中的一些行。由于您无法在同一连接持有未缓冲的结果集时发出语句,因此我尝试使用另一个连接进行更新。在第一次更新之前读取一直很顺利,此时脚本停顿了大约一分钟,然后我收到了“空行数据包正文”错误。
你看,当读取无缓冲时,共享锁一直保持到整个结果集被读取或游标被关闭。在此期间,表被共享锁锁定,因此其他连接可以获得表上的共享锁(换句话说,从表中读取),但独占锁(用于写入)将不得不等待。如果这发生在同一个脚本中,就会死锁。
现在,为了防止无限死锁,MySQL会在一段时间后强行释放你的共享锁(IIRC这受table_lock_wait_timeout值的影响),转储你的结果集并允许等待独占锁的写入语句轮到它.
因此,虽然在我的情况下是执行此操作的同一个脚本因此停滞直到超时到期,但也可能是其他一些脚本正在尝试对表执行具有相同效果的写操作,这可能是什么发生在你的案例中。
为我解决问题的方法是将表类型更改为 InnoDB,因为该引擎使用行级锁而不是表级锁。但是,由于您说数据库不是您的,所以这对您来说可能是不可能的。
关于php - 使用 mysql_fetch_object 时出现奇怪的 MySQL 错误 "Empty row packet body"(PHP 5.3.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780521/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que