SQL Server Architecture (wyjaśnione)

MS SQL Server to architektura klient-serwer. Proces MS SQL Server rozpoczyna się od wysłania żądania przez aplikację kliencką. SQL Server akceptuje, przetwarza i odpowiada na żądanie przetworzonymi danymi. Omówmy szczegółowo całą architekturę przedstawioną poniżej:

Jak pokazano na poniższym diagramie, SQL Server składa się z trzech głównych komponentów Archistruktura:

  1. Warstwa protokołu
  2. Silnik relacyjny
  3. Silnik pamięci masowej
SQL Server Architektura
SQL Server ArchiSchemat tecture

Warstwa protokołu – SNI

WARSTWA PROTOKOŁU SERWERA MS SQL obsługuje 3 typy serwerów klienckich Architektura. Zaczniemy od „Trzy typy serwerów klienckich Architektura” które obsługuje MS SQL Server.

Pamięć współdzielona

Rozważmy ponownie scenariusz porannej rozmowy.

Warstwa protokołu - SNI

MAMA i TOM – Tutaj Tomek i jego Mama byli w tym samym logicznym miejscu, czyli w swoim domu. Tom mógł poprosić o kawę, a mama mogła podać ją na gorąco.

SERWER MS SQL – Tutaj MS SQL serwer zapewnia PROTOKÓŁ PAMIĘCI WSPÓŁDZIELONEJ. Tutaj KLIENT i MS SQL serwer działa na tej samej maszynie. Obydwa mogą komunikować się za pośrednictwem protokołu Shared Memory.

Analogia: Umożliwia mapowanie jednostek w powyższych dwóch scenariuszach. Możemy z łatwością przypisać Toma do Klienta, Mamę do serwera SQL, Dom do Maszyny, a komunikację werbalną do protokołu pamięci współdzielonej.

Z pulpitu konfiguracji i instalacji:

Do połączenia z lokalną bazą danych – In Studio zarządzania SQL, Opcja „Nazwa serwera” może być

"."

"Lokalny Gospodarz"

"127.0.0.1"

„Maszyna\Instancja”

Warstwa protokołu - SNI

TCP / IP

A teraz pomyśl, że wieczorem Tomek jest w nastroju imprezowym. Chce zamówić kawę w znanej kawiarni. Kawiarnia znajduje się 10 km od jego domu.

TCP / IP

Tutaj Tom i Starbuck znajdują się w różnych lokalizacjach fizycznych. Tom w domu i Starbucks na ruchliwym rynku. Komunikują się za pośrednictwem sieci komórkowej. Podobnie MS SQL SERVER zapewnia możliwość interakcji poprzez Protokół TCP / IP, gdzie KLIENT i MS SQL Server są od siebie zdalne i instalowane na osobnej maszynie.

Analogia: Umożliwia mapowanie jednostek w powyższych dwóch scenariuszach. Możemy z łatwością zmapować Toma na Klienta, Starbucka na serwer SQL, dom/rynek na lokalizację zdalną i wreszcie sieć komórkową na protokół TCP/IP.

Notatki z działu konfiguracji/instalacji:

  • W SQL Management Studio – w przypadku połączenia przez TCP\IP, opcją „Nazwa serwera” musi być „Maszyna\Instancja serwera”.
  • Serwer SQL używa portu 1433 w protokole TCP/IP.

TCP / IP

Nazwane rury

Wreszcie wieczorem Tomek miał ochotę na jasnozieloną herbatę, którą bardzo dobrze przygotowała jej sąsiadka Sierra.

Nazwane rury

Tutaj Tomek i jego Sąsiad, Sierra, są w tym samym fizyczny lokalizacja, bycie wzajemnym sąsiadem. Komunikują się przez Sieć wewnętrzna. Podobnie, SERWER MSSQL zapewnia możliwość interakcji za pośrednictwem Nazwana rura protokół. Tutaj KLIENT i SERWER MSSQL są połączone przez LAN.

Analogia: Umożliwia mapowanie jednostek w powyższych dwóch scenariuszach. Możemy z łatwością zmapować Toma na Klienta, Sierra na serwer SQL, Neighbor na LAN i wreszcie sieć Intra na Named Pipe Protocol.

Notatki z działu konfiguracji/instalacji:

  • Do połączenia za pośrednictwem nazwanego potoku. Ta opcja jest domyślnie wyłączona i musi zostać włączona przez Menedżera konfiguracji SQL.

Co to jest TDS?

