我用jdbc连接sqlserver 2008数据库 执行 procedure 增量从另一个库中同步数据:
sqlserver procedure(从另一个数据库增量同步数据的存储过程)中加了一些print 语句,这些print影响的tomcat内存,没有的这些语句的时候,tomcat内存消耗300M左右,但是加了print之后tomcat内存消耗增加到了1800M,
数据量:需要做增量同步的表数据为34万条,被同步的表数据也为34万(只多不少),每一次游标循环都有三个print语句
为什么这些procedure中的print语句为消耗如此多的tomcat内存呢?
------解决方案--------------------
如果存储过程仅是做数据同步的功能,可以取消这些print语句.
------解决方案--------------------
print语句不应该有1.5G吧,你print的内容是什么?另外我看到游标了。。。游标不是问题,问题是用得好不好,一般的游标会驻留在数据库或者应用程序端的内容,直到应用程序读取完毕为止,如果多线程在一个时间段执行,可能会使得内存不足,建议先检查是否可以改写脚本,不使用游标。或者使用高效的游标
------解决方案--------------------
在调用存储过程时,在tomcat中显示这个存储过程执行中,打印出的print是吗,相当于是执行日志吧,那有可能会占用很大的空间的
我以前公司,用的就是tomcat,一般不会去打印存储过程执行中的信息,只是去显示java程序执行一些作业时,显示的少量状态信息。
另外,这些信息一般会保存到文件中,而不会一直存储在内存中,否则,占用内存肯定是非常多的。
------解决方案--------------------
一般也就是显示一下,作业执行的参数,是否执行成功,最好不要显示详细的信息,特别是你的数据量很大的时候,显示每条明细,确实会占用大量的内存。