Archive for the ‘T-SQL’ Category

How to Use Parameters Like a Pro and Boost Performance by Guy Glantser

10. Mai 2017

Thema

Parameters are a fundamental part of T-SQL programming, whether they are used in stored procedures, in dynamic statements or in ad-hoc queries. Although widely used, most people aren’t aware of the crucial influence they have on query performance. In fact, wrong use of parameters is one of the common reasons for poor application performance.

Sprecher

Guy Glantser

Links

http://www.madeiradata.com/tag/parameterization-series

Notizen

Abfrage von PlanCacheDaten:

SELECT
    BatchText            = BatchTexts.text ,
    QueryPlan            = BatchPlans.query_plan ,
    ExecutionCount        = CachedPlans.usecounts ,
    ObjectType            = CachedPlans.objtype ,
    Size_KB                = CachedPlans.size_in_bytes / 1024
FROM
    sys.dm_exec_cached_plans AS CachedPlans
CROSS APPLY
    sys.dm_exec_query_plan (plan_handle) AS BatchPlans
CROSS APPLY
    sys.dm_exec_sql_text (plan_handle) AS BatchTexts;

Datumstypen im SQL Server

8. November 2011

Der Post mit dem bescheidenen Artikel Der ultimative Guide für die Datetime Datentypen ist zwar schon ein paar Tage alt, aber trotzdem sehr interessant und einigermaßen ausführlich.

25 Useful SQL Server Tutorials For .NET Developers

22. August 2011

Eine Sammlung von hilfreichen SQL Server Tutorials gibt’s hier.

SQL Server 2008 Execution Plan Cache

22. Juni 2011

Ich stand vor dem Problem, dass ich die Auswirkungen eine zus. Index auf eine Abfrage testen wollte. Dabei ändert sich der Execution Plan (EP) durch die Erstellung/Änderung des Index nicht automatisch (UPDATE: dachte ich jedenfalls – siehe unten), da die EPs ja im EP Cache gespeichert werden und immer wieder für die sich nicht ändernde Abfrage verwendet werden.

Mit DBCC FREEPROCCACHE kann man diesen EP Cache löschen – allerdings lag meine DB auf einem Produktivserver und da sollte man das besser nicht machen.

Allerdings kann man DBCC FREEPROCCACHE u.a. auf einen einzelnen plan_handle einschränken. Also mit …

SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT abc FROM xxx%';

… fix plan_handle ermittelt und dann mit …

DBCC FREEPROCCACHE (0x0600010080C6043240811321020000000000000000000000)

den EP für meine Abfrage aus dem EP Cache gelöscht – super!

… Oder doch nicht so super, wenn man da ein bissel öfter rumspielen mag, denn dann muss man das ja nach jedem Versuch machen.
Für die Faultiere unter den Entwicklern gibt es da noch eine komfortable Möglichkeit, wie’s doch noch einfacher geht. Nämlich indem man einfach ans Ende der Abfrage noch folgendes anfügt:

OPTION (RECOMPILE)

Dann wird erst gar kein EP im Cache abgelegt – wirklich super!

UPDATE: Klaus Aschenbrenner hat mich übrigens noch darauf aufmerksam gemacht, dass der SQL Server 2008 bei einer Index-Änderung (Löschen, Erstellen, Ändern) automatisch alle relevanten EPs neu kompiliert.