MySQL 存储写入速度慢分析

叙述

问题背景描述:
  在MySQL中执行SQL语句,比如insert,贼慢,明明可能也就只是一行数据的插入,数据量很小,但是耗费的时间却很多,为什么?

 

解析:

  1、读操作:内存读-->cache缓存读-->磁盘物理读

    读取到的数据会按上述顺序往回送。

  2、写操作:内存数据直接写入cache缓存(非常快)-->写入disk

由上可知,MySQL之所以读写速度快,cache在其中起到了关键作用。

1、Cache缓存特点:

  1、速度快

  2、掉电数据丢失  

  3、容量有限

2、保护数据安全(防止意外掉电的数据丢失)应对措施:

  在存储中,增加BBU(电池备份单元,就是电池),在掉电后,可以把缓存中的数据写到磁盘中,保证数据不会丢失。

  如果没有提供BBU或者BBU坏了,内存数据就不会写入cache缓存中,就会直接写入disk中;相较于写入缓存,写入磁盘的速度就大打折扣(万倍之差)。与此同时,因为慢下来的“写”占了绝大部分“读”的带宽。所以BBU问题是读写性能差的一很大的影响因素。

3、cache缓存容量有限

  (4G、8G、16G、32G),系统为了保持cache有用,会周期性的将cache缓存的数据写入磁盘中,避免cache被占满。

解决方案

如何判断写入速度慢?

A:

  1、怀疑BBU问题

    监控BBU的bug,解决:重启BBU

  2、cache被占满(类同于BBU坏了的情况)

    1、海量的写入数据占满cache缓存,判断:

    shell> iostat -x

    mysql> show global status like 'handler_write';

  2、cache写入disk的速度慢了(排水速度远小于注水速度)

    硬盘I/O异常,负载过高:数据库海量的物理读(异常SQL),判断:

    mysql> show status like 'Innodb_buffer_pool_reads';

  3、存储性能差问题

    1、存储设备差,更新设备

     2、灾备同步风险,“再好的工程师,敌不过蓝翔的挖掘机、农民工的锄头……”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,你提到在进行mysql数据库的数据迁移时,使用kettle工具进行读写操作的速度很慢,并且在数据量较大时速度更慢。为了优化mysql的读写速度,可以考虑以下几个方向: 1. 修改数据库连接参数:可以通过修改mysql的连接参数来优化读写速度。例如,可以调整max_connections参数来增加并发连接数,或者调整innodb_buffer_pool_size参数来增加缓冲池大小,以提高读写性能。 2. 使用索引:索引是提高mysql查询性能的重要手段。通过在经常查询的列上创建索引,可以加快查询速度。但是要注意,过多的索引也会影响写入性能,因此需要根据实际情况进行权衡和优化。 3. 优化SQL语句:合理编写和优化SQL语句也可以提高mysql的读写速度。例如,可以避免使用SELECT *查询所有列,而是只查询需要的列;使用JOIN语句代替子查询等。 4. 分区表:如果数据量非常大,可以考虑将表进行分区。分区表可以将数据分散存储在不同的物理位置上,从而提高查询和写入性能。 5. 使用缓存:可以使用mysql的查询缓存来提高读取性能。通过设置合适的参数,可以将查询结果缓存在内存中,减少查询时间。 6. 硬件优化:如果以上优化措施无法满足需求,可以考虑升级硬件设备,例如增加内存、使用SSD硬盘等,以提高mysql的读写性能。 这些是优化mysql读写速度的一些常见方法,你可以根据具体情况选择适合的优化方向。如果你有具体的问题或需求,请提供更多详细信息,我将尽力帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值