Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

error de ODBC!!!

Estas en el tema de error de ODBC!!! en el foro de SQL Server en Foros del Web. Hola a todos!!!....nuevamente por aqui con una duda...resulta que estoy haciendo una consulta entre tres tablas que se encuentran en distintos servidores (3)...y cuando ejecuto ...
  #1 (permalink)  
Antiguo 01/03/2007, 13:36
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta error de ODBC!!!

Hola a todos!!!....nuevamente por aqui con una duda...resulta que estoy haciendo una consulta entre tres tablas que se encuentran en distintos servidores (3)...y cuando ejecuto dicha consulta me marca el siguiente error:

Microsoft][ODBC SQL Server Driver]Timeout expired

que puedo hacer, ya que cuando ejecuto la consulta por un par de horas si me muestra el resultado...pero si la hago por dia me manda ese error...como soluciono esto?...agradezco la ayuda!!!!
  #2 (permalink)  
Antiguo 01/03/2007, 16:06
 
Fecha de Ingreso: marzo-2006
Mensajes: 15
Antigüedad: 18 años
Puntos: 0
Re: error de ODBC!!!

Mary:

El rendimiento de una consulta entre distintos servidores, aunque estén enganchados con Linked Server es horrible. Incluso el rendimiento disminuye considerablemente si se trata de distintas bases de datos.

Por lo mismo te recomiendo como primera medida de optimización generar un DTS para trasladar los datos desde los otros servidores mediante un DTS. o más fácil aún mediante tablas temporales. Considera traspasar los datos realmente útiles de acuerdo a un filtro (where fecha=... código = ...), que sea efectivamente el filtro de la consulta que estás realizando.

Una vez que traspases los datos a tablas temporales, se pueden establecer las relaciones de manera de optimizar aún más.

Con esto se debiera disminuir radicalmente el tiempo de ejecución de la consulta.

Ahora bien, una consulta en general no debiera sobrepasar los 30 segs. Si ya se han tomado todas las medidas del caso (tablas temporales, índices, relaciones, etc.) El driver de odbc, el oledb y .net inclusive utilizan un objeto llamado Commmand. Este objeto te permite establecer el tiempo límite de ejecución de una consulta (en segundos) y por defecto toma el valor 30.

Cuando se establece con valor 0 no considera el tiempo de timeout:
...
objCommand.Timeout=0
...


Saludos!
  #3 (permalink)  
Antiguo 01/03/2007, 17:34
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta Re: error de ODBC!!!

Hola jyefi!!!...agradezco tus comentarios...

Asi es, mis servidores ya estan ligados...y acerca de lo DTS no se hace...y si estoy utilizando filtros...aunque se trata de unos 8 mil datos...en cuestion de la tablas temporales te refieres a utilizar vistas y luego todavia filtrar mas aun sobre ellas???...y si es asi, como puedo guardar las vistas que impliquen 3 tablas de 3 servidores distintos, nececita mi usuario tener los permisos para ello???

Código:
"Ahora bien, una consulta en general no debiera sobrepasar los 30 segs. Si ya se han tomado todas las medidas del caso (tablas temporales, índices, relaciones, etc.) El driver de odbc, el oledb y .net inclusive utilizan un objeto llamado Commmand. Este objeto te permite establecer el tiempo límite de ejecución de una consulta (en segundos) y por defecto toma el valor 30."
Cuando se establece con valor 0 no considera el tiempo de timeout:
...
objCommand.Timeout=0
...
A que te refieres con los drivers de obdc, oledb y net?

Y como utilizo el comando objCommand.Timeout=0 dentro de mi consulta??
  #4 (permalink)  
Antiguo 02/03/2007, 06:05
 
Fecha de Ingreso: marzo-2006
Mensajes: 15
Antigüedad: 18 años
Puntos: 0
Mensaje Re: error de ODBC!!!

Hola mary!

Las vistas son objetos precompilados que optimizan un poco el rendimiento, pero no realizan copias de los datos que estás utilizando.

El problema con consultar desde 3 servidores distintos es que el motor tiene que interactuar con los 3 para resolver la consulta. Por ello lo más recomendable trasladar los datos que vas a utilizar para consultar a un sólo servidor.

Cómo? utilizando tablas temporales.
Puedes enviar la consulta que estás utilizando? (así te podría explicar mejor)

Supongo que cuando ejecutas la consulta y se demora 2 horas lo haces vía analizador de consultas (o Query analyzer), y lo que estás programando está en Visual basic, PHP u otro lenguaje.



mándame los códigos
  #5 (permalink)  
Antiguo 02/03/2007, 17:33
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: error de ODBC!!!

Hola jyefi nuevamente!!!...te mando la consulta que hago en sql:

