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

View als Tabellen – Dummy Ressource / Zero Device

9. Oktober 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Stress-Tests für Applikationen, die auf Ressourcen zugreifen, sind mangels eben der Ressourcen nicht immer ganz einfach. Wenn man ein Programm testet, das mal eben 1.000 Seiten und mehr ausdrucken soll, verschwendet man eben mal 1.000 Seiten Papier (macht man natürlich nicht; die armen Bäume) oder lässt es in eine Datei umleiten, was dann auch eine entsprechend große Datei erzeugt. Um solche Test nun für Entwickler Ressourcen-schonend zu ermöglichen gibt es „Dummy Resources“ oder „Zero Devices“; sie verhalten sich wie die echten Ressourcen, machen aber effektiv nichts; sie empfangen die Daten wie gehabt und ... nichts weiter; das ist ja der Sinn & Zweck des Drucktreibers.

Aber Moment mal: MS SQL Server Objekte sind ja auch Ressourcen, mit denen mal Langzeit-Tests durchgeführt werden („Schafft es eine Schleife 1 Mio mal durch zu laufen?“). Da ist ja auch nicht immer unbedingt nötig, mehrere Gigabytes unnötig ins Storage zu schreiben.

Zugegeben, keine Daten wirklich weg zu schreiben, simuliert das Verhalten nicht wirklich, wie es dem echten Sachverhalten entspricht: Ich sage nur Primary Key, Unique Index, Foreign Key usw. um ein paar zu nennen. Trotzdem, für ein paar Test ist auf im MS SQL Server so eine Dummy Ressource durchaus brauchbar und sinnig.

Die Idee dazu ist mir bei „INSERTs abfangen und umleiten“ gekommen.

So geht es und das ganz einfach:

 

 USE [AdventureWorks] 
 GO 
 SET NOCOUNT ON; 
 GO 
 -- View als Dummy Resource anlegen 
 CREATE VIEW dbo.DummyResource 
 AS 
 SELECT CONVERT(int, 1) AS ID 
  ,'String' AS String 
  ,N'Unicode' AS Unicode 
  ,CONVERT(money, 123.4567) AS Betrag 
  ,GETDATE() AS Datum 
  ,CHAR(8000) AS BigString -- Um goroße Daten zu simulieren 
 GO 
   
 -- InsteadOf Trigger zum Abfangen von DML Kommandos 
 CREATE TRIGGER dbo.TR_All_DummyResource ON dbo.DummyResource 
 INSTEAD OF INSERT, UPDATE, DELETE 
 AS 
  -- Ich mach nichts und erzähle es niemanden 
  SET NOCOUNT ON; 
 GO 
   
 -- Und nun befeueren wir es mal 
 SELECT GETDATE() AS Start; -- Zeitmessung 
 GO 
 INSERT INTO dbo.DummyResource (ID) 
 VALUES (0); -- Alle NULLable, ein Feld reicht 
 GO 100000  -- 100T mal 
 DELETE FROM dbo.DummyResource; -- Alles weg 
 GO 
 SELECT GETDATE() AS Stop; -- Zeitmessung 
 GO 
   
 Ergebnis: 
   
 Start 
 ----------------------- 
 2009-10-09 19:36:14.040 
   
 Beginning execution loop 
 Batch execution completed 100000 times. 
 Stop 
 ----------------------- 
 2009-10-09 19:36:36.500 

 

Da kann man in der AdventureWorks oder TempDb nachsehen; da hat sich nichts passiert. Selbst das Änderungsdatum der Datenbank-Dateien ändert sich nicht; weshalb auch, es passiert wie gewünscht: Nix!

Diesen Post teilen

Repost 0

Kommentiere diesen Post