Dienstag, 23. April 2024

 wie teste ich mal die Performance meiner Maschine?

--IO write Messen mit 5GB auf LOG Partition

USE master

declare @StartZeit as datetime, @EndZeit as datetime, @Speed as float

--Temporäre DB erstellen (Files sind automatisch in den Default Locations)

CREATE DATABASE TEMP_TEST;

select @StartZeit = GETDATE()

--TempFile aufblasen

ALTER DATABASE [TEMP_TEST] MODIFY FILE ( NAME = N'TEMP_TEST_log', SIZE = 5120MB )

select @EndZeit = GETDATE()

--Temporäre DB wieder löschen

DROP DATABASE [TEMP_TEST]

select @speed = 5120 /DATEDIFF(SECOND,@StartZeit,@EndZeit)

select 5120 as MB, DATEDIFF(SECOND,@StartZeit,@EndZeit) as Seconds, @speed as [MB/s] 

, Speed = case  

              when @speed < 40 then 'Floppy-Disk'  

              when @speed < 80 then 'USB-Stick'  

              when @speed < 100 then 'Hobby' 

              when @speed < 120 then 'Naja' 

              when @speed < 150 then 'benutzbar' 

              when @speed < 180 then 'ganz OK' 

              when @speed < 250 then 'flott' 

              when @speed < 300 then 'Pro-Level' 

              when @speed < 390 then 'nice!'

              when @speed < 400 then 'Referenz Datacenter CH'

              when @speed < 450 then 'Outstanding'

              when @speed >= 450 then 'schick ein Kasten Bier an dein DB Hoster!' 

END


GO


Freitag, 4. Januar 2019

Azure B2C How-To Konfiguration und User Anlage mit c#

Azure B2C User - verdammt coole Sache.

Ich kann praktisch kostenfrei 50.000 User anlegen und dann alle auf verschiedenen Themen bei mir berechtigen.

Aber wie mach ich es - erstens - ich brauche einen weiteren Tenant - also einen Mandanten.

Wie man das macht - seht hier gut beschrieben:
https://docs.microsoft.com/de-de/azure/active-directory-b2c/tutorial-create-tenant

Dann bekomme ich in meinem Azure über die Suche mein B2C - das finde ich etwas sperrig - weil so wie ich das sehe - finde ich es nur so.


Die brauche ich aber erst einmal nicht - was ich brauche ist die Applikation die damit angelegt wird. Und die finde ich in meinem Tenant - Azure AD > App registrations


Auf der lege ich mir einen Key an - kopieren den gleich - sonst ist er weg.

Also Applikation klicken > Settings > Keys > Beschreibung, WieLangeValide > Save und Key kopieren.

Dann brauche ich noch die ApplicationID und mit diesen drei Infos - ApplicationID, Tenant, Secret Key kann ich anfangen User anzulegen.

Bzw. - über die GUI kann das ja jeder - ich würde das gerne über die Graph Api machen -
und wie - steht hier super beschrieben.

https://docs.microsoft.com/de-de/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

dann noch den c# Code der Konsolenanwendung
https://github.com/AzureADQuickStarts/B2C-GraphAPI-DotNet/archive/master.zip

und schon hat man eine B2C.exe mit der man User anlegen, bearbeiten, auslesen, löschen kann.

Sobald ich noch raus bekommen habe wie ich die glücklichen informiere hänge ich das noch an :)

Dienstag, 20. November 2018

Excel > SQL Tabelle, Direktimport mit dem Management Studio und dann ein Fehler

Da will man mal "kurz, schnell" eine Excel in den SQL Server importieren und dann, klar der Fehler


was hilft - 


installieren - fertig. 

Siri - ich bin dein Vater - ein wirklich wichtiger Artikel

Wer hat nicht schon einmal versucht was Siri so kann?
Das Projekt Siri.IO hat eine PDF erstellt wo ab Seite 31 die deutschen Anweisungen kommen. ich war überrascht was alles so geht.
Und natürlich sind die besten Sachen unter der Kategorie "Funny" ;)

http://hey-siri.io/dl/Hey-Siri.pdf

