Beantwortet Auffällige Server Last

  • Montag, 27. Februar 2012 08:38
     
     

    Hallo,

    für mich sieht die CPU Auslastung merkwürdig aus ... ist das normal?

    Hinzu kommt das ich am Wochenende den RAM Speicher verdoppelt habe und der ist schon wieder voll ausgelastet. Ist das auch normal?

    Danke und Gruß
    Markus

Alle Antworten

  • Montag, 27. Februar 2012 10:10
     
     Beantwortet Enthält Code

    Hallo Markus,

    die CPU-Last sagt erst mal überhaupt nichts darüber aus, in wie fern der SQL Server damit zu tun hat.
    Die Ursachen dazu zu finden, sind nicht ganz einfach:

    - was sagt denn der Activity Monitor aus?
    - wie hoch ist den der Workload Deiner Applikation (kann u. U. über Activity Monitor abgeschätzt werden)?
    - hast Du verlässlichere Zahlen, die z. B. mit PerfMon gemessen wurden?

    Um z. B. die CPU-Auslastung zu prüfen, kannst Du ja mal die folgende Abfrage laufen lassen (ist ein Auslastungsschema der letzten 4 Stunden!)

    DECLARE @ts_now BIGINT
    SELECT	@ts_now = cpu_ticks / CONVERT(FLOAT, ms_ticks) FROM sys.dm_os_sys_info
    
    SELECT record_id,
           DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime, 
           SQLProcessUtilization,
           SystemIdle,
           100 - SystemIdle - SQLProcessUtilization AS OtherProcessUtilization
    FROM (
            SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle,
                    record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS SQLProcessUtilization,
                    TIMESTAMP
            FROM (
                    SELECT TIMESTAMP, CONVERT(XML, record) AS record 
                    FROM sys.dm_os_ring_buffers 
                    WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                    AND record LIKE '% %') AS x
            ) AS y 
    ORDER BY record_id DESC


    Uwe Ricken

    MCITP Database Administrator 2005
    MCITP Database Administrator 2008
    MCITP Microsoft SQL Server 2008, Database Development

    db Berater GmbH
    http://www-db-berater.de

    • Als Antwort markiert Markus_gg Montag, 27. Februar 2012 11:21
    •  
  • Montag, 27. Februar 2012 10:21
     
     

    Am 27.02.2012 11:10, schrieb Uwe Ricken:

    Um z. B. die CPU-Auslastung zu prüfen, kannst Du ja mal die folgende Abfrage laufen lassen (ist ein Auslastungsschema der letzten 4 Stunden!)

    DECLARE @ts_now BIGINT
    SELECT        @ts_now = cpu_ticks / CONVERT(FLOAT, ms_ticks) FROM sys.dm_os_sys_info
    
    SELECT record_id,
                    DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime,
                    SQLProcessUtilization,
                    SystemIdle,
                    100 - SystemIdle - SQLProcessUtilization AS OtherProcessUtilization
    FROM (
                     SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
                                     record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') AS SystemIdle,
                                     record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') AS SQLProcessUtilization,
                                     TIMESTAMP
                     FROM (
                                     SELECT TIMESTAMP, CONVERT(XML, record) AS record
                                     FROM sys.dm_os_ring_buffers
                                     WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                                     AND record LIKE '% %') AS x
                     ) AS y
    ORDER BY record_id DESC

    Hallo Uwe,

    unter 2008 funktioniert es.

    Ich habe allerdings einen Fehler wenn ich diese Abfrage unter 2005 ausführe.

    Meldung 8115, Ebene 16, Status 2, Zeile 4
    Arithmetischer Überlauffehler beim Konvertieren von expression in den int-Datentyp.

    Es muss wohl an
    DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS EventTime,
    liegen. Ich seh aber den Fehler nicht. Hast du eine Ahnung, wo das Problem liegen könnte?

    Lutz

    P.S. Interessante Abfrage ;)

  • Montag, 27. Februar 2012 11:21
     
     

    Hallo,

    ich konnte mit der Hilfe des Activity Monitor  herausfinden was da ärger gemacht hat.

    Danke und Gruß

    Markus

  • Mittwoch, 29. Februar 2012 10:29
    Beantworter
     
     

    Hallo Lutz, die Abfrage stammt aus dem PerformanceDashboard. Ich habe sie für mich etwas angepasst, da das Datum sonst falsch berechnet wird. Läuft bei mir unter SQL Server 2005, 2008 und 2008 R2:

    DECLARE @ts_now BIGINT
    select @ts_now =    ms_ticks from sys.dm_os_sys_info
            select top 15 record_id,
                    dateadd (ms, [timestamp] - @ts_now, getdate()) as EventTime,
                 SQLProcessUtilization,
                 SystemIdle,
                 100 - SystemIdle - SQLProcessUtilization as OtherProcessUtilization
         from (
                 select
                         record.value('(./Record/@id)[1]', 'int') as record_id,
                         record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]',
    'int') as SystemIdle,
                         record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]',
    'int') as SQLProcessUtilization,
                         timestamp
                 from (
                         select timestamp, convert(xml, record) as record
                         from sys.dm_os_ring_buffers
                         where ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
                         and record like '%<SystemHealth>%') as x
                 ) as y
         order by record_id desc

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu