W tym miejscu będę aktualizował zbiór artykułów dostępnych w necie, których znajomość pomogła mi znacznie w zrozumieniu/zapoznaniu się z wiedzą dotyczącą SQL Server. GENERAL Biblioteka wielu przydatnych linków do stron, blogów, whitepapers itp. [akt. #2 (12.10.2017)] Jeszcze jedna biblioteka, tym razem utrzymywana na githubie, pełna narzędzi, skryptów, kodu i słodyczy!Czytaj dalej / Read more
Kategoria: SQL Server
SPID query plan
SELECT EQP.query_plan, ER.session_id, ER.request_id, ER.start_time, ER.status, ER.command, ER.sql_handle, ER.statement_start_offset, ER.statement_end_offset, ER.plan_handle, ER.database_id, ER.user_id, ER.connection_id, ER.blocking_session_id, ER.wait_type, ER.wait_time, ER.last_wait_type, ER.wait_resource, ER.open_transaction_count, ER.open_resultset_count, ER.transaction_id, ER.context_info, ER.percent_complete, ER.estimated_completion_time, ER.cpu_time, ER.total_elapsed_time, ER.scheduler_id, ER.task_address, ER.reads, ER.writes, ER.logical_reads, ER.text_size, ER.language, ER.date_format, ER.date_first, ER.quoted_identifier, ER.arithabort, ER.ansi_null_dflt_on, ER.ansi_defaults, ER.ansi_warnings, ER.ansi_padding, ER.ansi_nulls, ER.concat_null_yields_null, ER.transaction_isolation_level, ER.lock_timeout, ER.deadlock_priority, ER.row_count, ER.prev_error, ER.nest_level,Czytaj dalej / Read more
Historia jobów (job history)
Źródło: https://www.sqlmatters.com/Articles/Checking%20the%20status%20of%20SQL%20Server%20Agent%20jobs.aspx USE msdb; SELECT SJ.name AS [Job Name], CONVERT( VARCHAR, DATEADD( S, (SJH.run_time / 10000) * 60 * 60 /* hours */ + ((SJH.run_time – (SJH.run_time / 10000) * 10000) / 100) * 60 /* mins */ + (SJH.run_time – (SJH.run_time / 100) * 100), /* secs */Czytaj dalej / Read more
SSAS info o bazach (wielkość bazy, partycji, statusu procesowania etc.)
Źródło: http://www.ssas-info.com/analysis-services-scripts/1197-powershell-script-to-list-info-about-ssas-databases lekko zmodyfikowany param($ServerName = „localhost”, $dbname = „db_name”) ## Add the AMO namespace $loadInfo = [Reflection.Assembly]::LoadWithPartialName(„Microsoft.AnalysisServices”) $server = New-Object Microsoft.AnalysisServices.Server $server.connect($ServerName) if ($server.name -eq $null) { Write-Output („Server '{0}’ not found” -f $ServerName) break } foreach ($d in $server.Databases ) { if ($d.Name -ne $dbname) { continue;Czytaj dalej / Read more
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
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