Teraz wiemy, że istnieją trzy typy klient-serwer Architecture, rzućmy okiem na TDS:

  • TDS oznacza tabelaryczny strumień danych.
  • Wszystkie 3 protokoły wykorzystują pakiety TDS. TDS jest hermetyzowany w pakietach sieciowych. Umożliwia to przesyłanie danych z komputera klienckiego na serwer.
  • TDS został po raz pierwszy opracowany przez firmę Sybase i obecnie jest własnością firmy Microsoft

Silnik relacyjny

Silnik relacyjny jest również nazywany procesorem zapytań. Posiada SQL Server komponenty, które określają, co dokładnie ma robić zapytanie i jak można to najlepiej zrobić. Odpowiada za realizację zapytań użytkowników poprzez żądanie danych z silnika magazynującego i przetwarzanie zwracanych wyników.

Jak pokazano w Archiistnieje diagram techniczny 3 główne elementy silnika relacyjnego. Przeanalizujmy szczegółowo komponenty:

Parser CMD

Dane otrzymane z warstwy protokołu są następnie przekazywane do silnika relacyjnego. „Parser CMD” jest pierwszym komponentem Relational Engine odbierającym dane zapytania. Głównym zadaniem CMD Parser jest sprawdzenie zapytania Błąd składniowy i semantyczny. Wreszcie to generuje drzewo zapytań. Omówmy szczegółowo.

Parser CMD

Kontrola składni:

  • Jak każdy inny język programowania, MS SQL również ma predefiniowany zestaw słów kluczowych. Ponadto SQL Server ma własną gramatykę, którą rozumie serwer SQL.
  • SELECT, INSERT, UPDATE i wiele innych należą do predefiniowanych list słów kluczowych MS SQL.
  • CMD Parser sprawdza składnię. Jeśli dane wejściowe użytkowników nie są zgodne z tymi regułami składni języka lub gramatyki, to zwraca błąd.

Przykład: Załóżmy, że Rosjanin poszedł do japońskiej restauracji. Zamawia fast foody po rosyjsku. Niestety kelner rozumie tylko po japońsku. Jaki byłby najbardziej oczywisty wynik?

Odpowiedź brzmi – kelner nie ma możliwości dalszej realizacji zamówienia.

Nie powinno być żadnych odchyleń w gramatyce lub języku akceptowanym przez serwer SQL. Jeśli tak, serwer SQL nie może go przetworzyć i dlatego zwróci komunikat o błędzie.

O zapytaniach MS SQL dowiemy się więcej w nadchodzących tutorialach. Jednak rozważ poniżej najbardziej podstawową składnię zapytania jako

SELECT * from <TABLE_NAME>;

Aby teraz zorientować się, co robi składnia, powiedzmy, czy użytkownik uruchamia podstawowe zapytanie, jak poniżej:

SELECR * from <TABLE_NAME>

Zwróć uwagę, że zamiast „WYBIERZ” użytkownik wpisał „SELECR”.

Wynik: Parser CMD przeanalizuje tę instrukcję i zgłosi komunikat o błędzie. Ponieważ „SELECR” nie jest zgodny z predefiniowaną nazwą słowa kluczowego i gramatyką. Tutaj Parser CMD oczekiwał „WYBIERZ”.

Kontrola semantyczna:

  • Wykonuje to Normalizer.
  • W najprostszej formie sprawdza, czy nazwa kolumny i nazwa tabeli, której dotyczy zapytanie, istnieją w schemacie. A jeśli istnieje, powiąż go z Query. Jest to również znane jako Wiążący.
  • Złożoność wzrasta, gdy zapytania użytkownika zawierają VIEW. Normalizer wykonuje zamianę z wewnętrznie przechowywaną definicją widoku i wiele więcej.

Rozumiemy to na podstawie poniższego przykładu –

SELECT * from USER_ID

Wynik: Parser CMD przeanalizuje tę instrukcję w celu sprawdzenia semantyki. Parser zgłosi komunikat o błędzie, ponieważ Normalizer nie znajdzie żądanej tabeli (USER_ID), ponieważ ona nie istnieje.

Utwórz drzewo zapytań:

  • Ten krok generuje inne drzewo wykonania, w którym można uruchomić zapytanie.
  • Należy zauważyć, że wszystkie różne drzewa mają ten sam pożądany wynik.

Optimizer

Zadaniem optymalizatora jest stworzenie planu wykonania zapytania użytkownika. Jest to plan, który określi sposób wykonania zapytania użytkownika.

