Condividi tramite


Utilizzo del buffer adattivo

Il buffer adattivo è una nuova funzionalità del driver JDBC per Microsoft SQL Server 2005 versione 1.2 ed è progettato per recuperare qualsiasi tipo di dati con valori di grandi dimensioni senza l'overhead dei cursori server.

In genere, quando il driver JDBC per Microsoft SQL Server 2005 esegue una query, tutti i risultati vengono recuperati dal server e caricati nella memoria dell'applicazione. Sebbene questo approccio consenta di ridurre al minimo l'utilizzo delle risorse in SQL Server, è possibile che venga generato un errore di tipo OutOfMemoryError nell'applicazione JDBC per le query con risultati di dimensioni molto grandi.

Per consentire la gestione di risultati di dimensioni molto grandi da parte delle applicazioni, il driver JDBC per Microsoft SQL Server 2005 versione 1.2 offre il buffer adattivo. Un sviluppatore di applicazioni può utilizzare il buffer adattivo con un'istruzione per i motivi seguenti:

  • La query produce un set di risultati di dimensioni molto grandi: l'applicazione può eseguire un'istruzione SELECT che produce più righe di quante possano essere archiviate in memoria. Nelle versioni precedenti, l'applicazione utilizzava un cursore server per evitare un errore di tipo OutOfMemoryError. Nella versione 1.2 l'applicazione può invece utilizzare il buffer adattivo. Il buffer adattivo consente di passare in modalità forward-only di sola lettura un set di risultati anche molto grande senza che sia necessario un cursore server.

  • La query produce valori delle colonne SQLServerResultSet o del parametro OUT SQLServerCallableStatement di dimensioni molto grandi: l'applicazione può recuperare un singolo valore (colonna o parametro OUT) troppo grande per essere caricato interamente nella memoria dell'applicazione. Il buffer adattivo consente all'applicazione client di recuperare tale valore come flusso, utilizzando il metodo getAsciiStream, getBinaryStream, o getCharacterStream. L'applicazione recupera il valore da SQL Server leggendolo dal flusso.

Impostazione del buffer adattivo

Un'applicazione può richiedere l'utilizzo del buffer adattivo nell'esecuzione di un'istruzione in tre modi:

Quando i valori di grandi dimensioni vengono letti una volta utilizzando i metodi get<Type>Stream e viene eseguito l'accesso alle colonne ResultSet e ai parametri OUT CallableStatement nell'ordine restituito da SQL Server, il buffer adattivo consente di ridurre al minimo l'utilizzo della memoria dell'applicazione durante l'elaborazione dei risultati. Quando si utilizza il buffer adattivo, si verifica quanto indicato di seguito:

  • I metodi get<Type>Stream definiti nelle classi SQLServerResultSet e SQLServerCallableStatement restituiscono per impostazione predefinita flussi che possono essere letti una sola volta, sebbene possano essere reimpostati, se contrassegnati dall'applicazione. Per applicare il metodo reset al flusso, l'applicazione deve prima chiamare il metodo mark su tale flusso.

  • I metodi get<Type>Stream definiti nelle classi SQLServerClob e SQLServerBlob restituiscono flussi che possono essere sempre spostati nella posizione iniziale del flusso senza chiamare il metodo mark.

Quando l'applicazione utilizza il buffer adattivo, i valori recuperati dai metodi get<Type>Stream possono essere recuperati una sola volta. Se si tenta di chiamare qualsiasi metodo get<Type> sulla stessa colonna o sullo stesso parametro dopo avere chiamato il metodo get<Type>Stream dello stesso oggetto, viene generata un'eccezione con il messaggio "Accesso ai dati eseguito. Dati non disponibili per questa colonna o questo parametro".

Riduzione al minimo dell'utilizzo della memoria dell'applicazione

Per ridurre al minimo l'utilizzo della memoria da parte dell'applicazione, gli sviluppatori devono attenersi alle importanti linee guida seguenti:

  • Evitare di utilizzare la proprietà della stringa di connessione selectMethod=cursor per consentire all'applicazione di elaborare un set di risultati di dimensioni molto grandi. La funzionalità di buffer adattivo del driver JDBC per Microsoft SQL Server 2005 versione 1.2 consente alle applicazioni di elaborare set di risultati forward-only di sola lettura di dimensioni molto grandi senza utilizzare un cursore server.

  • Leggere i valori binari o di testo di grandi dimensioni come flussi utilizzando il metodo getAsciiStream, getBinaryStream, o getCharacterStream anziché il metodo getBlob o getClob. Nella versione 1.2 la classe SQLServerCallableStatement fornisce nuovi metodi get<Type>Stream da utilizzare a questo scopo.

  • Assicurarsi che le colonne con valori potenzialmente grandi siano posizionate per ultime nell'elenco di colonne in un'istruzione SELECT e che i metodi get<Type>Stream di SQLServerResultSet vengano utilizzati per accedere alle colonne nell'ordine in cui vengono selezionate.

  • Assicurarsi che i parametri OUT con valori potenzialmente grandi siano dichiarati per ultimi nell'elenco di parametri nel linguaggio SQL utilizzato per creare SQLServerCallableStatement. Assicurarsi inoltre che i metodi get<Type>Stream di SQLServerCallableStatement vengano utilizzati per accedere ai parametri OUT nell'ordine in cui vengono dichiarati.

  • Evitare di eseguire simultaneamente più di un'istruzione nella stessa connessione. Se viene eseguita un'altra istruzione prima dell'elaborazione dei risultati dell'istruzione precedente, i risultati non elaborati potrebbero venire memorizzati nel buffer della memoria dell'applicazione.

Vedere anche

Altre risorse

Utilizzo del driver JDBC per il miglioramento di prestazioni e affidabilità