0

Java プログラムで Oracle 10g からデータを読み込もうとしていますが、次のように列の 1 つが CLOB 型です (注: データは CLOB 型の列です)。

private final static String LOAD_QUERY 
        = "SELECT id, data FROM table WHERE id = ?";

    public SomeObject loadById(long id){
        SomeObject obj = null;
        try {
            obj = jdbcTemplate.queryForObject(LOAD_QUERY,
                    new ParameterizedRowMapper<SomeObject>() {
                public Model mapRow(ResultSet rs, int rowNum) throws SQLException {
                    long id = rs.getLong("id");
                    String data = rs.getString("data");
                    return new SomeObject(id, data);
                }
            }, id);
        } catch (Exception e) {
            throw new SomeException("Error during SQL query", ErrorCode.INTERNAL_ERROR, e);
        }
        return obj;
    }

CLOB に格納されるデータ サイズは 44Mb にもなります。CLOB 値を正常に取得できましたが、CPU 使用率に大きな打撃を与えています。Java VisualVM でプロファイラーを実行した後、IO の問題のようです。この問題を解決するにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

0

大きな clob の場合は、ストリームを介してコンテンツを取得することをお勧めします。getString を使用すると、大きな配列が割り当てられます。これは、第 2 レベルのキャッシュによって割り当てられる大きな配列である可能性もあり、複数の配列が割り当てられる可能性もありますが、値は基盤となるフレームワークのさまざまなレイヤーを介してコピーされた値です。このすべての文字列の割り当てとコピーにより、CPU 使用率が高くなります。

于 2013-01-16T22:54:00.337 に答える