SQL Server Performance

Procesamiento en Paralelo

Discussion in 'Preguntas sobre SQL Server en Español.' started by ngsnico75, Jan 28, 2004.

  1. ngsnico75 New Member

    Necesito su ayuda

    Como hago en SQL Server para que una consulta pueda ejecutarse en varios procesadores al mismo tiempo.

    El problema es que el costo del paralelismo en la configuración del SQL por defecto es 5. Este es el valor de comparación que utiliza el SQL para tomar la decisión de dividir una consulta en varios procesadores. No lo puedo colocar en 0 porque estaría obligango al manejador a que cualquier consulta la ejecute en varios procesadores.

    Lo que quisiera saber es si existe algun comando en SQL para hacer esto ó si hay que modificar algun parametro en la configuración del manejador ó si existe una solución para este problema.

    saludos...






    Luis A.
  2. ngsnico75 New Member

    Otro detalle.

    El query es dinamico, y esta asignado en una variable string. cuando lo ejecuto su costo es 0 porque el manejador no lo interpreta como una sentencia Sql, sino como un string.
    Entonces el costo de la variable string es 0 y menor al de comparación. Me imagino que por eso no lo manda a multiproceso.

    No tengo idea de como resolver este problema.
    Si tienen alguna posible respuesta o opción se la sabre agradecer



    Luis A.
  3. Luis Martin Moderator

    Hola Luis.

    En la configuración del SQL, en procesadores, cuántos tienes para disponible para procesamiento en paralelo?



    Luis Martin
    Moderator
    SQL-Server-Performance.com
  4. ngsnico75 New Member

    8 procesadores.

    Luis A.
  5. Luis Martin Moderator

    Ok. En ese caso SQL Server realiza los procesos de SQL utilizando el paralelismo en forma automática.
    Para cada sql que se ejecute dinámico o no, SQL Server genera el mejor plan de ejecución, y es posible que ese plan no incluya el uso de paralelismo.
    Es más, en muchos casos estudiados en éste Forum, ha sido mejor dejar un solo procesador para evitar el paralelismo ya que mejora la performance general.

    Con respecto al sql dinámico que se interpreta como un string, lo que tienes que haces es copiar la sentencia sql solamente al SQL Analyzer (Analizador de Consultas) y alli ver cual es el plan que se utiliza.

    Por ejemplo:

    EXEC ('select * from....')

    Esta instrucción pasada al SQL Analyzer no muestra ningún plan por la razón anterior, pero si copias solamente:

    select * from....

    al Analyzer, podrás ver cual es el plan de ejecución



    Luis Martin
    Moderator
    SQL-Server-Performance.com
  6. ngsnico75 New Member

    quote:Originally posted by LuisMartin

    Ok. En ese caso SQL Server realiza los procesos de SQL utilizando el paralelismo en forma automática.
    Para cada sql que se ejecute dinámico o no, SQL Server genera el mejor plan de ejecución, y es posible que ese plan no incluya el uso de paralelismo.
    Es más, en muchos casos estudiados en éste Forum, ha sido mejor dejar un solo procesador para evitar el paralelismo ya que mejora la performance general.

    Con respecto al sql dinámico que se interpreta como un string, lo que tienes que haces es copiar la sentencia sql solamente al SQL Analyzer (Analizador de Consultas) y alli ver cual es el plan que se utiliza.

    Por ejemplo:

    EXEC ('select * from....')

    Esta instrucción pasada al SQL Analyzer no muestra ningún plan por la razón anterior, pero si copias solamente:

    select * from....

    al Analyzer, podrás ver cual es el plan de ejecución



    Luis Martin
    Moderator
    SQL-Server-Performance.com

    Luis A.
  7. ngsnico75 New Member

    Lo que dices es cierto, si coloco el codigo del query en el analizador deberia arrojar el costo.

    El problema es que necesito el query dinamico y la unica forma es almacenarlo en una variable string, que es el otro problema que presenta el manejador al no poder comparar el costo de la variable string que lo que contiene es un query.

    Al comparar el costo de la variable = 0 con el umbral de configuración no lo coloca multiproceso.

    No existe manera alguna de colocar alguna instrucción en sql para forzar el multiproceso?

    Luis A.
  8. Luis Martin Moderator

    Me parece que existe una confusión.
    Que el SQL Analyzer no muestre el plan de ejecución cuando el códico está dinámico, no quiere decir que cuando realmente lo ejecute no utilize el mejor plan, contenga o no paralelismo.

    Qué muestra el plan de ejecución con solamente el códico sin el exec?
    Pregunto esto por que no lo alcanzo a entender.




    Luis Martin
    Moderator
    SQL-Server-Performance.com
  9. ngsnico75 New Member

    La pregunta es si alguna forma de forzar el paralelismo en SQL de ejecuciónde una conculta.

    Luis A.
  10. Luis Martin Moderator

    Ok. Dame un poco de tiempo.


    Luis Martin
    Moderator
    SQL-Server-Performance.com
  11. Luis Martin Moderator

    Luis:

    No hay forma de forzar a un query cualquiera a usar más procesadores.
    Si la configuración está definida para que el paralelismo sea utilizando los 8 procesadores, entonces SQL decide si los utiliza o no.

    Por el contrario sí se puede limitar el uso de paralelismo para toda instrucción SQL o para alguna en particular.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

Share This Page