描述:
项目查询数据库时,报java.sql.SQLException: Temporary file write failure.
把相应sql语句放到数据库中查询,也报Temporary file write failure.
分析:
由于都报了Temporary file write failure.估计原因在mysql数据库上。
我的sql语句中使用了join操作,对于数据量少的操作,查询无异常,而数据量大的join操作就报异常。
估计是数据量过大的join操作超过了join缓存限制,使用到了临时文件,而临时文件还是太小,导致Temporary file write failure.
解决:
先查询数据库join操作的缓存大小
show VARIABLES like '%join_buffer%'
默认 256k(262144)
感觉有点小,修改为10M(10x1024x1024)
set global join_buffer_size = 10*1024*1024;
注意:这里用 global 而不是 session,
global是设置全局系统变量,设置之后程序连接数据库,也是使用这个数值(10M)。
session是设置会话系统变量,当次会话有效,程序连接数据库还是使用默认值(256k)。
再次查看join的缓存大小
再次执行含有join操作的sql,能正常查询~~~
(如果还报Temporary file write failure,再设置大一点,楼主之前设置1M也不行,直到10M才可以)