Mój mały cel wreszcie zrealizowany 🙂 Wszystkie sztuczki i kruczki jakie znam w SSMS. Wyłożone w mowie i piśmie :> Zapraszam do przejrzenia materiałów i/lub obejrzenia prelekcji! Dokument PDF z prezentacją Użyte skrypty Link do prelekcji: https://youtu.be/iuEpsbxLm04
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
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
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
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
Sprawdzenie do jakich grup użytkowników należy nasz login w Windows
Ciągle zapominam tego polecenia, więc zostawiam przypominajkę na blogu… whoami /GROUPS whoami /ALL
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
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
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
Zaokrąglanie daty do najbliższych 30 minut
–w górę SELECT CONVERT(smalldatetime, ROUND(CAST([columnname] AS float) * 48.0,0,1)/48.0) FROM [tableName] –w dół SELECT CONVERT(smalldatetime, ROUND(CAST([columnname] AS float) * 48.0,0)/48.0) FROM [tableName]