2009-05-12 34 views
12

Tengo acceso de RO en una vista de SQL. Esta consulta a continuación expira. ¿Cómo evitar esto?Cómo evitar el tiempo de espera de consulta SQL

select 
    count(distinct Status) 
from 
    [MyTable] with (NOLOCK) 
where 
    MemberType=6 

El mensaje de error que consigo es:

Msg 121, Level 20, State 0, Line 0

A transport-level error has occurred when receiving results from the server (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

+0

¿Cuánto tiempo dura antes de obtener el error? – codeulike

+0

funciona hasta 15-20 minutos –

+0

Eso es mucho tiempo. ¿[MyTable] está en su ejemplo sobre una Tabla o una Vista? Si se trata de una Vista, publique la Definición de la vista y podemos intentar sugerir optimizaciones. – codeulike

Respuesta

6

Aunque existe claramente una especie de inestabilidad de la red o algo interferir con su conexión (15 minutos es posible que usted podría estar cruzando una frontera NAT o algo en su red está cayendo la sesión), I ¿pensaría que quieres una consulta tan simple?) para regresar bien dentro de cualquier timeoue anticipado (como 1s).

Me gustaría hablar con su DBA y obtener un índice creado en las tablas subyacentes en MemberType, Estado. Si no hay una sola tabla subyacente o estas son más complejas y están creadas por la vista o UDF, y está ejecutando SQL Server 2005 o superior, haga que considere indexar la vista (materializando básicamente la vista de forma indexada).

2

Se puede poner un índice en MemberType.

+0

Si usa una vista, como se dijo, esto será bastante difícil ... – MicSim

+0

El acceso RO es probablemente más problemático, pero podría pedirle a DBA que lo agregue a la tabla. – JeffO

1

¿Tiene un índice definido sobre la columna Estado y la columna MemberType?

21

Tu duda está bien. "El período de tiempo de espera del semáforo ha expirado" es un error de red, no un tiempo de espera de SQL Server.

p. Ej. ver http://support.microsoft.com/kb/325487

Aparentemente hay algún tipo de problema de red entre usted y el Servidor SQL.

editar: Sin embargo, aparentemente la consulta se ejecuta durante 15-20 minutos antes de dar el error de red. Eso es un tiempo muy largo, por lo que tal vez el error de red podría estar relacionado con el largo tiempo de ejecución. La optimización de la Vista subyacente podría ayudar.

Si [MiTabla] en su ejemplo es una Vista, ¿puede publicar la Definición de la vista para que podamos intentar optimizarla?

3

Compruebe el registro de eventos de su sistema Windows para ver si hay errores específicos para "Origen del evento: Dhcp". Es muy probable que se trate de un error de red relacionado con DHCP. El tiempo de arrendamiento de dirección expiró más o menos. No debería ser un problema relacionado con el SQL Server o la consulta en sí.

Simplemente busque en Internet "El tiempo de espera del semáforo ha expirado" y obtendrá muchas sugerencias sobre lo que podría ser una solución para su problema. Desafortunadamente, no parece haber la solución para este problema.

+0

Sé que esto fue hace cinco años, pero ¿por qué asumirías que se trata de un problema de DHCP en una red fija ...?Si está ejecutando un servidor de base de datos, probablemente tenga un esquema de dirección fijo. Siento como si esto no fuera una respuesta. –

0

¿Cuántos registros tienes? ¿Hay algún índice en la mesa? Prueba esto:

;with a as (
select distinct Status 
from MyTable 
where MemberType=6 
) 
select count(Status) 
from a 
Cuestiones relacionadas