Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo fornece informações sobre duas alterações que melhoram o desempenho do condutor.
Agrupamento de ações de despreparação para instruções preparadas
A partir da versão 6.2, é implementada uma melhoria de desempenho que minimiza as viagens de ida e volta do servidor ao SQL Server. Anteriormente, para cada consulta com prepareStatement, também era enviada uma chamada para desconfiguração. Agora, o driver agrupa as consultas não preparadas até ao limiar ServerPreparedStatementDiscardThreshold, que possui um valor padrão de 10.
Observação
Os utilizadores podem alterar o valor predefinido com o seguinte método: setServerPreparedStatementDiscardThreshold(int value)
Antes da versão 6.2, o driver sempre chama sp_prepexec. Na versão 6.2 e posteriores, para a primeira execução de uma instrução preparada, o driver chama sp_executesql e, para o resto, executa sp_prepexec e atribui-lhe um handle. Para mais informações, consulte a cache de metadados PreparedStatement.
A partir da versão 11.2, após a chamada inicial sp_executesql, o driver pode executar sp_prepare ou sp_prepexec para chamadas adicionais, dependendo do valor especificado na propriedade da cadeia de conexão prepareMethod. Para obter mais informações, consulte Definindo as propriedades de conexão.
Observação
Os utilizadores podem alterar o comportamento padrão para as versões anteriores de sempre chamar sp_prepexec definindo enablePrepareOnFirstPreparedStatementCall para true usando o seguinte método: setEnablePrepareOnFirstPreparedStatementCall(valor booleano)
Lista das novas APIs introduzidas com esta alteração, para agrupamento de instruções não preparadas
ConexãoSQLServer despreparar processamento em lote
| Novo Método | Description |
|---|---|
| int getDiscardedServerPreparedStatementCount() | Retorna o número de ações de despreparação atualmente pendentes. |
| void closeUnreferencedPreparedStatementHandles() | Obriga os pedidos não preparados para que quaisquer declarações preparadas pendentes e descartadas sejam executadas. |
| boolean getEnablePrepareOnFirstPreparedStatementCall() | Devolve o comportamento para uma instância de ligação específica. Se for falso, a primeira execução chama sp_executesql e não prepara uma declaração. Se ocorrer uma segunda execução, chama sp_prepare ou sp_prepexec e na verdade configura um handle de instrução preparado. Execuções posteriores chamam sp_execute. Este comportamento alivia a necessidade de sp_unprepare encerrar a instrução preparada se a instrução for executada apenas uma vez. O padrão desta opção pode ser alterado chamando setDefaultEnablePrepareOnFirstPreparedStatementCall(). |
| void setEnablePrepareOnFirstPreparedStatementCall(valor booleano) | Especifica o comportamento para uma instância de ligação específica. Se o valor for falso, a primeira execução invoca sp_executesql e não prepara uma instrução. Se ocorrer uma segunda execução, chama sp_prepare ou sp_prepexec e na verdade configura um handle de instrução preparado. Execuções posteriores chamam sp_execute. Este comportamento alivia a necessidade de sp_unprepare encerrar a instrução preparada se a instrução for executada apenas uma vez. |
| int getServerPreparedStatementDiscardThreshold() | Devolve o comportamento para uma instância de ligação específica. Esta configuração controla quantas ações de descarte pendentes (sp_unprepare) podem existir por ligação antes de ser executada uma chamada para limpar os controlos pendentes no servidor. Se a definição for <= 1, as ações de despreparar são executadas imediatamente após o encerramento da instrução preparada. Quando definidas para > 1, estas chamadas são agrupadas para evitar a sobrecarga de chamadas sp_unprepare com demasiada frequência. O padrão desta opção pode ser alterado chamando getDefaultServerPreparedStatementDiscardThreshold(). |
| void setServerPreparedStatementDiscardThreshold(valor int) | Especifica o comportamento para uma instância de ligação específica. Esta configuração controla quantas ações de descarte pendentes (sp_unprepare) podem existir por ligação antes de ser executada uma chamada para limpar os controlos pendentes no servidor. Se a definição for <= 1, as ações de despreparar são executadas imediatamente após o encerramento da instrução preparada. Quando definidas para > 1, estas chamadas são agrupadas para evitar sobrecarga de chamadas sp_unprepare com demasiada frequência. |
SQLServerDataSource desagrupar lote
| Novo Método | Description |
|---|---|
| void setEnablePrepareOnFirstPreparedStatementCall(boolean enablePrepareOnFirstPreparedStatementCall) | Se esta configuração for falsa, a primeira execução de uma instrução preparada chama sp_executesql e não prepara a instrução. Se ocorrer uma segunda execução, chama sp_prepare ou sp_prepexec e configura um handle de instrução preparado. Execuções posteriores chamam sp_execute. Este comportamento elimina a necessidade de sp_unprepare encerrar a declaração preparada se a instrução for executada apenas uma vez. |
| boolean getEnablePrepareOnFirstPreparedStatementCall() | Se esta configuração devolver falso, a primeira execução de uma declaração preparada chama sp_executesql e não prepara a declaração. Se ocorrer uma segunda execução, chama sp_prepare ou sp_prepexec e na verdade configura um handle de instrução preparado. Execuções posteriores chamam sp_execute. Este comportamento elimina a necessidade de sp_unprepare encerrar a declaração preparada se a instrução for executada apenas uma vez. |
| void setServerPreparedStatementDiscardThreshold(int serverPreparedStatementDiscardThreshold) | Esta configuração controla quantas ações de descarte pendentes (sp_unprepare) podem existir por ligação antes de ser executada uma chamada para limpar os controlos pendentes no servidor. Se a definição for <= 1, as ações de despreparar são executadas imediatamente após o encerramento da instrução preparada. Quando definidas para > 1, estas chamadas são agrupadas para evitar o sobrecusto de chamadas sp_unprepare com demasiada frequência |
| int getServerPreparedStatementDiscardThreshold() | Esta configuração controla quantas ações de descarte pendentes (sp_unprepare) podem existir por ligação antes de ser executada uma chamada para limpar os controlos pendentes no servidor. Se a definição for <= 1, as ações de despreparar são executadas imediatamente após o encerramento da instrução preparada. Quando definidas para > 1, estas chamadas são agrupadas para evitar a sobrecarga de chamadas sp_unprepare com demasiada frequência. |
Cache de metadados de instruções preparadas
A partir da versão 6.4, o driver Microsoft JDBC para SQL Server suporta cache de instruções preparadas. Antes da versão 6.4, se uma consulta já preparada e armazenada na cache for executada, chamar a mesma consulta novamente não precisa ser preparada novamente. O driver procura a consulta na cache para encontrar o handle e executa-a com sp_execute.
A cache de metadados da Instrução Preparada está desativada por defeito. Para o ativar, chame o seguinte método no objeto de conexão:
setStatementPoolingCacheSize(int value) //value is the desired cache size (any value bigger than 0)
setDisableStatementPooling(boolean value) //false allows the caching to take place
Por exemplo: connection.setStatementPoolingCacheSize(10)connection.setDisableStatementPooling(false)
Lista das novas APIs introduzidas com esta alteração, para cache de metadados de instruções preparadas
Cache de metadados SQLServerConnection
| Novo Método | Description |
|---|---|
| void setDisableStatementPooling(valor booleano) | Define o pooling de instruções como verdadeiro ou falso. |
| boolean getDisableStatementPooling() | Retorna true se o agrupamento de instruções estiver desativado. |
| void setStatementPoolingCacheSize(int value) | Especifica o tamanho da cache de instruções preparadas para esta conexão. Um valor < 1 significa que não há cache. |
| int getStatementPoolingCacheSize() | Devolve o tamanho da cache de instruções preparadas para esta conexão. Um valor < 1 significa que não há cache. |
| int getStatementHandleCacheEntryCount() | Devolve o número atual de handles de instruções preparadas agrupadas. |
| boolean estáCachingDeDeclaracoesPreparadasAtivado() | Se o agrupamento de instruções está ativado ou não para esta ligação. |
SQLServerDataSource cache de metadados
| Novo Método | Description |
|---|---|
| void setDisableStatementPooling(boolean disableStatementPooling) | Define o pooling de declarações como verdadeiro ou falso |
| boolean getDisableStatementPooling() | Retorna true se o agrupamento de instruções estiver desativado. |
| void setStatementPoolingCacheSize(int statementPoolingCacheSize) | Especifica o tamanho da cache de instruções preparadas para esta conexão. Um valor < 1 significa que não há cache. |
| int getStatementPoolingCacheSize() | Devolve o tamanho da cache de instruções preparadas para esta conexão. Um valor < 1 significa que não há cache. |
Consulte também
Melhorar o desempenho e a fiabilidade com o driver JDBCDesempenho do parâmetro em declarações preparadas