Bre*_*ett 6 mysql innodb mysql-error-126
我遇到了InnoDB的问题(表是最初的MyISAM,但是之前将它转换为InndoB)表; 我正在尝试运行此查询:
SELECT
posts.id,
posts.post_title
FROM
rss_posts AS posts
INNER JOIN rss_feeds AS feeds ON posts.blog_id=feeds.id
WHERE
feeds.blog_language=1
ORDER BY
posts.post_date_db DESC
LIMIT
10;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Query : SELECT posts.id,posts.post_title FROM rss_posts AS posts INNER JOIN vw_rss_feeds AS feeds ON posts.blog_id=feeds.id WHER...
Error Code : 126
Incorrect key file for table '/tmp/#sql_7375_0.MYI'; try to repair it
Run Code Online (Sandbox Code Playgroud)
我不能对所涉及的桌子进行维修; 但是我在两张桌子上都运行了CHECK并且看起来很好.我还在两个表上都做了一个OPTIMIZE,并通过以下方式重建了表.
INSERT INTO new_table SELECT * FROM old_table;
Run Code Online (Sandbox Code Playgroud)
然后我将新表重命名为旧表名.....但我仍然遇到这个问题.
为了尝试找出导致它的表,我删除了引用"rss_feeds"表的查询中的代码....所以现在查询看起来像这样.
SELECT
posts.id,
posts.post_title
FROM
rss_posts AS posts
ORDER BY
posts.post_date_db DESC
LIMIT
10;
Run Code Online (Sandbox Code Playgroud)
那很有效.
所以这个问题与rss_feeds表有关.
那么我想我会把表转换回MyISAM并运行修复然后转换回InnoDB .....这暂时工作,它恢复正常....然后再次破坏.....修复它又一次破了......现在修理似乎根本不起作用.
现在,我知道,我知道......我已经在谷歌上搜索过这个问题了......我注意到问题在于我们在MySQL临时目录中没有足够空间的MAJORITY. ...但我已经让主持人将临时目录更改为更多空间并且问题仍然存在.
我认为主机应该归咎于它仍然是临时目录的问题; 为什么?因为在我再次使用它之后我又开始将数据添加到rss_posts表中,因此JOIN会让LARGER和MySQL再次耗尽空间....你怎么看?
这里发生的是MySQL通过从两个表的连接构建临时表来执行ORDER BY.临时表太大而无法放入内存中,因此MySQL会创建一个临时文件.
有一些事情会阻止它正常工作.原始磁盘空间是一个.ulimit是另一个.如果这是托管的,他们可能会对您的磁盘使用量有一个配额(除了ulimit).
我建议在查询中添加一个限制条款.目前,您将rss_posts和rss_feeds的全部内容加载到临时表中以进行排序.如果您只想要最新的10个数据,那么您需要的数据远远多于您真正需要的数据.
SELECT posts.id, posts.post_title
FROM rss_posts AS posts INNER JOIN rss_feeds AS feeds ON posts.blog_id=feeds.id
WHERE feeds.blog_language=1
AND posts.post_data_db > (now - interval 30 day);
ORDER BY posts.post_date_db DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11248 次 |
| 最近记录: |