情景 :进销存报表的数据晚上的计划任务没有跑完(以往是凌晨1-3就能跑完),白天业务期间数据库cpu出现性能瓶颈,定位是进销存报表高并发的insert&select
针对相应的insert和select语句,能够优化的方面:
数据库这边咱们排查了,发现两个问题并给了两个优化建议
1.单条insert插入,改为批量插入,性能提高很是明显; //减小commit的次数,从而减小insert时间
2.单条wahouseid和skuid查询,改为批量查询) // 租户的数据量自己会很大,一旦where条件的笛卡尔乘积过大,就会致使IO吃不消,cpu也会飙升
根本缘由:
1.表的数据量较大(超过2/3的表的数据量都超过100w)
2.数据表的数量:差很少650张分表
3.咱们对该库的一半的数据作了engine=tokudb的修改
优劣体现:
tokudb引擎相比较于innnodb有比较好的压缩比,insert速度能有相应的提高,可是select查询会比较慢,须要修改一个参数
设置 loose_tokudb_buffer_pool_ratio 的比例,即 tokudb 占用 tokudb 和 innodb 共用缓存的比例(根据库中使用引擎的数据表的数量来比较)
分析总结:
tokudb虽然能节省很多的磁盘空间,可是后续若大批量的修改tokudb的引擎,须要修改该参数loose_tokudb_buffer_pool_ratio 并重启数据库。