首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#1041 - mysql中内存不足问题

问#1041 - mysql中内存不足问题
EN

Database Administration用户
提问于 2015-11-13 13:05:32
回答 2查看 15.2K关注 0票数 4

我正在使用Amazon db.m1.medium实例。它至少有40-50个数据库和至少10k表.在过去的一年里,它运行得很好,但是今天我改变了一个表,它开始出错。我正在使用InnoDB格式。

当我创建一个表或修改一个表时,我会得到以下错误:

#1041 -内存不足;检查mysqld或其他进程是否使用所有可用内存;如果没有,则可能必须使用“ulimit”来允许mysqld使用更多内存,或者可以添加更多交换空间。

我该怎么解决这个问题?

EN

回答 2

Database Administration用户

发布于 2015-11-13 18:07:14

问题#1

你的主要问题是至少有10000张桌子

这是我看到的问题

RDS实例都是InnoDB

。

如果您有10000个InnoDB表,那么打开多少个文件句柄?

  • .frm文件的一个文件句柄
  • .ibd文件的一个文件句柄

这将是最多20000打开的文件句柄。

RDS实例都是MyISAM

。

如果您有10000个MyISAM表,那么打开多少个文件句柄?

  • .frm文件的一个文件句柄
  • .MYD文件的一个文件句柄
  • .MYI文件的一个文件句柄

这将是最多30000打开的文件句柄。

问题#2

您正在使用m1.medium。它只有3.75GB内存。

问题#3

拥有10000个表可能非常占用内存,因为要维护的元数据数量很大。

请参阅我以前关于INFORMATION_SCHEMA内存消耗的文章

问题#4

您的Production可能有太多的开放DB连接,它们处于休眠状态,但占用内存(请参阅我发布的打开和关闭DB连接的成本有多高?)

分析

您的问题可能只是在尝试创建一个表(需要2-3个文件句柄)或一个alter (需要2-3个文件句柄)时有太多打开的表。我看到这种情况发生在我试图创建一个分区表并耗尽文件句柄的过程中。我在我以前的帖子对大型数据库表进行分区可能涉及哪些风险?中写到了这一点,我在OS (裸金属服务器)上提出了ULIMIT来解决这个问题。我知道改变ULIMIT无助于你,因为你在RDS。

建议

简单地跑

代码语言:javascript
复制
mysql> FLUSH TABLES;

它将关闭所有具有打开文件句柄的表。

如果您希望关闭特定的打开表,则可以将打开的表列出

代码语言:javascript
复制
mysql> SHOW OPEN TABLES FROM <database>;

然后,您必须像下面这样显式地关闭表

代码语言:javascript
复制
mysql> FLUSH TABLES db1.tb1,db2,tb2,db3.tb3;

运行FLUSH TABLES;之后,您可以运行CREATE TABLE或ALTER TABLE。

您还可能需要升级到另一个具有更多RAM的服务器模型。

您可以减少表的数量,但可以存档数据和删除非活动数据库。这将减少用于INFORMATION_SCHEMA的内存消耗。

您还应该关闭所有未被池化的DB连接。

试试看!

票数 6
EN

Database Administration用户

发布于 2021-08-05 11:08:59

在这里张贴我的经验,因为它是相同的信息,并在搜索结果的顶部页搜索该消息。

在Windows服务器上看到有大量内存可用的[ERROR] Failed to write to mysql.slow_log: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space。MySQL 5.7.20-log x64社区

运行mysql_upgrade.exe --upgrade-system-tables -h 127.0.0.1 -u root -p给了mysql_upgrade: [ERROR] 13: Can't get stat of '.\mysql\slow_log.CSV' (Errcode: 2 - No such file or directory)

因为我的slow_query_log_file在其他地方,这让人很困惑。在.\mysql\slow_log.CSV创建空文件之后,到目前为止,一切看起来都很好。

如果有任何可能显示丢失文件的消息,我还没有查看源代码,我现在要说的是,在这种情况下,有可能出现错误消息。

票数 -1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/120999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档