locked
SQL GET 100% CPU RRS feed

  • Pregunta

  • I have a troubre with SQL,  it start when the development people start a simple query, the SQL start to get the 100% of cpu of server,

    I have a web aplication using asp, and ISS for the publication, what can i do for to stop the sql gets the 100% of cpu?

     

    martes, 20 de julio de 2010 23:37

Respuestas

  • Hola.

    Aunque haría falta mirar el plan de ejecución, ese cruce con la tabla PolizasXML tiene mucha papeletas para ser la causa del problema. Como sería difícil darte una indicación precisa (sin el plan de ejecución), como consejo podrías ir quitando tablas para ver en qué punto el rendimiento empieza a ser adecuado.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    jueves, 22 de julio de 2010 15:13
    Moderador
  • CREATE XML INDEX (Transact-SQL)
    http://technet.microsoft.com/es-es/library/bb934097.aspx

    Gustavo Larriera Sosa, Microsoft MVP | ascii164.blogspot.com | /*Este mensaje se proporciona tal como es, sin garantías de ninguna clase.*/
    viernes, 23 de julio de 2010 18:10
    Moderador

Todas las respuestas

  • Si al hacer una consulta al servidor el uso de CPU sube al 100% durante un rato, usualmente esto sucede porque está haciendo una búsqueda secuencial (barrido de tabla o de índice agrupado) sobre el cache de búfers en memoria que tiene una copia de todos los datos de la tabla. Este proceso es intensivo en CPU y por eso sube al 100%. Idealmente, para solucionarlo habría que añadirle a la tabla o tablas que intervienen en la consulta, si se puede, un índice o combinación de índices que permitan resolver la consulta sin hacer un barrido completo de las tablas. Si no conoces suficientemente la consulta como para optimizarla a mano, puedes usar el asistente para optimización de índices de Sql Server (Database Engine Tuning Advisor) y seguir las recomendaciones que éste te presente.

    Si a pesar de todo resulta imposible optimizar la consulta, y por sus características requiere absolutamente ser resuelta mediante un TableScan, puedes limitar el uso de CPU por esa consulta mediante el Resource Governor ("Regulador de Recursos"). Pero si no me equivoco, esta es una característica de la versión Enterprise de SQL Server, y no está en las versiones menores.

    miércoles, 21 de julio de 2010 5:16
  • Hola.

    ¿Puedes pasarnos la consulta o consultas que se ejecutan?


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    miércoles, 21 de julio de 2010 10:48
    Moderador
  • Gracias Alberto

    este es mi consulta

     

     

    SET DATEFORMAT DMY SELECT GETDATE() AS FechaImpresion, a.NumeroSolicitud AS NumeroSolicitud,

    isnull(a.Paterno,'') + ' ' + isnull(a.Materno,'') + ' ' + isnull(a.Nombre,'') AS Prospecto,a.RFC AS RFC,

    a.FechaRegistro AS FechaRegistro, isnull(a.NumeroAutorizacion,0) AS NumeroAutorizacion,

    isnull(a.FechaAutorizacion,'') AS FechaAutorizacion, isnull(a.FechaQuincena,0) AS NumeroQuincena,

    isnull(a.DescuentoQuincenal,0) AS DescuentoQuincenal,isnull(a.OrdenTrabajo,0)OrdenTrabajo,

    isnull(a.PrimaAnual,0) AS PrimaAnual,UPPER(d.Nombre) AS Estatus,isnull(UPPER(e.Nombre),'') AS Motivo,

    i.Clave + ' -- ' + LTRIM(ISNULL(h.Paterno, '') + ' ' + ISNULL(h.Materno, '') + ' ' + ISNULL(h.Nombre, '')) AS Agente,

    isnull(CASE WHEN ISNUMERIC(a.NUMEROSOLICITUD)=0 THEN A.Poliza ELSE f.poliza end,'') as Poliza, isnull(g.Nombre,'') AS 'Area de Entrega',

    UPPER(j.Nombre) AS TipoDocumento FROM Prospectos a

    INNER JOIN Elementos d ON a.EstatusID = d.ElementoID

    LEFT OUTER JOIN Elementos j ON a.TipoDocumentoID = j.ElementoID 

    LEFT OUTER JOIN Elementos g ON a.AreaEntregaID = g.ElementoID 

    LEFT OUTER JOIN Elementos e ON e.ElementoID = a.MotivoID 

    LEFT OUTER JOIN PolizasXML f ON a.NumeroSolicitud = f.Detalle.value('(/Datos/@C34)[1]', 'varchar(200)')

    LEFT OUTER JOIN Personas h ON h.PersonaID = a.AgenteID 

    LEFT OUTER JOIN ClavesAgente i ON i.AgenteID = a.AgenteID  where  a.TipoDocumentoID =  2306 and

    a.FechaRegistro >= '15/07/2010' and  a.FechaRegistro  < dateadd(dd, 1,'18/07/2010') and (a.UEV in(2310,2311,2320))

    Gracias

    miércoles, 21 de julio de 2010 15:57
  • Hola Christian

    Cuantos registros tienen estas tablas ¿?

    Es posible que en alguno de los joins se dupliquen los registros y devuelva un numero enorme de registros ¿?

     

     

    jueves, 22 de julio de 2010 8:01
  • Hola.

    Aunque haría falta mirar el plan de ejecución, ese cruce con la tabla PolizasXML tiene mucha papeletas para ser la causa del problema. Como sería difícil darte una indicación precisa (sin el plan de ejecución), como consejo podrías ir quitando tablas para ver en qué punto el rendimiento empieza a ser adecuado.


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    jueves, 22 de julio de 2010 15:13
    Moderador
  • Hola Aberto

     

    Oye un favor mas, como puedo poner un indice a un XML , es posible?

    viernes, 23 de julio de 2010 17:56
  • CREATE XML INDEX (Transact-SQL)
    http://technet.microsoft.com/es-es/library/bb934097.aspx

    Gustavo Larriera Sosa, Microsoft MVP | ascii164.blogspot.com | /*Este mensaje se proporciona tal como es, sin garantías de ninguna clase.*/
    viernes, 23 de julio de 2010 18:10
    Moderador