Funny
Wie viel ist 0 dividiert durch 0?
Was ist unendlichmal unendlich?
Erzähl mir einen Witz
Erzähl mir einen Zungenbrecher
Erzähl mir eine Geschichte
Erzähl mir ein Gedicht
Sing mir ein Schlaflied
Warpgeschwindigkeit
Beam mich hoch
Ich bin dein Vater
Schere Stein Papier Echse Spock
Küsse mich
Willst du mich heiraten?
Möge die Macht mit dir sein
Bist du ein Mann ?
Bist du da?
Was machst du gerade?
Was hast du an?
Wie ist es du zu sein?
Hast du einen Freund?
Was ist deine politische Einstellung?
Kennst du Anmachsprüche?
Wie macht der Fuchs?
Warum ist die Banane krumm?
Was ist der Sinn des Lebens?
Welches ist das beste Smartphone?
Wann wird die Welt untergehen?
Spieglein, Spieglein an der Wand, wer ist der Schönste im ganzen Land?
Du bist die Geilste
Du bist die schönste
Rap
Beatboxe
Klopf Klopf
OK Google
Ich bin betrunken

Dienstag, 23. Oktober 2018

Mal kurz über den Daumen - die neue Funktion in SQL Azure

Was habe ich grade gelesen - es gibt eine neue Funktion - APPROX_COUNT_DISTINCT

Und macht wie sie klingt - sie gibt eine ungefähre Anzahl eindeutiger nicht-Null-Werte zurück.
Wer braucht so was?, dachte ich bei mir - aber wenn man dann weiter liest -

An example might be calculating a COUNT(DISTINCT()) across 10 billion rows, for display on a dashboard.

10 Billionen  - kurz nachgeschaut - das sind 12 Nullen.

1.000.000.000.000

wer hätte das nicht gerne auf dem Konto? Das ist doch mal ne Ansage für einen Count Distinct.

Ich bin gespannt wann ich es das erste mal anwenden kann.


Die erwartete Fehlertoleranz sind 2% - sind ja bloß 20 Milliarden
:)

Freitag, 19. Oktober 2018

Index Fragmentierung bei Tabellen, prüfen und neu aufbauen

Lt. Microsoft ist bei einer Fragmentierung zwischen 5% und 30% ein REORGANIZE des Indexes sinnvoll und bei größer 30% ein REBUILD .

Mit diesem Script kann man die Indexe prüfen und bekommt gemäß den Schwellenwerten auch die passenden SQL Scripte dafür.

Allerdings sollte man das nicht einfach blind ausführen, da Index Aufbereitung großen Einfluss auf die Performance haben kann.

SELECT 
 TableName = OBJECT_NAME(ind.OBJECT_ID) 
,IndexName = ind.name 
,IndexType = indexstats.index_type_desc 
,Fragmentation = ROUND(indexstats.avg_fragmentation_in_percent,2)
,SqlScript = CASE 
WHEN indexstats.avg_fragmentation_in_percent > 5 AND indexstats.avg_fragmentation_in_percent < = 30 
THEN 'ALTER INDEX [' + ind.name + '] ON [' + OBJECT_SCHEMA_NAME(ind.object_id) + '].[' + OBJECT_NAME(ind.OBJECT_ID) + '] REORGANIZE'
WHEN indexstats.avg_fragmentation_in_percent > 30 
THEN 'ALTER INDEX [' + ind.name + '] ON [' + OBJECT_SCHEMA_NAME(ind.object_id) + '].[' + OBJECT_NAME(ind.OBJECT_ID) + '] REBUILD WITH (ONLINE = ON)'
ELSE NULL END 
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind
ON ind.object_id = indexstats.object_id
    AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 0
ORDER BY indexstats.avg_fragmentation_in_percent DESC;


/*
avg_fragmentation_in_percent-Wert Korrigierende Anweisung
> 5 % und < = 30 % ALTER INDEX REORGANIZE
> 30% ALTER INDEX REBUILD WITH (ONLINE = ON)
*/

Sonntag, 1. Juli 2018

Systemtype HierarchyId - meiner Meinung nach viel zu selten verwendet!


HierarchyId - ein Systemtyp den es sei 2008 gibt, ich aber noch nicht wirklich oft im Einsatz gesehen habe. 
Zu Unrecht würde ich sagen. Denn - ich finde ihn ziemlich cool!

Hier mal die Beschreibung.

Was wir alle kennen - unregelmäßige Parent/Child Zuordnungen in einer Tabelle. 
Also 



und alles was damit einher geht. 
Und um das einfach abzubilden - nutze ich eine HierarchyId. 
Lesbar und mit coolen Funktionen wie GetAncestor, GetDescendant, Root, Level

ich empfehle jedem mal 

und nutzen dieses DatenTyps.

Ich habe mit dann eine Prozedur geschrieben, der ich Tabelle und Spalten mitgeben und die dann die HierarchyID erstmalig anlegt ;)