DevTestOpsGuide

开发 测试 上线 的经验与笔记

View project on GitHub

数据库与 Java

@Transactional不能用在private方法

prepareStatement1开始而不是0开始

调用外部服务与持有数据库连接不要放一起,否则调用时间较长时会导致长时间占用连接

而且在SELECT ... FOR UPDATEUPDATE后会导致长时间锁表

阿里 Druid 连接池即使数据库连接超时释放了,连接池连接没释放也会导致性能问题,必须注意连接的释放

排查方法:

<!-- 超过时间限制是否回收 -->  
<property name="removeAbandoned" value="true" />  
<!-- 超时时间;单位为秒,180秒=3分钟   -->
<property name="removeAbandonedTimeout" value="180" />  
<!-- removeAbandoned 打印堆栈 -->
<property name="logAbandoned" value="true" />

日志里查找 removeAbandoned 找到错误堆栈