Należy pamiętać, że nie wszystkie zapytania są zoptymalizowane. Optymalizacja odbywa się dla poleceń DML (Data Modification Language), takich jak SELECT, INSERT, DELETE i UPDATE. Zapytania takie są najpierw oznaczane, a następnie wysyłane do optymalizatora. Polecenia DDL, takie jak CREATE i ALTER, nie są zoptymalizowane, ale zamiast tego są kompilowane do postaci wewnętrznej. Koszt zapytania jest obliczany na podstawie czynników takich jak użycie procesora, użycie pamięci i potrzeby wejścia/wyjścia.

Rolą optymalizatora jest znalezienie najtańszy, a nie najlepszy, opłacalny plan wykonania.

Zanim przejdziemy do bardziej technicznych szczegółów Optymalizatora, rozważ poniższy przykład z życia wzięty:

Przykład:

Załóżmy, że chcesz otworzyć konto bankowe online. Znasz już jeden bank, w którym otwarcie konta zajmuje maksymalnie 2 dni. Ale masz także listę 20 innych banków, co może zająć mniej niż 2 dni. Możesz rozpocząć współpracę z tymi bankami, aby ustalić, które z nich zajmują mniej niż 2 dni. Teraz możesz nie znaleźć banku, co zajmie mniej niż 2 dni, a samo wyszukiwanie powoduje dodatkową stratę czasu. Lepiej byłoby otworzyć konto w pierwszym banku.

Wnioski: Ważniejsze jest, aby wybierać mądrze. Mówiąc precyzyjnie, wybrać, które opcja jest najlepsza, a nie najtańsza.

Podobnie SM SQL Optimizer działa na wbudowanych wyczerpujących/heurystycznych algorytmach. Celem jest zminimalizowanie czasu wykonywania zapytania. Wszystkie algorytmy optymalizatora są właściwość Microsoft i tajemnica. Chociaż, poniżej znajdują się kroki wysokiego poziomu wykonane przez MS SQL Optimizer. Poszukiwania optymalizacji składają się z trzech faz przedstawionych na poniższym schemacie:

Optimizer

Faza 0: Poszukiwanie trywialnego planu:

  • Jest to również znane jako Etap wstępnej optymalizacji.
  • W niektórych przypadkach może istnieć tylko jeden praktyczny, wykonalny plan, znany jako plan trywialny. Nie ma potrzeby tworzenia zoptymalizowanego planu. Powodem jest to, że dalsze wyszukiwanie doprowadziłoby do znalezienia tego samego planu wykonania w czasie wykonywania. A to wszystko z dodatkowym kosztem wyszukiwania zoptymalizowanego planu, który w ogóle nie był wymagany.
  • Jeśli nie znaleziono żadnego planu Trivial, to 1st Rozpoczyna się faza.

Faza 1: Wyszukaj plany przetwarzania transakcji

  • Obejmuje to wyszukiwanie Plan prosty i złożony.
  • Proste wyszukiwanie planu: Wcześniejsze dane kolumny i indeksu biorące udział w zapytaniu zostaną użyte do analizy statystycznej. Zwykle obejmuje to, ale nie ogranicza się do jednego indeksu na tabelę.
  • Mimo to, jeśli prosty plan nie zostanie znaleziony, to przeszukiwany jest bardziej złożony Plan. Obejmuje on Multiple Index per table.

Faza 2: Przetwarzanie równoległe i optymalizacja.

  • Jeśli żadna z powyższych strategii nie zadziała, Optymalizator szuka możliwości przetwarzania równoległego. Zależy to od możliwości przetwarzania i konfiguracji Maszyny.
  • Jeśli nadal nie jest to możliwe, rozpoczyna się końcowa faza optymalizacji. Teraz ostatecznym celem optymalizacji jest znalezienie wszystkich innych możliwych opcji najlepszego wykonania zapytania. Końcowa faza optymalizacji Algorithms jest Microsoft Przyzwoitość.

Wykonawca zapytania

Wykonawca zapytania

Zapytanie o wywołania wykonawcy Metoda dostępu. Zapewnia plan wykonania logiki pobierania danych wymaganej do wykonania. Po odebraniu danych z Storage Engine wynik zostaje opublikowany w warstwie protokołu. Na koniec dane przesyłane są do użytkownika końcowego.

Silnik pamięci masowej

Zadaniem silnika pamięci masowej jest przechowywanie danych w systemie pamięci masowej, takim jak dysk lub SAN, i pobieranie danych w razie potrzeby. Zanim zagłębimy się w silnik pamięci masowej, przyjrzyjmy się, w jaki sposób przechowywane są dane Baza danych i typ dostępnych plików.

