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
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 DESCUwe 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 DESCHallo 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:29Beantworter
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

