Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server
Sommario
Un errore "Timeout scaduto" in SQL Server indica che una connessione o un'operazione di comando non è stata completata entro l'intervallo di timeout consentito dall'applicazione client, quindi il client ha annullato l'operazione invece di attendere indefinito. Questo articolo consente di identificare se si sta raggiungendo un timeout di connessione o una query o un timeout del comando. Vengono illustrati i messaggi di errore che possono verificarsi con un timeout di connessione e il servizio, la porta, il firewall e la risoluzione dei nomi tipici causano timeout della connessione. Usare questo articolo quando un'applicazione client si connette in modo intermittente o coerente a un'istanza di SQL Server con errori di timeout della connessione.
Per risolvere gli errori di timeout delle query o dei comandi, vedere Risolvere gli errori di timeout delle query.
Note
Prima di iniziare la risoluzione dei problemi, controllare i prerequisiti ed esaminare l'elenco di controllo.
Messaggi di errore di timeout scaduti durante la connessione a SQL Server
Quando si verificano problemi di timeout scaduti, viene visualizzato uno o più dei messaggi di errore seguenti:
-
Timeout. Il tempo disponibile è scaduto prima del completamento dell'operazione o il server non risponde.
-
System.Data.SqlClient.SqlException (0x80131904): Timeout connessione scaduto. Il periodo di timeout è scaduto durante il tentativo di utilizzare il riconoscimento dell'handshake di pre-accesso. Ciò potrebbe verificarsi perché l'handshake di pre-accesso ha avuto esito negativo oppure il server non è stato in grado di rispondere in tempo. Il tempo impiegato nel tentativo di connettersi a questo server era [Pre-Login] initialization=23; handshake=14979;
System.ComponentModel.Win32Exception (0x80004005): L'operazione di attesa è scaduta. -
System.Data.SqlClient.SqlException (0x80131904): Timeout scaduto. Il tempo disponibile è scaduto prima del completamento dell'operazione o il server non risponde. System.ComponentModel.Win32Exception (0x80004005): L'operazione di attesa è scaduta.
-
Il timeout di connessione è scaduto. Il periodo di timeout è scaduto durante il tentativo di utilizzare il riconoscimento dell'handshake di pre-accesso. Ciò potrebbe verificarsi perché l'handshake di pre-accesso ha avuto esito negativo oppure il server non è stato in grado di rispondere in tempo.
La durata trascorsa durante il tentativo di connessione a questo server era [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, Errore: -2). -
System.InvalidOperationException: timeout scaduto. Il periodo di timeout è scaduto prima di aver ottenuto la connessione dal pool.
Se le connessioni non vengono chiuse correttamente, potrebbero verificarsi errori. Questi errori si verificano perché tutte le connessioni in pool sono in uso e viene raggiunta la dimensione massima del pool. È possibile evitare questi errori se si seguono i passaggi descritti nell'articolo relativo al pool di connessioni esaurito. Per altre informazioni sul funzionamento del pooling, vedere pool di connessioni SQL Server (ADO.NET).For more information about how pooling works, see SQL Server connection pooling (ADO.NET).
Note
Il secondo e il terzo errore si verificano quando viene installato .NET Framework 4.5 o versione successiva.
Determinare quale tipo di timeout si è verificato
Esistono due tipi di problemi di timeout comunemente osservati con le applicazioni di database:
- Timeout della connessione (15 secondi per impostazione predefinita)
- Timeout query o comando (30 secondi per impostazione predefinita)
Questi due problemi sono molto diversi in natura perché provengono da origini diverse e si verificano in fasi indipendenti separate di un'interazione dell'applicazione di database. Si verifica un timeout della connessione quando si verifica un errore di connessione iniziale al motore di database. Un timeout di query o di comando, d'altra parte, si verifica molto più avanti nella vita di un'interazione dell'applicazione con un server di database. La connessione iniziale è stata eseguita correttamente, ma il completamento di una query inviata al server di database richiede molto tempo.
Prima della risoluzione dei problemi, visualizzare lo stack di chiamate completo dei messaggi di errore per determinare il tipo di errore.
Vedere l'esempio seguente di uno stack di chiamate di un timeout di connessione:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable) at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open()SqlConnection.Openindica che il client sta tentando di aprire una connessione e pertanto non è correlato a una query.Vedere l'esempio seguente di uno stack di chiamate di una query o di un timeout del comando:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteScalar()La
SqlCommandclasse viene usata per lavorare con una query, non con una connessione. IlExecuteScalarmetodo viene usato per eseguire una query. È anche possibile visualizzare altri elementi, ad esempio oExecuteReaderExecuteNonQuery.Se si verifica un errore di timeout della query o del comando, vedere Risolvere gli errori di timeout delle query.
Risolvere gli errori di timeout della connessione in SQL Server
Se si verifica un errore di timeout della connessione, seguire questa procedura:
Aumentare il parametro di timeout della connessione.
Se si usa un'applicazione per connettersi a SQL Server, aumentare i valori dei parametri di timeout di connessione pertinenti e verificare se la connessione ha esito positivo. Ad esempio, se si usa
System.Data.SqlClient, impostare la proprietà SqlConnection.ConnectionTimeout su 30 o su un valore superiore. Se si usa il Microsoft corrente. Il driver Data.SqlClient imposta la proprietà SqlConnection.ConnectionTimeout equivalente.Note
Se si usano altri provider, selezionare Homepage per la programmazione client SQL.
Se si usa SQL Server Management Studio (SSMS), selezionare la scheda Proprietà connessione nella finestra di dialogo Connetti al server e impostare Timeout connessione su un valore superiore.
Se la connessione ha esito positivo, si tratta di un problema di rete. Collaborare con l'amministratore di rete per risolvere il problema. Dopo la risoluzione, è possibile ripristinare le impostazioni predefinite nell'applicazione.
Note
L'aumento del timeout della connessione nell'applicazione è un metodo possibile, ma non è una risoluzione a lungo termine. Ciò è dovuto al fatto che la connessione si verifica rapidamente (in genere entro pochi millisecondi) quando si tenta di connettersi a un'origine dati.
Errori di timeout del servizio, della porta e del protocollo
La tabella seguente elenca SQL Server servizio, porta e protocollo di rete causa errori di timeout scaduti e come risolverli. Per altri suggerimenti e suggerimenti, vedere Risoluzione dei problemi: Timeout scaduto.
| Cause tipiche | Risoluzioni |
|---|---|
| Il servizio SQL Server nel server non è in esecuzione. | Avviare l'istanza del motore di database di SQL Server. |
| La porta TCP/IP per l'istanza di motore di database è bloccata da un firewall. | Configurare il firewall per consentire l'accesso al motore di database. |
| Il motore di database non è in ascolto sulla porta 1433. Questo perché la porta viene modificata o non è l'istanza predefinita e il servizio SQL Server Browser non è in esecuzione. | Avviare il servizio SQL Server Browser o specificare un numero di porta TCP/IP da connettere con il Sqlcmd -S <ip_addres>,<port> comando . Nel log degli errori trovare il numero di porta su cui è in ascolto SQL Server. Per altre informazioni, vedere Configurare un server per l'ascolto su una porta TCP specifica. |
| Il servizio SQL Server Browser è in esecuzione ma la porta UDP 1434 è bloccata da un firewall. | Configurare il firewall per consentire l'accesso alla porta UPD 1434 nel server o specificare il numero di porta TCP/IP da connettere. |
| Il client e il server non sono configurati per l'uso dello stesso protocollo di rete. | Assicurarsi che il server e i computer client dispongano di almeno un protocollo abilitato in comune usando Gestione configurazione SQL Server. Ad esempio, se il client si connette usando socket TCP/IP, ma SQL Server è in ascolto solo sulle named pipe, non è possibile stabilire alcuna connettività. |
La risoluzione dei nomi e della rete provoca errori di timeout della connessione
La tabella seguente elenca le cause a livello di rete di errori di timeout scaduti, ad esempio errori di risoluzione dei nomi DNS e problemi di routing TCP/IP e come risolverli.
| Cause tipiche | Risoluzioni |
|---|---|
| Il nome del server è stato digitato in modo non corretto. | Riprovare con il nome del server corretto. |
| La rete non è in grado di risolvere il nome del server in un indirizzo IP. Testare questo problema usando i programmi ping o telnet. | Risolvere il problema di risoluzione dei nomi del computer nella rete o connettersi al server usando l'indirizzo IP. Questo problema non è un problema SQL Server. Per assistenza, vedere la documentazione di Windows o contattare l'amministratore di rete. Usare il comando seguente per testare la connettività:telnet <ServerName> [<Port>]telnet <IP_Address> <Port> Se l'uso di un indirizzo IP funziona, ma il nome del server non funziona, si tratta di un problema di risoluzione dei nomi. |
| La rete non può connettersi usando l'indirizzo IP. Testare questo problema usando il programma ping, telnet o tracert . | Risolvere il problema TCP/IP nella rete. Questo problema non è un problema SQL Server. Per assistenza, vedere la documentazione di Windows o contattare l'amministratore di rete. Per la risoluzione dei problemi di rete più avanzata, vedere 0300 Problemi di rete intermittenti o periodici. |
Contenuti correlati
- Risolvere i problemi di connettività in SQL Server
- Risolvere gli errori di timeout delle query
- Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server
- Raccogliere dati per risolvere i problemi di connettività di SQL Server
- Problema di rete intermittente o periodico
- Microsoft ADO.NET per SQL Server