总结一些工作中碰到的点,会持续更新,有问题欢迎留言 sql调优 1:索引太多会影响插入效率,索引太多很可能是表设计不合理 2:索引尽量唯一,并且索引检索数据行尽量小 3:尽量设计统一字符集,表、字段字符集不一致索引不生效 4:锁表的问题基本上把update语句 where条件改为主键或者索引列就解决了
事务相关 1:尽量使用read commit隔离级别(很多乐观锁的场景我们需要retry,这个时候rc级别才能保证retry是有用的) 2:嵌套事务和隔离基本密切相关,不要看网上的文章。最好自己根据项目测试 3:事务包裹的方法尽量只处理数据库操作,防止大事务
数据库连接池 1:连接数要根据系统压测调优,正常情况不应该过大 2:show variables like ‘%timeout%’ 查看数据库配置超时时间等参数做对应的连接池配置 3:尽量配置固定大小的连接池,减少释放、创建连接的消耗。idle\max 参数设置一样,根据对应连接池配置做调整 4:获取连接超时基本都是慢sql导致,根据慢sql报表对sql做调优。 5:多线程的线程数尽量小,即使是io密集型业务,涉及到数据库操作也应该设置小于数据库连接池大小的最大线程数;否则也会存在拿不到数据库连接
jdbc连接串参数 1:allowMultiQueries=true;批量提交sql,一般用在批量更新场景并且更新字段不确定 2:rewriteBatchedStatements=true;允许jdbc批量发送指令 3:cachePrepStmts=true;减少重复编译 4:prepStmtCacheSize=250;缓存sql条数 5:prepStmtCacheSqlLimit=2048;缓存的字符数 很多导入的业务,一次导入上万条数据,批量提交数据过多执行效率会慢很多; 批量更新、新增的场景,建议200条左右做一次提交和prepStmtCacheSize长度有关;提交后要根据数据库性能做适当调整
