druid 使用mysql数据库,将poolPreparedStatements设置为true有什么弊端?

v64noz0r  于 2022-12-31  发布在  Druid
关注(0)|答案(7)|浏览(249)

如题,看了Wiki里的【配置_DruidDataSource参考配置】,上面说如果使用mysql数据库,属性poolPreparedStatements可以设置成false,想知道为什么mysql建议设置成false,设成true不是可以通过缓存提高数据查询的性能吗,难道有其他什么弊端,跪求诸位大佬解惑

pdtvr36n

pdtvr36n1#

客户端会占据内存

uubf1zoe

uubf1zoe2#

我觉得他想问的是为什么不设置为true。

eqoofvh9

eqoofvh93#

@wenshao,客户端会占据内存,是指我们的应用服务器会占据内存吗?占用的多吗,如果我们的机器内存完全够用,是不是就可以设成true了?

r1zhe5dt

r1zhe5dt4#

poolPreparedStatements这里缓存的是PreparedStatement,mysql-jdbc里已经提供参数cachePrepStmts和useServerPrepStmts设置PreparedStatement的缓存,所以这里这里就不用再缓存了,否则纯属浪费内存。至于为什么oracle需要,我就不太清楚了,有了解oracle驱动的可以说一下。

vcudknz3

vcudknz35#

@Rembau 目前MySQL 5.7是支持游标的。mysql-jdbc里面的cachePrepStmts和useServerPrepStmts参数默认也是不打开的。那是不是就意味着当前是需要打开poolPreparedStatements选项的?

of1yzvn4

of1yzvn46#

我有一个批量插入的操作,后来发现插着插着内存溢出了,结果就是这个缓存了SQL语句把内存占了

7xzttuei

7xzttuei7#

该参数设置为true的情况下,最近遇到过一个情况,批量插入时,若第一次插入异常回滚了,第二次插入时,会将上一次没成功的数据一起执行了。发现是回滚的时候 com.mysql.cj.AbstractQuery 的 batchedArgs 没有清除导致的。将该参数设置为false的话,每次都是一个新的statement,就不会出现这个问题了。

相关问题