Co nowego w silniku bazodanowym SQL Server 2008 July CTP (CTP 4), cz. I     Microsoft SQL Server 2008

Co nowego w silniku bazodanowym SQL Server 2008 July CTP (CTP 4), cz. II Udostępnij na: Facebook

Autor: Paweł Potasiński

Opublikowano: 18 września 2007

Zawartość strony
Nowości w Database Mirroring   Nowości w Database Mirroring
Raportowanie zależności między obiektami   Raportowanie zależności między obiektami
Extended Events   Extended Events
Inne nowe funkcjonalności   Inne nowe funkcjonalności
Podsumowanie   Podsumowanie

Nowości w Database Mirroring

W SQL Server 2005 firma Microsoft wprowadziła nowy, rewolucyjny mechanizm wysokiej dostępności – database mirroring. Mechanizm ten od samego początku istnienia cieszył się wielką popularnością i doczekał się wielu zastosowań w systemach klasy enterprise. W Microsoft SQL Server 2008 wprowadzonych zostało wiele usprawnień database mirroringu. Oto one:

  • kompresja strumienia logów przesyłanego pomiędzy serwerami,
  • asynchroniczny zapis (write-ahead) strumienia logów transakcyjnych na serwerze mirror,
  • efektywniejsze wykorzystanie bufora służącego do przesyłania logów (log służący do przesłania poprzedniej porcji loga może być użyty do przesłania następnej porcji, o ile znajduje się w nim wystarczająca ilość wolnego miejsca),
  • szybsze pobieranie przez serwer mirror informacji o tym, które strony danych na serwerze principal zostały zmienione (we wczesnej fazie undo przy zmianie roli serwera mirror na serwer principal wysyłane są żądania zmienionych stron),
  • mechanizm automatycznej naprawy błędów uniemożliwiających czytanie stron danych na serwerach mirror i principal (każdy serwer może pobrać naprawioną wersje strony zawierającej błędy z drugiego serwera – partnera w mirroringu).

 Do początku strony Do początku strony

Raportowanie zależności między obiektami

Microsoft SQL Server 2008 July CTP udostępnia nowe obiekty systemowe do raportowania zależności między obiektami baz danych. Aby w CTP 4 uzyskać informacje o zależnościach między obiektami na poziomie serwera lub bazy danych, można użyć trzech następujących obiektów systemowych:

  • sys.sql_expression_dependencies - widok systemowy, pokazuje jeden wiersz dla każdej zależności między obiektami bieżącej bazy danych; zależność jest widoczna, jeżeli jeden obiekt występuje w wyrażeniu zawartym w trwałej definicji drugiego obiektu; widok umożliwia także podgląd referencji między obiektami na poziomie dwóch różnych instancji (cross-server) lub dwóch różnych baz danych (cross-database) – w takich przypadkach jedynym identyfikatorem obiektu jest nazwa (w klasycznych zależnościach na poziomie bazy danych identyfikatorem jest unikalne ID),
  • sys.dm_sql_referenced_entities – funkcja dynamiczna, zwraca jeden wiersz dla każdego obiektu, do którego referencje znajdują się w definicji wybranego obiektu; jako parametry pobiera nazwę obiektu oraz jego klasę (OBJECT, DATABASE_DDL_TRIGGER lub SERVER_DDL_TRIGGER),
  • sys.dm_sql_referencing_entities – funkcja dynamiczna, zwraca jeden wiersz dla każdego obiektu, który w swojej trwałej definicji zawiera odwołanie do wybranego obiektu; jako parametry pobiera nazwę obiektu, dla którego użytkownik chce znaleźć zależności oraz jego klasę (OBJECT, TYPE, XML_SCHEMA_COLLECTION lub PARTITION_FUNCTION).

Poniższy fragment kodu pokazuje prosty przykład na pobieranie informacji o zależnościach między obiektami w CTP 4. A co ważniejsze, pozwala udowodnić, że nowy mechanizm działa sprawniej niż analogiczny mechanizm w starszych wersjach systemu, gdzie zależności były bardzo często „gubione” przy operacjach typu DROP / CREATE wykonywanych na obiektach, do których odwoływały się inne obiekty.

