程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於Amoeba讀取longblob字段的問題

關於Amoeba讀取longblob字段的問題

編輯:MySQL綜合教程

最近有一個應用使用Amoeba從幾個庫中讀取MySQL中含有longblob字段的表,老是報Session was killed。

經查是Amoeba中可讀通道的緩存大小引起的。原來在com.meidusa.amoeba.net.io.PacketInputStream類中,有一個屬性maxPacketSize,限制了可讀通道的緩存大小,如果當前讀取的記錄的長度大於maxPacketSize,就會報錯。所以我們必須把它調大點。

Java代碼 
/** 最大容量 */ 
protected static final int MAX_BUFFER_CAPACITY = 1024 * 1024 * 2; 
private int maxPacketSize = MAX_BUFFER_CAPACITY; 
 
 
public int getMaxPacketSize() { 
    return maxPacketSize; 

 
public void setMaxPacketSize(int maxPacketSize) { 
    this.maxPacketSize = maxPacketSize; 

maxPacketSize默認是2MB,但是發現setMaxPacketSize方法沒有在其它地方有調用,應該是不可配置的,因此我直接修改了MAX_BUFFER_CAPACITY,重新打包扔上去就沒問題了。


另外,當maxPacketSize大小不足時,用SQLYog連代理時的時候,發現一個有趣的現象。假如我有一表,各字段長度如下:
field1 | field2
1M     | 3M

如果我先執行:SELECT field2 FROM tab
這時出錯:Lost connection to MySQL server during query
再執行:SELECT field1 FROM tab
SQLYog就沒有響應了,然後amoeba拋OOM異常,屢試不爽。查DUMP文件後,發現AuthingableConnectionManager 和 Log4j的DailyRollingFileAppender塞滿了內存。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved