CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

I/O-Statistiken

Wir werden immer wieder nach „Abfrageperformance“ gefragt. Man studiert Ausführungspläne und I/O-Statistiken, um die Treiber zu identifizieren. Das Lesen und Analysieren der Ausführungspläne ist inzwischen recht übersichtlich im SQL Server Management Studio möglich. Bei den I/O-Statistiken sieht es leider etwas anders aus.

Wir verwenden für das Beispiel die Foodmart-Datenbank und setzen folgendes Statement ab:


SET STATISTICS IO ON;

SELECT  [product_id]
      ,[date_id]
      ,[customer_id]
      ,[promotion_id]
      ,[store_id]
      ,[store_sales]
      ,[store_cost]
      ,[unit_sales]
      ,[TimeUtilityID]
      ,[CumulationID]
      ,[ValueTypeID]
  FROM [FoodMart].[dbo].[V_sales_fact_2007]
  union all
SELECT  [product_id]
      ,[date_id]
      ,[customer_id]
      ,[promotion_id]
      ,[store_id]
      ,[store_sales]
      ,[store_cost]
      ,[unit_sales]
      ,[TimeUtilityID]
      ,[CumulationID]
      ,[ValueTypeID]
  FROM [FoodMart].[dbo].[V_sales_fact_2008]
union all
SELECT  [product_id]
      ,[date_id]
      ,[customer_id]
      ,[promotion_id]
      ,[store_id]
      ,[store_sales]
      ,[store_cost]
      ,[unit_sales]
      ,[TimeUtilityID]
      ,[CumulationID]
      ,[ValueTypeID]
  FROM [FoodMart].[dbo].[V_sales_fact_dec_2008]

  SET STATISTICS IO OFF;

Dabei ergibt sich ein Ergebnis von etwa 260.000 Zeilen.

Abb. 1: Meldungen im SQL Server Management Studio

Die Ausgaben für die I/O-Statistik sind nur in Textform vorhanden und daher sehr schwer „auf einen Blick“ zu lesen. Es gibt eine Webseite, die uns das Lesen sehr erleichtern kann: http://www.statisticsparser.com

Abb. 2: Import des Meldungstextes mithilfe von Statistic Parser

Man übernimmt einfach den Meldungstext in das vorgesehene Feld und drückt auf den Button „Parse“.

Abb. 3: I/O-Statistik des Statistic Parsers

Die I/O-Statistik erscheint übersichtlich in einem gut lesbaren Format. Ein kleiner Nachteil sei noch erwähnt: Im jetzigen Stadium der Entwicklung „versteht“ der Parser nur Ausgaben der englischen und wohl auch der spanischen Meldungen des SQL Server Management Studios.