Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

Read / Write Aufkommen je Datenbank

20. Januar 2010 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Jede Datenbank im produktiven Betrieb wird etwas anders verwendet. In die eine wird meistens in zyklischen Abständen geschrieben und nur selten mal gelesen; das wären zum Beispiel Archive-Datenbanken für Alt-Daten. Dann gibt es Datenbanken, in die im laufenden Betrieb in erster Linie die aktuellen Transaktionen mit hohem Detailgrad geschrieben werden, sogenannte OLTP Systeme. Die Daten hier raus werden dann leicht desnormalisiert & voraggregiert in Dataware-House System für weitere Auswertungen überführt; in ein OLAP System. Aus diesen wird naturgemäß mehr gelesen als geschrieben.

Als DBA sollte man die Verwendung seiner Datenbanken kennen, um Speicherplatz entsprechend planen zu können. Archive-Datenbanken ändern sich kaum, werden sowieso gesichert und kaum abgefragt, also kann man sie auf ein einfaches (günstigen) Festplattensystem ablegen. OLAP Datenbanken beruhen auf den Produktiv-Datenbanken, mal von Sicherungen abgesehen, können sie eh wieder neu aufgebaut werden; da sind vor allem schnelle Systeme gefragt wie RAID0, um Abfragen fürs Reporting schnell abzuarbeiten. OLTP hingegen sind das Herzstück der Datenhaltung, hier sollte man immer in ein sicheres sowie auch schnelles Speichersystem investieren.

Im Microsoft SQL Server 2005 (und auch 2008) kann man in einem gewissen Rahmen über die DMV (Dynamic Management Views) Statistiken die Anzahl von gelesenen und geschriebenen Seiten je Datenbank ermitteln. Ausgangspunkt ist dabei die DMV sys.dm_exec_query_stats, die schon für die häufigsten verwendeten Abfragen verwendet wurde und die benötigen Statistiken bereit hält.

Setzt allerdings voraus, das der Server schon eine Zeit lang läuft und die Statistiken aufgebaut sind und wie schon erwähnt mit parametrisierten Abfragen gearbeitet wird, sonst ist jedes (dynamisch generiertes) Statement ein eigenständiges. Nicht immer steht der Datenbank-Kontext für ein Statement fest, diese Queries werden dann unter „AdHoc Queries“ aufgeführt.

Grob aus Erfahrungswerten raus geschätzt, ist in „normalen“ ERP Datenbanken das Verhältnis von Write – Read ~ 1:20. Wie gesagt, das variiert je nach Verwendung.

Mit dem folgenden Statement kann man sich also eine Übersicht verschaffen, wichtig sind hier die LogicalReads und LogicalWrites:

 

 -- Übersicht der Logical Reads & Writes je Datenbank 
 -- Beruht auf den DMV Statistiken. 
 SELECT ISNULL(DB.name, 'AdHoc Queries') AS DatabaseName 
  ,SUM(EQS.execution_count) AS ExecutionCounts 
  ,SUM(EQS.total_worker_time) AS WorkerTime 
  ,SUM(EQS.total_physical_reads) AS PhysicalReads 
  ,SUM(EQS.total_logical_reads) AS LogicalReads 
  ,SUM(EQS.total_logical_writes ) AS LogicalWrites 
 FROM sys.dm_exec_query_stats AS EQS 
  CROSS APPLY sys.dm_exec_sql_text(EQS.sql_handle) as EST 
  LEFT JOIN sys.databases AS DB 
  ON EST.dbid = DB.database_id 
 GROUP BY ISNULL(DB.name, 'AdHoc Queries')
ORDER BY LogicalReads DESC, LogicalWrites DESC

Diesen Post teilen

Repost 0

Kommentiere diesen Post