SQL Server Performance

Termino Tiempo de Espera

Discussion in 'Preguntas sobre SQL Server en Español.' started by fjac_pe, Jan 7, 2005.

  1. fjac_pe New Member

    Buenas, tengo un problema, en mi sistema manejo registro en gran escala y cuando un codigo es modificado por otro codigo, tengo que actualizar todo, en las primeras tablas problemas no tengo, pero hay una muy pesada, mas de 1 millon de registros, y en vb me sale que termino el tiempo de espera, si hago que el tiempo de espera aumente quizas not tendria problema pero si hago eso, pongo lento a todo el mundo, mi pregunta es la siguiente: ¿Existe una forma de ejecutar un procedimiento que se ejecute en el servidor y que mi sistema no este esperando respuesta?, que se ejecute a bajo nivel, pense en triguers, pero no se que tan rapido sera teniendo en cuenta que tengo mas de 30 usuarios en linea. Muchas Gracias.

    Otra consulta es recomendable no mantener conexiones activas con el sql, eso me enseñaron, pero cuando corto la conexion y la vuevo a conectar cuando quiero algo, tengo un error como si el servidor demorase en permitirme conectar, exactamente tengo el problema cuando hago un llamado a varios eventos en un tiempo corto de tiempo, que me recomiendan hacer, por ahora tengo todas las conexciones activas. Antes solicitaba un procedimiento, lo ejecutaba y mataba la conexion.

    Jesus Aguilar
  2. c_maldon Member

    No hay una única forma de hacer lo que necesitás.
    Te sugiero una:

    1 Crear un procedimiento que realice el cambio en las tablas.
    2 Desde VB calendarizarlo como un JOB de Agente SQL
    3 Desde VB Darle Start al Job

    El Job correrá en SQL Server hasta que termine, vb tomará el control apenas termine de dar start al Job.

    El problema de la performance es otro tema, debe analizarse el procedimiento almacenado y ver que esté optimizado.
    Tambien podés calendarizerlo para que corra en horarios nocturnos.


  3. fjac_pe New Member

    No me explique bien, esta bien la salida que me das, pero no puedo hacerlo al final del dia, ya que es un dato de vital importancia, es un dato de produccion, y tiene que ser actualizado en el momento, mas bien tenia una idea pero no se si estara bien, que tal si creo una tabla donde inserte el codigo a ser modificado con el nuevo codigo, y es posible hacer que un trabajo se desencadene en el evento insertar en esa tabla, es como hacer que se ejecute el trabajo pero por base de datos sin necesidad que yo haga algo, similar a los triguers, que por cierto no se su manejo como deberia.

    Otra consulta es recomendable no mantener conexiones activas con el sql, eso me enseñaron, pero cuando corto la conexion y la vuevo a conectar cuando quiero algo, tengo un error como si el servidor demorase en permitirme conectar, exactamente tengo el problema cuando hago un llamado a varios eventos en un tiempo corto de tiempo, que me recomiendan hacer, por ahora tengo todas las conexciones activas. Antes solicitaba un procedimiento, lo ejecutaba y mataba la conexion.

    Jesus Aguilar
  4. fjac_pe New Member

    Otra consulta mas, como ejecuto un trabajo desde el analizador de consultas, tengo pensado insertar en una tabla los codigos a cambiar y que se desencadene el trabajo, o mejor, si al insertar en la tabla como hago para desencadenar el trabajo, en fin, crees que mejor manejo triguers, si es eso, como hago porque la actualizacion es 3 bases de datos
  5. c_maldon Member

    La sugerencia que te di hace exactamente lo que pedís,
    Ejecuta en el servidor y VB se desentiende, o sea que no espera hasta que termine su ejecución, pero no es necesario esperar hasta la noche, se ejecuta cuando vos lo solicitas desde VB.

    La alternativa de ejecutarlo nocturno era otra posibilidad, pero ya que no podes usarla la primera sugerencia sigue vigente.

    Los triggers no van a solucionar tu problema ya que VB esperará hasta que todos los cambios se realicen y puede darte nuevamente timeout.

    Además desde un procedimiento podés actualizar las tres bases de datos sin problemas.

  6. fjac_pe New Member

    Disculpame la ignorancia, como ejecuto un trabajo desde el analizador de consultas o como lo invoco de vb, veo la ayuda algo de object.start() pero no funciona, agradeceria mucho me orienten en la ejecucion de trabajos. gracias
  7. c_maldon Member

    Para arrancar un job desde el analizador de consultas ejecuta:



    EXEC msdb..sp_start_job 'NOMBRE_DEL_JOB'
  8. fjac_pe New Member

    Ok, gracias,tambien encontre ese store, esperemos me sirva del todo, ya hice mi prueba, un trabajo que llama a un store, y este a su vez convoca los datos guardados en una tabla donde indico el codigo anterior con el nuevo codigo que lo reemplazara. Pero en caso tenga un problema con el trabajo, hay una manera que sql me responda luego el resultado, mi amigo comento que haga que sql genere un archivo de error y en vb tenga un timer que chequee ese archivo y si tiene algo, que mande mensaje de error en mi sistema, es la unica salida?.


    Gracias por tu ayuda, me fue muy util para orientarme a lo que queria y lo logre.

    Jesus Aguilar
  9. c_maldon Member

    Para consultar el estado utilizá el procedimiento sp_help_job

    msdb..sp_help_job NULL, <NOMBRE_DEL_JOB> ,'JOB'

    y consultá la columna "current_execution_status" que
    mientras se ejecuta estará en 1.

    Cuando deje de estar en 1 consultá la columna "last_run_outcome"
    que te dará el resultado de la última ejecución del trabajo:

    0 = Error
    1 = Éxito
    3 = Cancelado
    5 = Desconocido

Share This Page