原因是hibernate会缓存sql语句以减少重复编译,便于直接命中提高效率。这个缓存默认最大值为2G (2024.05.08更正,queryPlanCache的map entry默认容量上限是2048,如果里面缓存的每个对象很大,则内存远超2G),且在使用in时,只要in后面的参数有任何一个不一样的,就会视为不同的语句而保存下来。
解决这个问题可以将缓存最大值改小。
我看大家都是这样写的:
spring:
jpa:
properties:
hibernate:
query:
plan_cache_max_size: 64
plan_parameter_metadata_max_size: 32
plan_cache_max_soft_references: 1024
plan_cache_max_strong_references: 64
实际上我在用spring boot的时候是这样写的:
(写入application.properties文件即可)
spring.jpa.properties.hibernate.query.plan_cache_max_size=128
spring.jpa.properties.hibernate.query.plan_parameter_metadata_max_size=64
spring.jpa.properties.hibernate.query.plan_cache_max_soft_references=1024
spring.jpa.properties.hibernate.query.plan_cache_max_strong_references=128
这里最重要的参数是plan_cache_max_size,把它设小之后就可以解决部分内存


2457

被折叠的 条评论
为什么被折叠?



