【问题标题】:MemSQL database recoveryMemSQL 数据库恢复
【发布时间】:2016-12-23 15:52:32
【问题描述】:

我们有单节点 MemSQL 社区版在生产中运行,但不建议将 MemSQL 单节点用于生产使用,我们从 POC 开始并将其部署到 Prod

今天我们遇到了以下问题,

(stderr) ERROR 1720 (HY000) at line 3: Leaf Error (10.0.0.28:3307): MemSQL 对表的内存使用量 (26255 MB) 已达到“maximum_table_memory”全局变量 (26064 MB) 的值。无法执行此查询。

我们试图删除一些数据,但由于以下异常,我们无法这样做 错误代码:1712。叶错误(10.0.0.28:3307):没有足够的可用内存来完成当前请求。请求未处理。 46.836 秒

然后我们将机器上的内存加倍并重新启动 memsql ,但叶子没有拾取额外的内存,然后我在 memsql.cnf ( /var/lib/memsql/leaf-3307/ ) 更改了内存设置并重新启动叶子节点,然后叶子拿起额外的内存

理想情况下,内存不应该是硬编码的,而是应该是机器上可用内存的百分比,并且在重新启动后它应该选择额外的内存

当叶子获得额外的内存时,我们开始遇到不同的问题

我们不断收到以下 2 个异常,当我们能够连接并重新启动应用程序 (ETL) 时,我们再次遇到同样的问题,我们尝试了 10 次,但我们不知道发生了什么,我们尝试重新启动 memsql,我们尝试重新平衡分区(我们知道它不起作用但仍然),我们尝试修复数据库但数据库处于在线模式,当叶子在碰撞机器配置 (AWS) 后拾取额外内存时,我们清除(删除)其中一个表中的一些数据,所以我们认为这可能会造成问题并重新创建表,但仍然没有运气

ERROR 1731 (HY000):从磁盘恢复完成后,数据库“reports_and_summary”将在 35 秒内可供查询。运行 SHOW DATABASES EXTENDED 并访问 http://docs.memsql.com/5.5/concepts/database#states 了解更多信息

《数据库memsql的主键恢复》

最后唯一有效的是,我们升级了 memsql 版本,我认为它再次进行了全新安装并开始工作,但是如果没有新版本可升级怎么办:)

有没有人遇到过类似的问题?根本原因是什么?

【问题讨论】:

  • 恢复错误持续了多长时间?你是哪个版本的?
  • 我尝试了一个多小时,当我看到数据库很好的基础“显示数据库扩展”命令时,我尝试重新启动负载并且数据库再次进入恢复状态,最后度假村我尝试升级,因为应用程序对生产至关重要,并且数据集大小也不是太大,只有 24gigs

标签: singlestore


【解决方案1】:

1) 如果您没有在 memsql.cnf 文件中显式设置 maximum_memory,那么 MemSQL 会将 maximum_memory 设置为您机器上物理内存的 90%,将 maximum_table_memory 设置为您机器上物理内存的 80%。有关详细信息,请参阅http://docs.memsql.com/docs/memory-management。因此,如果您添加更多内存并重新启动 MemSQL,只要它不受 .cnf 文件中的 maximum_memory 设置的限制,它就会拾取并使用新内存。

2) MemSQL 需要使用内存来运行 DELETE 查询(它是一个多版本数据库 - DELETE 查询不会立即物理删除行,它们会将它们标记为已删除。当 DELETE 提交时,行可以通过删除和内存如果没有其他查询正在使用这些行,则释放)。如果您在运行删除时遇到内存不足错误,最简单的解决方法是在单个删除语句中删除较少的行(即,在删除上设置 LIMIT 10000 并运行多个 DELETE,而不是需要更多内存的大删除然后可用)。如果您可以从表中删除所有数据,那么 TRUNCATE TABLE 使用的内存要比 DELETE 少得多。您也可以运行 SET GLOBAL maximum_memory 并将 maximum_memory 调整为更高的值,但不建议这样做。

3) 如果您遇到“数据库正在恢复”错误,这是因为 MemSQL 在重新启动后尚未完成将所有数据从磁盘重新加载到内存中。如果您等待它完成恢复,那么数据将是可查询的。 MemSQL 是内存优化数据库,因此所有数据必须在内存中才能允许查询运行。如果您有 MemSQL 企业版,您可以使用冗余 2 运行,然后您不必等待恢复(将有另一个数据副本已存储在另一个叶节点的内存中)。

【讨论】:

  • 同意 1 和 2 但是关于第 3 点,我们得到的错误是以下错误,我正在使用 SHOW DATABASES EXTENDED 监视恢复状态,当我不再看到以下消息时它正在恢复,然后我开始加载数据库,然后数据库再次抛出与它正在恢复相同的错误,我尝试了 10 次,但找不到任何方法将数据库恢复到正常状态。 "从磁盘恢复完成后,数据库 'reports_and_summary' 将在 35 秒内可供查询。运行 SHOW DATABASES EXTENDED"
  • 要么 MemSQL 没有准确地显示恢复时间,要么我做错了什么,不确定?除了依靠“SHOW DATABASES EXTENDED”命令之外,还有其他方法可以检查数据库是否仍在恢复,因为这也发生在过去,我们挣扎了几个小时然后决定重建数据库
  • 对此有何见解?
  • 我必须查看跟踪日志才能确定,但​​听起来您的 memsql 节点可能会导致 linux OOM 被杀死(并且可能会重新启动)。 dmesg 中是否显示任何内容($ dmesg | grep -i “内存不足”)。
  • 不幸的是我已经杀死了那台机器来共享日志
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2010-12-04
  • 2010-12-04
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多