MySQL ALTER TABLE 在非常大的表上 - 运行它安全吗?

2024-02-06

我有一个 MySQL 数据库,其中有一个包含 400 万行的 MyISAM 表。我大约每周更新一次此表,添加大约 2000 个新行。更新后,我将表更改如下:

ALTER TABLE x ORDER BY PK DESC

我按主键字段按降序对表进行排序。这在我的开发机器(具有 3GB 内存的 Windows)上没有给我带来任何问题。我在生产 Linux 服务器上成功尝试了 3 次(具有 512MB RAM - 每次大约 6 分钟内获得结果排序表),最后一次尝试时,我不得不在大约 30 分钟后停止查询并重建来自备份的数据库。

512MB 的服务器可以处理这么大的表上的 alter 语句吗?我读到创建临时表来执行 ALTER TABLE 命令。

问题:这个alter命令可以安全运行吗?预计更改表格的时间应该是多少?


正如我刚刚读到的,ALTER TABLE ... ORDER BY ...查询在某些情况下对于提高性能很有用。令我惊讶的是 PK 指数对此没有帮助。但是,从MySQL 文档 http://dev.mysql.com/doc/refman/5.1/en/alter-table.html,看来InnoDBdoes使用索引。然而,InnoDB 往往比 MyISAM 慢。也就是说,使用 InnoDB,您不需要重新排序表,但您会失去 MyISAM 的惊人速度。它仍然值得一试。

从您解释问题的方式来看,似乎加载到内存中的数据太多(也许甚至正在进行交换?)。您可以通过监视内存使用情况轻松检查这一点。很难说,因为我不太了解 MySQL。

另一方面,我认为你的问题出在一个非常不同的地方:你正在使用一台只有 512 Megs RAM 的机器作为数据库服务器,其中一个表包含超过 4Mio 行......并且你正在执行一个非常占用内存的操作对该机器上的整个表进行操作。看来 512Meg 还远远不够。

我在这里看到的一个更基本的问题:您正在一个与生产环境非常不同的环境中进行开发(并且很可能也进行测试)。您所解释的问题类型是可以预料的。您的开发机器的内存是生产机器的六倍。我相信我可以有把握地说,处理器也更快。在这种情况下,我建议您创建一个模仿您的生产站点的虚拟机。这样您就可以轻松测试您的项目,而无需中断生产站点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL ALTER TABLE 在非常大的表上 - 运行它安全吗? 的相关文章

