Oracle CLOB performance

Je suis en cours d'exécution des requêtes sur une base de données Oracle 10g avec JDBC (à l'aide de la dernière version des pilotes et de l'UCP en tant que source de données) afin de récupérer CLOBs (avg. 20k). Cependant, la performance semble être assez mauvais: le lot de récupération de 100 LOBs prend 4s en moyenne. L'opération est ni I/O, ni CPU ni de réseau liés à en juger par mes observations.

Ma configuration de test ressemble à ceci:

PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
dataSource.setConnectionFactoryClassName("...");
dataSource.setConnectionPoolName("...");
dataSource.setURL("...");
dataSource.setUser("...");
dataSource.setPassword("...");

dataSource.setConnectionProperty("defaultRowPrefetch", "1000");
dataSource.setConnectionProperty("defaultLobPrefetchSize", "500000");

final LobHandler handler = new OracleLobHandler();
JdbcTemplate j = new JdbcTemplate(dataSource);

j.query("SELECT bigClob FROM ...",

        new RowCallbackHandler() {

            public void processRow(final ResultSet rs) throws SQLException {

                String result = handler.getClobAsString(rs, "bigClob");

            }

        });

}

J'ai expérimenté avec l'extraction de tailles, mais en vain. Suis-je en train de faire quelque chose de mal? Est-il un moyen d'accélérer la récupération des CLOB lors de l'utilisation de JDBC?

Comment avez-vous déterminé ce n'est pas le réseau? Vous parlez de la configuration d'une nouvelle connexion JDBC (cher), 2 mo de données à lire à partir du disque, de l'envoyer sur le réseau et les frais généraux de la requête (ce qui n'est pas spécifiée). Je ne sais pas si 4s est si mauvais que ça en fonction de votre configuration réseau et configuration de base de données.
Précisions: je mesure dans unités de 100 afin de la peine initiale de la connexion ne compte pas. Le total du débit réseau rester en dessous de 2 mbit/s, donc je suppose que ce n'est pas de réseau lié.
Combien de temps le réel de la requête?
Environ 3 secondes. Je ne pense pas que la complexité de la requête a quelque chose à voir avec le débit, mais que je ne pas utiliser un first_rows indice ou quoi que ce soit ésotérique). La taille totale de l'ensemble de résultats est dans les dizaines de milliers d' - mesurée sur la durée de l'ensemble de la récupération des coûts initiaux (connexion JDBC, requête en retour) ne sont pas pertinents.
Pouvez-vous essayer de mesurer la différence entre la récupération de la colonne CLOB et une plus "normal" non-colonne indexée, mais en utilisant les mêmes tables, jointures et où-clauses? Cela devrait vous donner une indication de la météo le problème est causé par le CLOB ou de la ligne d'accès.

OriginalL'auteur yawn | 2009-10-06