【问题标题】:mysql insert performancemysql插入性能
【发布时间】:2010-03-11 09:15:29
【问题描述】:

我们的数据库的插入和更新性能很差。大多数大表每次插入需要 2-3 秒。如果我们重建表,时间减少到 0.02-0.03,这意味着每秒大约 40 次插入。即使这样也很低,我们不能不时重建表。这是一个耗时的过程,并在持续时间内锁定表。 如果我们将插入分组到事务中,性能会提高。但是在我们的应用程序中,我们需要立即提交插入。 任何人都可以建议可以做些什么来提高插入性能。

这里是来自服务器的 mysqlreport,如果它表明任何东西: 值得注意的一点是 Com_rollback 在我们的服务器上非常高。这可能意味着什么?

MySQL 5.0.51a-3ubuntu5。正常运行时间 2 22:23:11 Thu Mar 11 09:13:33 2010

__ 键 _________________________________________________________________

缓冲区已使用 70.03M of 3.00G 已使用百分比:2.28
当前 552.19M % 使用率:17.97
写入命中率 78.74%
阅读命中率 99.63%

__ 问题___________________________________________________________

总 803.30M 3.2k/s
Com_ 606.44M 2.4k/s %总计:75.49
QC 达到 130.15M 513.7/s 16.20
DMS 47.99M 189.4/s 5.97
+未知 18.69M 73.7/s 2.33
COM_QUIT 32.23k 0.1/s 0.00
慢 (10) 3.24k 0.0/s 0.00 %DMS:0.01 日志:ON DMS 47.99M 189.4/s 5.97
选择 40.94M 161.6/s 5.10 85.30
插入 3.92M 15.5/s 0.49 8.16
更新 2.85M 11.2/s 0.35 5.93
删除 291.57k 1.2/s 0.04 0.61
替换 0 0/s 0.00 0.00
Com_ 606.44M 2.4k/s 75.49
设置选项 467.34M 1.8k/s 58.18
回滚 126.23M 498.2/s 15.71
提交 11.44M 45.2/s 1.42

__ 选择和排序_____________________________________________________

扫描 85.20k 0.3/s %SELECT: 0.21
范围 1.91M 7.5/s 4.67
完全连接 126 0.0/s 0.00
范围检查 0 0/s 0.00
全 rng 加入 0 0/s 0.00
排序扫描 914 0.0/s
排序范围 191.09k 0.8/s
排序mrg pass 0 0/s

__ 查询缓存 _________________________________________________________

内存使用 190.04M of 1.00G %Used: 18.56
块碎片 24.36%
达到 130.15M 513.7/s
插入 12.10M 47.8/s
插入:修剪 12.10M:1 47.8/s
命中:插入 10.75:1

__ 表锁 _________________________________________________________

等待 52.96k 0.2/s %Total:0.08
即时 63.16M 249.3/s

__ 表 ______________________________________________________________

打开 64 of 64 %Cache: 100.00
打开 1.07M 4.2/s

__ 连接 _________________________________________________________

最多使用 396 个,共 500 %Max:79.20
总计 49.06k 0.2/s

__ 创建的温度 ________________________________________________________

磁盘表 5.27k 0.0/s
表 47.47k 0.2/s 大小:200.0M
文件 27 0.0/s

__ 线程 _____________________________________________________________

245 场比赛中的第 18 场比赛
缓存 0 of 4 命中率:39.82
创建 29.53k 0.1/s
慢 0 0/s

__ 中止 _______________________________________________

客户端 33.67k 0.1/s
连接 13 0.0/s

__ 字节 _______________________________________________________________ 发送 227.04G 896.0k/s
收到 106.15G 418.9k/s

__ InnoDB 缓冲池 __________________________________________________

使用 4.00G 的 4.00G %Used:100.00
阅读命中率 99.96%
页面
免费 0 % 总计:0.00
数据 251.34k 95.88 %Drty:0.86
杂项 10807 4.12
锁定 2 0.00
读取 13.04G 51.4k/s
从文件 5.02M 19.8/s 0.04 领先 Rnd 133920 0.5/s 提前 Sql 246973 1.0/s 写入 968.37M 3.8k/s 刷新 19.42M 76.6/s 等待免费 0 0/s

__ InnoDB 锁 _________________________________________________________

等待 1540 0.0/s 当前 0 时间获取 总计 1239283 毫秒 平均 804 毫秒 最大 51521 毫秒

__ InnoDB 数据、页面、行 _________________________________________

数据 读取 6.86M 27.1/s 写入 21.30M 84.1/s fsync 13.42M 53.0/s 待办的 读取 1 写入 0 同步 1

页面 创建 2.34M 9.2/s 读取 23.39M 92.3/s 写入 19.42M 76.6/s

行 删除 291.57k 1.2/s 插入 138.07M 544.9/s 读取 7.21G 28.5k/s 更新 2.78M 11.0/s

【问题讨论】:

    标签: mysql


    【解决方案1】:

    检查 DISC IO 参数。可能您只是让您的磁盘子系统超载 - 这意味着要获得更多磁盘、RAID 控制器等。

    我在 Windows/SQL Server 上看到客户对插入性能不佳的抱怨,测量结果显示平均磁盘响应时间为 1.2 秒 - 磁盘超载。这应该在 2 位毫秒区域内 - 例如 15 毫秒或。

    【讨论】:

      【解决方案2】:

      Com_rollback 表示我假设的“提交回滚”。这意味着您有很多事务提交失败。

      一般来说,我怀疑您正在使用您的键做一些不寻常的事情,尤其是您的主键(您有一个,对吗?)。您的密钥是如何定义的?您是否经常更改键所在的列?如果在重建表后您的 INSERT 和 UPDATE 命令要快得多,那么听起来您的主键(MySQL 排序和存储表行的依据)正在发生变化。

      将您的表定义放在这里应该会有所帮助(DESCRIBE your_table_nameSHOW CREATE TABLE your_table_name 可以解决问题 - 我偏向于后一种格式)。

      【讨论】:

        猜你喜欢
        • 2016-12-10
        • 2020-12-01
        • 2014-11-24
        • 2011-12-20
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        相关资源
        最近更新 更多