CREATE PROCEDURE A AS

GO

CREATE PROCEDURE B AS EXEC A

GO

SELECT * FROM sys.sql_expression_dependencies

SELECT * FROM sys.dm_sql_referenced_entities('dbo.B','OBJECT') 

SELECT * FROM sys.dm_sql_referencing_entities('dbo.A','OBJECT')

DROP PROCEDURE A

GO

SELECT * FROM sys.sql_expression_dependencies

SELECT * FROM sys.dm_sql_referenced_entities('dbo.B','OBJECT') 

SELECT * FROM sys.dm_sql_referencing_entities('dbo.A','OBJECT')

CREATE PROCEDURE A AS

GO

SELECT * FROM sys.sql_expression_dependencies

SELECT * FROM sys.dm_sql_referenced_entities('dbo.B','OBJECT') 

SELECT * FROM sys.dm_sql_referencing_entities('dbo.A','OBJECT')

DROP PROCEDURE A

DROP PROCEDURE B

 Do początku strony Do początku strony

Extended Events

W wersji Microsoft SQL Server 2008 July CTP pojawił się kolejny - wydajny i nie obciążający nadmiernie serwera - mechanizm, dzięki któremu administrator systemu nigdy nie będzie narzekał na zbyt małą ilość informacji diagnostycznych. Rozszerzone zdarzenia (ang. Extended Events) wykorzystują mechanizm Event Tracing for Windows (ETW), zaś swoją specyfiką przypominają dziennik zdarzeń systemu Windows. Zdarzenia przypominają po części liczniki monitora systemowego (perfmon.exe), a po części zdarzenia, jakie można przechwycić za pomocą aplikacji SQL Server Profiler.

Użytkownik może tworzyć sesje przechwytywania rozszerzonych zdarzeń za pomocą polecenia CREATE EVENT SESSION. Polecenie to pozwala wybrać z tzw. paczek (ang. package) przechwytywane zdarzenia, określić maksymalną ilość pamięci przydzielaną sesji, określić opcje przechwytywania i przechowywania zdarzeń, akcje podejmowane w reakcji na zdarzenia. Dostępne są trzy paczki: sqlos – oferuje niskopoziomowe zdarzenia interakcji z systemem operacyjnym, sqlserver – oferuje zdarzenia odpowiadające w większości licznikom monitora systemowego, package0 – zawiera typy danych, operatory porównania, akcje (podejmowane w odpowiedzi na zdarzenia), mapy (odpowiednik enumeracji w językach programowania, np. tryb I/O dla pliku), docelowe obiekty (ang. targets), które mogą być w jakikolwiek sposób związane z przechwytywanymi zdarzeniami (dzięki tym obiektom można zdefiniować np. zapisywanie zdarzeń do plików).

Informacje o paczkach i ich zawartości można uzyskać wykorzystując widoki systemowe

  • sys.dm_xe_packages – zwraca listę paczek (paczka jest identyfikowana przez nazwę I GUID),
  • sys.dm_xe_objects – zwraca listę obiektów zawartych w paczkach,
  • sys.dm_xe_object_columns – zwraca listę kolumn opisujących obiekty znajdujące się w paczkach.

Na przykład, pełną listę zdarzeń rozszerzonych można uzyskać wykonując proste zapytanie:

SELECT * FROM sys.dm_xe_objects WHERE object_type = 'event'

Aby rozpocząć sesję śledzenia rozszerzonych zdarzeń administrator musi uruchomić polecenie ALTER EVENT SESSION...STATE=START. Analogicznie, zatrzymanie sesji to kwestia wykonania polecenia ALTER EVENT SESSION...STATE=STOP. Można także bez zatrzymywania sesji usunąć ją poleceniem DROP EVENT SESSION.

CTP 4 udostępnia administratorowi widoki dynamiczne, które umożliwiają monitorowanie sesji przechwytywania rozszerzonych zdarzeń:

  • sys.dm_xe_sessions – zwraca informacje o aktywnych sesjach,
  • sys.dm_xe_session_targets – zwraca informacje o docelowych obiektach sesji,
  • sys.dm_xe_session_events – zwraca informacje o zdarzeniach w sesjach,
  • sys.dm_xe_session_event_actions – zwraca informacje o akcjach w sesjach,
  • sys.dm_xe_map_values – zwraca odpowiedniki tekstowe map,
  • sys.dm_xe_session_object_columns - zwraca informacje o konfiguracji sesji.