Plik danych i zakres:

Silnik pamięci masowej

Plik danych fizycznie przechowuje dane w postaci stron danych, przy czym każda strona danych ma rozmiar 8 KB, tworząc najmniejszą jednostkę pamięci w SQL Server. Te strony danych są logicznie pogrupowane w celu utworzenia zakresów. Żaden obiekt nie ma przypisanej strony w SQL Server.

Utrzymanie obiektu odbywa się poprzez ekstensje. Strona zawiera sekcję zwaną nagłówkiem strony o rozmiarze 96 bajtów, zawierającą metadane dotyczące strony, takie jak typ strony, numer strony, rozmiar wykorzystanego miejsca, rozmiar wolnego miejsca oraz wskaźnik do następnej i poprzedniej strony itp.

Typy plików

Typy plików

  1. Plik podstawowy
  • Każda baza danych zawiera jeden plik podstawowy.
  • Przechowuje wszystkie ważne dane związane z tabelami, widokami, wyzwalaczami itp.
  • Rozszerzenie jest.MDF zwykle, ale może mieć dowolne rozszerzenie.
  1. Plik wtórny
  • Baza danych może, ale nie musi, zawierać wiele plików dodatkowych.
  • Jest to opcjonalne i zawiera dane specyficzne dla użytkownika.
  • Rozszerzenie jest.nafi zwykle, ale może mieć dowolne rozszerzenie.
  1. Plik dziennika
  • Znany również jako dzienniki zapisu z wyprzedzeniem.
  • Rozszerzenie jest.ldf
  • Używany do zarządzania transakcjami.
  • Służy do odzyskiwania danych po niechcianych instancjach. Wykonaj ważne zadanie polegające na wycofaniu niezatwierdzonych transakcji.

Storage Engine składa się z 3 komponentów; przyjrzyjmy się im szczegółowo.

Metoda dostępu

Działa jako interfejs pomiędzy wykonawcą zapytań i Buffer Dzienniki menedżerów/transakcji.

Metoda dostępu sama w sobie nie wykonuje żadnego wykonania.

Pierwsza czynność polega na ustaleniu, czy zapytanie jest:

  1. Wybierz instrukcję (DDL)
  2. Instrukcja Non-Select (DDL i DML)

W zależności od wyniku Metoda Dostępu podejmuje następujące kroki:

  1. Jeśli zapytanie jest DDL, instrukcja SELECT, zapytanie jest przekazywane do Buffer Menedżer do dalszego przetwarzania.
  2. A jeśli zapytaj, czy Instrukcja DDL, NON-SELECT, zapytanie jest przekazywane do Menedżera transakcji. Dotyczy to głównie instrukcji UPDATE.

Metoda dostępu

Buffer Menedżer

Buffer menadżer zarządza podstawowymi funkcjami poniższych modułów:

  • Planuj pamięć podręczną
  • Analiza danych: Buffer pamięć podręczna i przechowywanie danych
  • Brudna strona

Nauczymy się Planować, Buffer i Pamięć podręczna danych w tej sekcji. Brudne strony omówimy w sekcji Transakcja.

Buffer Menedżer

Planuj pamięć podręczną

  • Istniejący plan zapytań: Menedżer bufora sprawdza, czy plan wykonania znajduje się w przechowywanej pamięci podręcznej planu. Jeśli tak, używana jest pamięć podręczna planu zapytania i powiązana z nią pamięć podręczna danych.
  • Pierwszy plan pamięci podręcznej: Skąd pochodzi istniejąca pamięć podręczna Plan?Jeśli plan wykonania zapytania po raz pierwszy jest uruchamiany i jest złożony, ma sens, aby zapisać go w pamięci podręcznej Plane. Zapewni to szybszą dostępność, gdy następnym razem serwer SQL otrzyma to samo zapytanie. Tak więc, to nic innego, jak samo zapytanie, którego wykonanie Planu jest przechowywane, jeśli jest uruchamiane po raz pierwszy.

Analiza danych: Buffer pamięć podręczna i przechowywanie danych

Buffer menadżer zapewnia dostęp do wymaganych danych. Poniżej możliwe są dwa podejścia w zależności od tego, czy dane istnieją w pamięci podręcznej danych, czy nie:

Buffer Pamięć podręczna – miękkie analizowanie:

Buffer Pamięć podręczna - miękkie analizowanie

