Nieudokumentowana funkcja %%lockres%%

Nieudokumentowana funkcja, nazywa się %%lockres%% i jest związana z implementacją blokowania SQL Server. Silnik bazy danych implementuje hierarchię blokowania i żąda blokad na poziomie tabeli, na poziomie strony i na poziomie rekordu. Gdy wymagana jest blokada na poziomie rekordu, SQL Server nie umieszcza blokady na samym rekordzie — SQL Server po prostu generuje wartość skrótu (hash), a wynikowa wartość jest ostatecznie zablokowana. Aby obliczyć tę wartość skrótu, SQL Server używa nieudokumentowanej funkcji %% lockres%% . Funkcję tę można również wywołać na poziomie Dowiedz się więcej

Dekodowanie Key i Page WaitResource dla zakleszczeń i blokad

W trakcie analizowania blokowań w SQL Server można często spotkać się z wpisami w XML: waitresource=“PAGE: 7:4:50256 ” lub waitresource=“KEY: 8:72046656561991169 (cd54f92b253d)” Co to oznacza ? Jak to przetłumaczyć ? Pokrótce blokada PAGE występuje na poziomie strony, a KEY na poziomie Klucza no ale po kolei. Page lock waits Jeśli mamy wpis waitresource=“ PAGE: 7:4:50256″ oznacza to, że zapytanie czekało na blokadę na poziomie strony. Silnik podaje nam po kolei PAGE: 7:4:50256 PAGE – blokada na poziomie strony 7 – jest to Dowiedz się więcej

Niektóre z najczęściej widzianych stanów SPID w SQL Server i ich znaczenie

Przedstawiam krótki opis stanów sesji (SPID), które można podejrzeć używając sp_who2 lub znanego skryptu Adama Machanica sp_whoisactive. DORMANT SQL Server resetuje sesję. ROLLBACK Sesja jest w trakcie wycofywania transakcji. SPINLOCK Zadanie sesji czeka na zwolnienie blokady spinlock. Zasadniczo oznacza, że zapytanie jest w pewnym sensie uruchomione, w którym jest zajęte oczekiwaniem w procesorze na swoją kolej. RUNNING: (Mam wątki i CPU) Ten stan oznacza, że sesja uruchomiła jeden lub więcej batchów. Po włączeniu Multiple Active Result Sets ( (MARS) sesja może uruchomić Dowiedz się więcej

Klauzula OUTPUT w zapytaniach T-SQL

Chciałem napisać kilka słów o klauzuli OUTPUT stosowanej w operacjach DML języka T-SQL. Wydaje mi się, że jest to często zapominana klauzula, a nawet stwierdzam, że wiele osób o niej nie wiem. Wielokrotnie widziałem, kod który miał za zadanie zalogować jakieś zmiant w tabeli. Często stosowano do tego odpowiednie rodzaje wyzwalaczy (triggerów), gdzie w trakcie jednej z operacji DML (Delete, Insert czy Update) wykorzystywane były tabele Inserted i /lub Deleted. SQL Server automatycznie zarządza tymi tabelami i udostępnia je podczas wykonywania wyzwalaczyoraz Dowiedz się więcej

Tworzymy login z podanym SID-em

Czasami zdarza się, że należy utworzyć login z góry zadanym SID-em. Problem tego typu można zaobserwować podczas korzystania z usług Log Shipping’u, AlwaysOn Availability Group czy miroringu. W momencie przełączenia się na serwer zapasowy podczas próby podłączenia się do bazy danych występuje błąd logowania. Sytuacja taka dotyczy jedynie loginów SQLowych, a nie kont do logowania się do Windows czy też kont z AD. W sytuacjach opisywanych powyżej zawsze mamy do czynienia z minimum dwoma serwerami SQL. Gdy założymy, że pracujemy z dwoma Dowiedz się więcej