随机推荐

  • Kivy 窗口隐藏/显示

    我是一个Python编程新手 学习让我创建一个项目 这就是我正在尝试做的事情 我想创建一个在系统托盘中运行的程序 并且 fire 是一个在后台加载的程序 在后台加载 这样我可以减少 Kivy 的启动时间 在这里和谷歌搜索后 我找不到答案 我
  • Azure ARM 角色分配不同的资源组

    我正在尝试创建一个具有 VM 的 ARM 模板 我希望 VM 具有AcrPull向位于不同资源组中的容器注册表进行角色分配 我将范围属性设置为 ACR 的 ID 我从https resources azure com https resou
  • 正则表达式 标签解析src、宽度、高度

    你可能会对这句话做出反应 H使用正则表达式进行 TML 解析是一个完全糟糕的主意 下列的this https stackoverflow com questions 1732348 regex match open tags except
  • 添加对消息的反应。 Discord.py 重写

    我正在尝试使用自定义表情符号添加对消息的反应 由于某种原因 我在网上找不到太多与此相关的内容 并且我花了过去 3000 万的时间试图找出不同的方法 到目前为止还没有任何效果 这是在齿轮内部 第一种方法 accept decline awai
  • Xcode + 删除所有断点

    有什么方法可以删除Xcode中的所有断点吗 那么有一个三步的方法 按 CMD 7 显示所有断点 在 Xcode4 中按 CMD 6 在 Xcode3 中按 CMD ALT B 使用 CMD A 选择所有断点 然后使用退格键删除它们 就像删除
  • 乔姆斯基语言类型

    我试图理解四种不同的乔姆斯基语言类型 但我发现的定义对我来说没有任何意义 我知道类型 0 是自由语法 类型 1 是上下文相关的 类型 2 是上下文无关的 而类型 3 是常规的 那么 有人可以解释一下这一点并将其放在上下文中吗 谢谢 语言是属
  • 有没有办法在没有 .* 或 ->* 运算符的情况下调用成员函数

    调用方法如下D foo通过指向成员函数的指针调用函数将生成错误 必须使用 or gt 在 f 中调用指向成员函数的指针 当然这不是我们调用成员函数指针的方式 正确的调用方式是 d f 5 OR p gt f 5 我的问题是 有没有办法在左侧
  • 如何使用 scipy.optimize.linprog 获得整数解?

    当我解决线性规划问题时 就像下面的公式一样 我希望 x 的结果全部为 int 类型 考虑以下问题 最小化 f 1 x 0 4 x 1 须遵守 3 x 0 1 x 1 lt 6 1 x 0 2 x 1 lt 4 x 1 gt 3 where
  • [mccabe] 循环复杂度过高错误是什么意思?

    我正在 repl it 中为一个学校项目创建一个 CYOA 并且需要一个列表 所以我所做的就是在每次输入时为用户添加一个选项来查看他们的项目 在主要的分割处我放了 Items Flask of Root Beer print Intro n
  • python:使用 gdal 绑定在内存中执行 gdalwarp

    我目前有一个加工链R下载MODIS数据然后调用gdalwarp从系统将特定子数据集 例如 NDVI 重新投影到 WGS1984 中 所结果的GeoTiffs然后被收集到一个HDF5文件以供进一步处理 现在我将处理链移至python 我想知道
  • 计算 BigQuery 中分区的运行总和

    我正在尝试计算分区上的运行总和 这似乎比中建议的方法更容易和更快BigQuery SQL 运行总计 https stackoverflow com questions 14664578 bigquery sql running totals
  • 使用 R 转换为 NetCDF 时保留栅格变量名称

    获取多年每月温度数据的光栅文件 该文件附有名称 可通过以下方式访问names object 采用以下格式 Jan 1981 Feb 1981 等 使用以下代码的两年示例文件here http www filedropper com samp
  • 如何使用 Windows 内置的 mp3 解码器访问原始解码音频数据?

    从 Windows Media Player 6 1 开始 Windows 就有了自己的 mp3 解码器 我可以使用该解码器来访问解码的音频 原始 数据吗 我认为这必须通过 DirectShow 来完成 Related but not th
  • 从 Git Bash 调用 notepad++

    我在用msysgit http msysgit github com 在 Windows 7 中 如何从 Git Bash 调用 notepad 就像我们使用默认记事本一样 比如说 name usename记事本文本文件 txt 相反 我希
  • PostgreSQL递归选择从叶子中查找根元素

    我正在为论坛开发一个数据库 其中包含线程和消息 线程以一条没有消息的消息开始parent id 回复是消息parent id 我有一张消息表 每个项目都引用同一个表上的项目 将它们作为父子关系 create table messages i
  • JQuery 可见显示

    我有以下代码 loading css visibility visible loading show 由于某些我不知道的原因 当我使用 CSS 时它可以工作 但是当我使用 show 时 这是行不通的 请帮忙 我是 JQuery 的新手 谢谢
  • 从 C# 中的 List 中选择 N 个随机元素

    我需要一个快速算法从通用列表中选择 5 个随机元素 例如 我想从 a 中获取 5 个随机元素List
  • 在 Angular JS 上悬停时添加类

    我试图在悬停时添加一个类li下面代码中的 Angular 元素 li class pull left a href interna html img src assets images cola png a li 这就是页面将具有的所有功能
  • 如何使用AngularJS动画实现翻转效果?

    实现这一目标的最佳方式是什么翻转效果 http davidwalsh name demo css flip php使用 AngularJS 动画 我希望点击时出现翻转效果 每次单击它时 它都应该翻转到另一侧 我想 理想情况下 我正在寻找使用
  • MySQL ALTER TABLE 在非常大的表上 - 运行它安全吗?

    我有一个 MySQL 数据库 其中有一个包含 400 万行的 MyISAM 表 我大约每周更新一次此表 添加大约 2000 个新行 更新后 我将表更改如下 ALTER TABLE x ORDER BY PK DESC 我按主键字段按降序对表