针对1100台车上传GPS数据实测,1s 200笔GPS数据批量写入,平均每小时300M日志,每小时1000w笔GPS数据,发现IO负载过高
一批次100笔(1秒2批次)GPS数据批量写入耗时
慢查询: mysqldumpslow /var/lib/mysql/slow_query.log > /var/lib/mysql/2.log
vi 2.log
1.优化:mysql优化
2.优化:使用sharding-jdbc分表
按照车辆的bustid分表,每辆车的gp数据存储至一个表
public ShardingDataSource getShardingDataSource() { if(shardingDataSource == null) { DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap()); List<String> 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
4.优化后:iotop查找耗损IO的进程
5.优化后:正常情况下,mysql 一批次(1秒2批次)100笔数据10ms左右搞定