Mysql 1秒200笔GPS数据批量写入优化

针对1100台车上传GPS数据实测,1s 200笔GPS数据批量写入,平均每小时300M日志,每小时1000w笔GPS数据,发现IO负载过高


Mysql 1秒200笔GPS数据批量写入优化_第1张图片

Mysql 1秒200笔GPS数据批量写入优化_第2张图片

一批次100笔(1秒2批次)GPS数据批量写入耗时

Mysql 1秒200笔GPS数据批量写入优化_第3张图片

慢查询: mysqldumpslow /var/lib/mysql/slow_query.log > /var/lib/mysql/2.log

vi 2.log

Mysql 1秒200笔GPS数据批量写入优化_第4张图片

1.优化:mysql优化

Mysql 1秒200笔GPS数据批量写入优化_第5张图片

2.优化:使用sharding-jdbc分表

按照车辆的bustid分表,每辆车的gp数据存储至一个表

   public  ShardingDataSource getShardingDataSource() {


        if(shardingDataSource == null) {
        DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap()); 
            List actualTables = Arrays.asList("mt_gpsmng_151101102631931","mt_gpsmng_151101113910723");
            TableRule orderTableRule = TableRule.builder("mt_gpsmng").actualTables(actualTables).dataSourceRule(dataSourceRule).build();
            ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule))
                    .tableShardingStrategy(new TableShardingStrategy("bustid", new GPSModuloTableShardingAlgorithm())).build();
            shardingDataSource = new ShardingDataSource(shardingRule);
        }
         return shardingDataSource;
     }
  

3.优化后,top查询

load average 负载较低,wa 磁盘读写等待降到0.1

Mysql 1秒200笔GPS数据批量写入优化_第6张图片


4.优化后:iotop查找耗损IO的进程

Mysql 1秒200笔GPS数据批量写入优化_第7张图片


5.优化后:正常情况下,mysql 一批次(1秒2批次)100笔数据10ms左右搞定


Mysql 1秒200笔GPS数据批量写入优化_第8张图片


你可能感兴趣的:(数据库技术)