Buffer Menedżer szuka danych w Buffer w pamięci podręcznej danych. Jeśli występuje, to te dane są używane przez Query Executor. Poprawia to wydajność, ponieważ liczba operacji wejścia/wyjścia jest zmniejszona podczas pobierania danych z pamięci podręcznej w porównaniu do pobierania danych z magazynu danych.

Przechowywanie danych – twarde analizowanie:

Przechowywanie danych — twarda analiza

Jeśli dane nie są obecne w Buffer Menedżer niż wymagany Dane są wyszukiwane w Magazynie danych. Jeśli przechowuje również dane w pamięci podręcznej danych do wykorzystania w przyszłości.

Brudna strona

Jest przechowywany jako logika przetwarzania Menedżera transakcji. Dowiemy się szczegółowo w rozdziale Menedżer transakcji.

Menedżer transakcji

Menedżer transakcji

Menedżer transakcji jest wywoływany, gdy metoda dostępu ustali, że Query jest instrukcją Non-Select.

Menedżer dziennika

  • Menedżer logów śledzi wszystkie aktualizacje dokonane w systemie poprzez dzienniki w dziennikach transakcji.
  • Logi mają Rejestruje numer sekwencyjny z identyfikatorem transakcji i rekordem modyfikacji danych.
  • Służy do śledzenia Transakcja zatwierdzona i wycofanie transakcji.

Menedżer zamków

  • Podczas transakcji powiązane dane w magazynie danych znajdują się w stanie blokady. Procesem tym zajmuje się Lock Manager.
  • Proces ten zapewnia spójność i izolacja danych. Znane również jako właściwości ACID.

Proces wykonania

  • Log Manager rozpoczyna rejestrację, a Lock Manager blokuje powiązane dane.
  • Kopia danych jest przechowywana w pliku Buffer Pamięć podręczna.
  • Kopia danych, które powinny zostać zaktualizowane, jest przechowywana w buforze dziennika, a wszystkie zdarzenia aktualizują dane w buforze danych.
  • Strony przechowujące dane są również znane jako Brudne strony.
  • Rejestrowanie punktów kontrolnych i zapisów z wyprzedzeniem: Ten proces uruchamia i zaznacza całą stronę z Dirty Pages na dysk, ale strona pozostaje w pamięci podręcznej. Częstotliwość wynosi około 1 uruchomienie na minutę. Ale strona jest najpierw wypychana na stronę Dane pliku dziennika Buffer dziennik. Jest to tzw Zapisuj logowanie z wyprzedzeniem.
  • Leniwy pisarz: Brudna strona może pozostać w pamięci. Gdy serwer SQL zaobserwuje ogromne obciążenie i Buffer pamięć jest potrzebna do nowej transakcji, zwalnia Dirty Pages z pamięci podręcznej. Działa na LRU – Najrzadziej używany algorytm czyszczenia strony z puli buforów na dysk.

Podsumowanie

  • Trzy typy serwerów klienckich Archiistnieją następujące technologie: 1) Pamięć współdzielona 2) TCP/IP 3) Potoki nazwane
  • TDS, opracowany przez Sybase i obecnie należący do Microsoft, to pakiet kapsułkowany w pakietach sieciowych w celu przesyłania danych z komputera klienckiego do serwera.
  • Silnik relacyjny składa się z trzech głównych komponentów:Parser CMD: Jest to odpowiedzialne za błędy składniowe i semantyczne i ostatecznie generuje drzewo zapytań.Optymalizator: Rolą optymalizatora jest znalezienie najtańszego, a nie najlepszego, opłacalnego planu wykonania.

    Wykonawca zapytania: Osoba wykonująca zapytanie wywołuje metodę dostępu i udostępnia plan wykonania logiki pobierania danych wymaganej do wykonania.

  • Istnieją trzy typy plików Plik podstawowy, plik dodatkowy i pliki dziennika.
  • Silnik pamięci masowej: Posiada następujące ważne komponentyMetoda dostępu: Ten komponent Określa, czy zapytanie jest instrukcją Select, czy Non-Select. Przywołuje Buffer i odpowiednio Menedżera Transferu.Buffer Kierownik: Buffer menedżer zarządza podstawowymi funkcjami Plan Cache, analizowaniem danych i brudną stroną.

    Menedżer transakcji: Zarządza transakcjami typu Non-Select przy pomocy menedżerów dzienników i blokad. Ułatwia także ważną implementację rejestrowania zapisu z wyprzedzeniem i leniwych modułów zapisujących.

Czytaj więcej Czytaj więcej