Código:
SELECT     TOP 100 PERCENT dbo.E1.CODE, dbo.E1.DIGITO, Msap_1.Medida, Msap_1.Linea, dbo.CAT_TRADE.EQUIPMENT, 
                      dbo.CAT_TRADE.SIDEWALL, MAX(dbo.E1.WEIGHT) AS PPROM, COUNT(dbo.E1.CODE) AS CANTIDAD, MIN(dbo.E1.FECHC) 
                      AS FECHCMIN, dbo.E1.WAREHOUSE
FROM         dbo.E1 LEFT OUTER JOIN
                      dbo.CAT_TRADE ON dbo.E1.DIGITO = dbo.CAT_TRADE.DIGITO LEFT OUTER JOIN
                      [SERV-BCODE].Rast.dbo.opUnic opUnic_1 LEFT OUTER JOIN
                      SERV_MONIT.Monitoreo.dbo.Msap Msap_1 ON opUnicos_1.CodComer = Map_1.CodComer ON 
                      dbo.E1.IDETIQ = opUnic_1.IdEtiq
WHERE     (dbo.E1.FECHC > '2/26/2007 00:00:00') AND (dbo.E1.FECHC < '2/26/2007 23:59:00')
GROUP BY dbo.E1.CODE, dbo.ES1.DIGITO, dbo.ES1.WAREHOUSE, Msap_1.Medida, Msap_1.Linea, 
                      dbo.CAT_TRADE.EQUIPMENT, dbo.CAT_TRADE.SIDEWALL
HAVING      (dbo.E1.CODE > '0') AND (dbo.E1.WAREHOUSE = 1)
ORDER BY dbo.E1.CODE, Masap_1.Medida, Msap_1.Linea
Y en mi aplicacion hago varias consultas de este tipo, esta programada en ASP...ojala con esto me puedas orientar... ....gracias!!!
  #6 (permalink)  
Antiguo 05/03/2007, 11:02
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 20 años, 10 meses
Puntos: 25
Re: error de ODBC!!!

En las propiedades del Linked Server tienes la opción llamada Collation Compatible. Esa opción hace que el desempeño sea un poco mejor, pero asume que usas el mismo collation entre el linked server y tu servidor local.

Si lo server tienen el mismo collation y esa opción no está activada prueba hacerlo.

Por otro lado, la demora del query es horrenda. ¿Cuantos registros tienen las tablas? Me parece demasiado tiempo a menos que hables de tablas de más de 100,000 registros pasando por Internet o la WAN.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 08/03/2007, 11:13
 
Fecha de Ingreso: septiembre-2006
Mensajes: 161
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: error de ODBC!!!

Hola nuevamente!!!!...pues sigo sin solucionar el problema con el tiempo de espera...lo raro es que si hago la consulta en el query analizer si la ejecuta y me muestra el resultado...pero cuando la ejecuto en el enterprise manager no la realiza y me muestra el error de

"Microsoft][ODBC SQL Server Driver]Timeout expired"

y por lo tanto tampoco me muestra el resultado en la aplicacion web (asp)...por otro lado ayer realice la consulta de dicho dia y me mostro el resultado sin problema...eran casi 4 mil datos...pero al querer ejecutar la consulta del dia o dias anteriores...nuevamente fallaba...por que solo se ejecuto la consulta del dia actual y las otras no??

Ademas cuando salio el error y le di click en "help" me recomendaba revisar mi odbc:

"ODBC error: <0s>.
An ODBC error has been generated. You might have deleted a record that has a foreign key value related to it, or you might have violated a check constraint.
For details, refer to your ODBC documentation."

Revise el OBDC del servidor local y estas son las caracteristicas:

Data Source Name: Local Server
Código:
Data Source Description:
Server: (local)
Database: (Default)
Lenguaje (Default)
Traslate Character Data: Yes
Log Long Running Queries: No
Log Driver Statistics: No
Use Integrated Security: Yes
Use Regional Settings: Yes
Repared Statements Option: Drop Temporary procedures on disconnect
Use Failover Server: No
Use ANSI Quoted Identifiers: Yes
Use ANSI Null, Panddings and Warnings: Yes
Data Encryption: No
14:29 03/07/2007
Tambien permite hacer conexiones remotas con otros servidores y el valor del query time se encuentra en "0"

Con respecto a los servidores remotos vinculados revise y en ambos tengo el valor de cero tanto para el connection timeout y el query timeout.

Inclusive en la alicacion de ASP le puse la instruccion de

<% Server.ScriptTimeOut = 1800 %>

la cual prolonga el tiempo de consulta (segundos)...pero nada ha funcionado y sigo con el mismo error...que puedo hacer?...que me falta??...ayuda por favor!!!...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:36.