Poniższy fragment kodu (pochodzący z Books Online dla CTP 4) pokazuje przykładowe zastosowanie rozszerzonych zdarzeń do wykrycia zapytań, które trzymają blokady w bazie danych.

-- stworzenie sesji XEvents

CREATE EVENT SESSION OutstandingLocks ON SERVER

ADD EVENT sqlserver.lock_acquired 

(ACTION(

    sqlserver.tsql_stack

    sqlserver.plan_handle, 

    sqlserver.sql_text, 

    sqlserver.session_id

)),

ADD EVENT sqlserver.lock_released

ADD TARGET package0.pair_matching 

( 

    SET 

    begin_event='sqlserver.lock_acquired', 

    begin_matching_columns='resource_address', 

    end_event='sqlserver.lock_released',

    end_matching_columns='resource_address'

)

WITH (max_dispatch_latency = 1 seconds)

-- inicjalizacja sesji XEvents

ALTER EVENT SESSION OutstandingLocks ON SERVER STATE = START

-- po stwierdzeniu wystąpienia blokowania 

-- uruchamiamy poniższe zapytanie

SELECT CAST(xest.target_data AS xml) OpenLocks

FROM sys.dm_xe_session_targets xest

JOIN sys.dm_xe_sessions xes 

ON xes.address = xest.event_session_address

WHERE xest.target_name = 'pair_matching' 

AND xes.name = 'OutstandingLocks'

-- usunięcie sesji XEvents

DROP EVENT SESSION OutstandingLocks ON SERVER

 Do początku strony Do początku strony

Inne nowe funkcjonalności

Oprócz wymienionych funkcjonalności CTP 4 warto też wspomnieć o:

  • obsłudze nowych typów danych daty i czasu przez obiekty klasy XML Schema Collection,
  • poprawionym działaniu zapytań używających składni UNION zwracających wyniki w formacie XML,
  • możliwości tworzenia typów CLR przekraczających rozmiarem 8 kB (dotychczas było to niemożliwe),
  • możliwość użycia typów nullable w kodzie .NET obiektów baz danych używających CLR,
  • nowościach w Reporting Services – nowym designerze, nowym narzędziu do konfiguracji Reporting Services, uniezależnieniu Reporting Services od serwera IIS.

 Do początku strony Do początku strony

Podsumowanie

Microsoft SQL Server 2008 July CTP zawiera szereg nowych, ciekawych i niebanalnych funkcjonalności . Dodając do nich te nowości, które znalazły się w poprzednich wersjach (CTP od 1 do 3) otrzymujemy pokaźny pakiet udoskonaleń systemu SQL Server. Dzięki tym udogodnieniom system ma coraz większe możliwości, a życie programistów i administratorów staje się prostsze. A przecież to jeszcze nie koniec, czekają nas zapewne jeszcze liczne wersje CTP i BETA zanim finalna wersja systemu ujrzy światło dzienne.

 Do początku strony Do początku strony


Paweł Potasiński   Paweł Potasiński (MVP, MCT, MCDBA, MCSE, MCSD, MCITP)
Starszy programista w Asseco Business Solutions S.A. W codziennej pracy zajmuje się rozwojem aplikacji ERP oraz zagadnieniami z zakresu RD. Wykładowca akademicki na kilku uczelniach w Warszawie. Wcześniej pracował jako administrator baz danych oraz trener. Założyciel i lider Polskiej Grupy Użytkowników SQL Server. Wolontariusz organizacji GITCA wspierającej działalność grup pasjonackich IT Pro. Prelegent na licznych konferencjach krajowych i zagranicznych, m.in. European PASS Conference i Microsoft Technology Summit. Microsoft Most Valuable Professional (MVP) w kategorii SQL Server od lipca 2008 roku.

Co nowego w silniku bazodanowym SQL Server 2008 July CTP (CTP 4), cz. I     Microsoft SQL Server 2008