【发布时间】:2014-12-11 22:27:29
【问题描述】:
我们使用实体框架和 MySQL 连接器在 .Net 中编写了一个应用程序。但有时查询无法在应用程序中执行,我们不知道为什么。该数据库安装在 Debian 服务器上。
我们在日志文件中看到以下消息:
System.Data.EntityCommandExecutionException: Er is een fout opgetreden tijdens het uitvoeren van de opdrachtdefinitie. Zie de interne uitzondering voor details. ---> MySql.Data.MySqlClient.MySqlException: Incorrect key file for table '/tmp/...MYI'; try to repair it
bij MySql.Data.MySqlClient.MySqlStream.ReadPacket()
bij MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
bij MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
bij MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
bij MySql.Data.MySqlClient.MySqlDataReader.NextResult()
bij MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
bij MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
bij System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
bij System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
--- Einde van intern uitzonderingsstackpad ---
bij System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
bij System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
bij System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
bij System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
bij System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
bij System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
bij System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
bij System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
bij System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
在 stackoverflow 和 goole 上,我看到几个带有相同“错误”的帖子。其中大多数与临时分区上的可用空间有关。但是当我查看数据库服务器时,/tmp 分区仅使用了 3% 并且有足够的可用空间。
我跟踪了导致这些错误消息的查询,但我现在可以执行查询。我没有看到临时驱动器/分区的任何用法。此外,查询的表非常小,每个表只有几 1000 行(但我们确实在外键上连接了 4 个表)。 这给我带来了下一件事,我们对大多数表使用 InnoDB 表。只有 4 个表使用 MyIsam 结构。这些表确实包含大量数据(每个表大约 10gb)。但目前查询(和实体框架上下文)并未触及这些表。
它可能与备份或在某个时刻运行的东西有关吗?是否有人知道 InnoDb 和 MyIsam 表使用临时存储进行某些查询,以便查询 InnoDb 表时会发生此错误?
【问题讨论】:
标签: mysql debian innodb myisam