【问题标题】:optimizing update statement优化更新语句
【发布时间】:2012-03-22 02:55:12
【问题描述】:

我正在使用仅 MyISAM 的数据库,并且对大表的更新花费了太多时间。表的大小约为 30 GB(MYD 和 MYI 各 15 GB)。除了看索引,还有什么可以提高速度的吗?

【问题讨论】:

  • 如果没有看到您的表结构和更新查询,很难提供帮助。请提供更多信息。

标签: mysql performance optimization myisam bigtable


【解决方案1】:

MyIsam 密钥缓存调整: http://docs.oracle.com/cd/E19957-01/mysql-refman-5.4/optimization.html#myisam-key-cache

一般性能优化:(有很多) http://docs.oracle.com/cd/E19957-01/mysql-refman-5.5/optimization.html

30GB 挺大的,你跑的是高端服务器吗?

【讨论】:

  • Mysql 消耗超过 100% 的 CPU,有时 CPU 在最高输出中显示 30 - 50% 高。这是正常的吗?还有一个问题是如果我在更新记录之前选择,会不会用到缓存?
  • 取决于它运行的机器。我之前运行过小型服务器,这太高了,而且我一直在共享网络主机上,其中 100% cpu 时间什么都不是——因为它运行 24 个内核。但是,即使对于具有许多内核和大量 RAM 的服务器来说,30GB 也相当高(许多高端服务器在 2012 年仅处理 32-64)。如果您有一小部分查询经常被访问,那么它可能没问题。如果您正在查询一个大集合并且您的数据库中没有多少存储在 RAM 中,那么您的大瓶颈需要将这些文件从磁盘分页到 RAM 中。
【解决方案2】:

如果您要加载大量数据,请查看批量插入命令,甚至根据您的具体情况将数据加载到文件中。

如果您要进行大量插入,则可能值得在插入之前测试禁用键。它可能有助于加快速度。

使用

insert into myTable values("rec1","hello"),("rec2","world"),("rec3","cheesy huh");

将在 1 条语句中插入 3 条记录 - 再次,您需要对其进行测试。

我已经完成了这种包含数千行的插入形式,它在我的示例中运行良好。

【讨论】:

    【解决方案3】:

    还有一些有趣的笔记:

    • 更改存储引擎(innodb 更适合大容量表)
    • 将您的 TABLES(或整个 DB)划分为更多的逻辑切片(例如按年、月、区域等划分的数据),这样表就会更多但更小
    • 确保 mysql 连接缓冲区大小和类似指标足以快速交付

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多