Development, Przydatne skrypty, SQL Server

Rozrost tempdb – Extended Events + podgląd via TSQL

Skrypt dzięki uprzejmości Igora Yaremenko 🙂 — create event session CREATE EVENT SESSION [Database_Growth_Watchdog] ON SERVER ADD EVENT sqlserver.database_file_size_change ( ACTION ( sqlserver.client_app_name , sqlserver.client_hostname , sqlserver.database_name , sqlserver.session_nt_username , sqlserver.sql_text , sqlserver.username ) WHERE ( [database_id] = ( 2 ))) ADD TARGET package0.event_file ( SET filename = N’D:\Temp\Database_Growth_Wathdog.xel’, max_file_size =Czytaj dalej / Read more

Development, Przydatne skrypty, SQL Server

Konkatenacja napisów w SQL < 2017 - wersja z użyciem XML PATH bez podmiany znaków specjalnych np. & na & amp;

DECLARE @M TABLE ( ParameterName NVARCHAR(20), ParameterValue NVARCHAR(MAX) ); INSERT INTO @M VALUES (’1′, 'Napis1 &<’), (’1′, 'Napis2 &’), (’1′, 'Napis3′), (’2′, 'aaa’), (’2′, 'bbb’), (’3′, 'a’); SELECT * FROM @M SELECT DISTINCT ParameterName, RemappedValues = STUFF( ( SELECT ’;’ + ParameterValue FROM @M AS M2 WHERE M2.ParameterName = M1.ParameterNameCzytaj dalej / Read more

Przydatne skrypty, SQL Server

Partycje i ich granice

Thanks to https://sqlity.net/en/1031/partitions-boundaries-filgroups/     SELECT f.NAME AS file_group_name, SCHEMA_NAME(t.schema_id) AS table_schema, t.name AS table_name, p.partition_number, ISNULL(CAST(left_prv.value AS VARCHAR(MAX))+ CASE WHEN pf.boundary_value_on_right = 0 THEN ’ < ’ ELSE ’ <= ’ END , ’-INF < ’) + 'X’ + ISNULL(CASE WHEN pf.boundary_value_on_right = 0 THEN ’ <= ’ ELSECzytaj dalej / Read more

Przydatne obiekty systemowe, SQL Server

Ukryta kolumna adresu wiersza

Adres/wskaźnik danego wiersza często przydaje się podczas analizy różnych przypadków, od planu po deadlocki. Dość łatwo i prosto do niej się dobrać w tabeli :> Wystarczy odpowiednia nazwa ukrytej wirtualnej kolumny. Można również wyciągnać z niej informację o numerze pliku:strony:slotu, tu pomoże tym razem nieudokumnetowana funkcja.   Przykład: SET NOCOUNT ON; GOCzytaj dalej / Read more

Azure, Azure Data Warehouse

PDW/ADWH – Query Sessions – lista najdłuższych zapytań

Konstruowanie takich zapytań nie należy do najłatwiejszych 😉 W dokumentacji jest wiele braków.. Ale udało mi się namierzyć i podejrzeć skrypt uruchamiany przez portal Azure w monitoringu ADWH. BINGO! select top 50 (case when requests.status = 'Completed’ then 100 when progress.total_steps = 0 then 0 else 100 * progress.completed_steps /Czytaj dalej / Read more

Development, SQL Server

Prosta konkatenacja napisów w wierszach według ustalonej kolejności (2017+)

 STRING_AGG()   to długo wyczekiwana funkcja. Konkurencja miała już ją od dawna. A my musieliśmy kombinować i stawiać protezy (recursive cte, xml, clr, meh..) SQL Server 2017 (i Azure) nam wreszcie ją udostępnia. Warto jednak pamiętać, że domyślnie napisy złączane są według kolejności losowej (takiej, z jaką „wpadną w ręce” silnika),Czytaj dalej / Read more

Development, SQL Server

Znalezienie lockowanego rekordu po RID lub hash value przy użyciu wirtualnej kolumny %%lockres%%

Często gęsto analizujemy jakiegoś locka. Dowiadujemy się jaki jest jego RID lub hash klucza: I zadajemy sobie teraz pytanie… OK, wiem która to baza, wiem który to obiekt. Ale skąd mam wiedzieć o jaki rekord może chodzić??   Z pomocą przychodzi wirtualna nieudokumentowana kolumna %%lockres%%, która zwraca właśnie powyższe wartości 🙂   Przykład:Czytaj dalej / Read more