Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Bazy danych systemu SQL Server — podstawowe pojęcia

Wprowadzenie

Projekt SQL Server zakłada mapowanie jeden-do-wielu między aparatem bazy danych (instancją) a bazami danych hostowanymi w instancji. Oznacza to, że możesz wdrożyć kilka baz danych na jednej instancji serwera SQL. Zgodnie z dokumentacją Microsoft, na jednej instancji SQL Server można mieć do 32767 baz danych. Oczywiście będą ograniczenia, takie jak zasoby na serwerze, zarządzanie współbieżnością w TempDB, ruch sieciowy itp.

Bazy danych wdrożone w instancji SQL Server mogą być systemowymi bazami danych lub bazami danych użytkowników. Systemowe bazy danych są instalowane wraz z instancją. W tym artykule omówimy przeznaczenie każdej bazy danych Systemu. Ponadto wyjaśnimy, na co należy zwrócić uwagę podczas zarządzania systemowymi bazami danych na serwerze SQL.

Przegląd systemowych baz danych

Systemowe bazy danych są częścią wielu procesów zachodzących podczas instalacji instancji SQL Server. Domyślnie te bazy danych są tworzone w następujących ścieżkach:

%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA

i

%programfiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log

Ścieżka może być inna. Podczas instalacji programu SQL Server można określić lokalizację plików systemowej bazy danych.

Aby wyświetlić listę wszystkich baz danych systemu w instancji, możesz wywołać kod z Listingu 1. Listing 2 może posłużyć do określenia lokalizacji plików danych powiązanych z bazami danych systemu. Zauważ, że w obu skryptach używamy filtra zwracającego bazy danych z database_id równym 5 lub wyższym niż 5.

Podstawowe „widoczne” systemowe bazy danych mają database_ids 1,2,3,4 – odnoszą się one odpowiednio do mastera, tempdb, modelu i msdb. Istnieje również „niewidzialna” baza danych zwana bazami danych zasobów i innymi systemowymi bazami danych tworzonymi po włączeniu funkcji, takich jak replikacja.

-- Listing 1: System Databases
select 
name
,database_id
,create_date
,state_desc
,recovery_model_desc
,log_reuse_wait_desc
,physical_database_name
,is_db_chaining_on
,is_broker_enabled
,is_mixed_page_allocation_on
from sys.databases 
where database_id<5;

-- Listing 2: System Database Files
select 
name
,database_id
,DB_NAME(database_id)
,name
,physical_name
,type_desc
from sys.master_files 
where database_id<5;

Rysunek 1:Systemowe bazy danych

Baza danych główna

Główna baza danych to pierwsza baza danych otwarta na starcie SQL Server, zawierająca następujące dane:

  • Rekordy struktury/konfiguracji instancji i wszystkich innych baz danych.
  • Najbardziej dynamiczne widoki zarządzania niezbędne do monitorowania instancji.

Dzięki temu posiada informacje niezbędne do otwarcia wszystkich innych baz danych. Dlatego musi otwierać się jako pierwszy. Pytanie brzmi, jak to zrobić.

Parametry uruchamiania programu SQL Server zawierają dwa wpisy, które definiują lokalizacje plików danych i dzienników głównej bazy danych. Domyślne parametry startowe obejmują tylko trzy wiersze – trzecia to lokalizacja pliku dziennika błędów. Kiedy SQL Server uruchamia się, musi mieć możliwość zapisu do tego pliku dziennika błędów.

Baza danych master otwiera się jako pierwsza. Informacje przechowywane w głównej bazie danych, w tym konfiguracje zdefiniowane za pomocą sp_configure, dotyczą otwierania innych baz danych i kończenia procesu uruchamiania instancji.

Rysunek 3:Parametry uruchamiania serwera SQL

Istnieje kilka sposobów poznania przydatnych obiektów systemowych programu SQL Server, takich jak widoki i funkcje dynamicznego zarządzania.

Na przykład rozwiń widoki lub węzły programowalności dla głównej bazy danych w eksploratorze obiektów. Tam przejrzyj nazwy tych obiektów i uzyskaj więcej szczegółów z Books Online.

Możesz także migrować loginy z jednej instancji do drugiej. W tym celu przywróć kopię zapasową bazy danych master do instancji docelowej. Konkretną technikę opiszemy w osobnym artykule.

Rysunek 4:Poruszanie się po obiektach głównej bazy danych

Baza danych tempDB

Baza danych tempDB jest odpowiedzialna za przechowywanie danych tymczasowych, takich jak pośrednie wyniki ciężkich operacji. Może zawierać przebudowy indeksu, wierszowe wersje baz danych skonfigurowane z poziomami izolacji i inne funkcje zależne od wersji wierszy, takie jak READ_COMMITTED_SNAPSHOT.

Większość ludzi uważa tempDB za potencjalne wąskie gardło wydajności, ponieważ funkcje każdej bazy danych użytkownika w instancji zależą od tempDB.

Dostrajanie tempDB powinno być celowym ćwiczeniem. Jednak począwszy od programu SQL Server 2016, można dokładnie skonfigurować bazę danych tempDB podczas instalacji programu SQL Server. W poprzednim artykule szczegółowo opisano, jak należy konfigurować i monitorować bazę danych tempDB.

Wzorcowa baza danych

Bazę danych modelu można traktować jako szablon. Każda baza danych użytkownika utworzona w instancji SQL Server przejmuje konfigurację modelowej bazy danych. Ma ten sam rozmiar i ustawienia automatycznego wzrostu, te same lokalizacje plików itp. Można jednak celowo określić te ustawienia w inny sposób w instrukcji CREATE DATABASE.

Zasadniczo, jeśli masz aplikację, która samodzielnie tworzy bazę danych z ustawieniami domyślnymi, możesz chcieć skonfigurować modelową bazę danych. Zapewnia to kontrolę nad wyświetlaniem tych automatycznie tworzonych baz danych.

Poeksperymentujmy z tym trochę, używając kodu z Listingu 3.

-- Listing 3: Using the Model Database
select 
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files 
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO

create database EXP_BEFORE;
GO

USE [master]
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modeldev', SIZE = 102400KB , FILEGROWTH = 131072KB )
GO
ALTER DATABASE [model] MODIFY FILE ( NAME = N'modellog', SIZE = 102400KB )
GO

create database EXP_AFTER;
GO

select 
name
,database_id
,DB_NAME(database_id) database_name
,name
,physical_name
,type_desc
,size/1024*8 [size (MB)]
,growth/1024*8 [size (MB)]
from sys.master_files 
where DB_NAME(database_id)='model' or DB_NAME(database_id) like 'EXP%';
GO

Kod wykonuje następujące kroki:

  1. Zapytaj o sys.master_files aby określić ustawienia używane w bazie danych modelu
  2. Utwórz bazę danych
  3. Zmień wzrost pliku bazy danych modelu i ustawienia autowzrostu
  4. Utwórz kolejną bazę danych
  5. Zapytanie sys.master_files ponownie

Zwróć uwagę na pojedynczą frazę tworzenia bazy danych – „CREATE DATABASE”. W ten sposób pobiera ustawienia należące do bazy danych modelu. Wyniki pokazują, że za drugim razem, gdy wydaliśmy polecenie CREATE DATABASE, baza danych EXP_AFTER uzyskała rozmiar pliku 96 GB i autorozrost 128 MB (patrz Rysunek 5).

Rysunek 5:Korzystanie z bazy danych modeli

Warto również wspomnieć, że nie wszystkie ustawienia bazy danych są automatycznie pobierane z bazy danych modelu. Na przykład MIXED_PAGE_ALLOCATION jest ustawione na OFF podczas tworzenia nowej bazy danych, nawet jeśli jest włączone w bazach danych modelu i innych systemowych.

Baza danych msdb

Możesz uznać msdb za bazę danych SQL Server Agent. Przechowuje wszystkie dane związane z zadaniami, pocztą bazy danych, operatorami i automatyzacją. Znajdują się tam również dane związane z wysyłką dziennika transakcji, replikacją itp. Możesz to sprawdzić, uruchamiając zestawy zapytań z Listingu 4 w swojej instancji. Na przykład obiekty związane z automatyzacją są obecne w msdb.

-- Listing 4: Querying msdb Objects

-- Jobs, Alerts, Operators sit in the msdb database ...
select * from msdb..sysjobs
select * from msdb..sysalerts
select * from msdb..sysoperators
select * from msdb..sysmail_allitems

-- ... NOT in the master database
select * from master..sysjobs
select * from master..sysalerts
select * from master..sysoperators
select * from master..sysmail_allitems

Możesz się wiele dowiedzieć o obiektach w bazach danych msdb, wyodrębniając je i badając w SQL Server Books Online. Podejście jest takie samo jak w przypadku bazy danych master.

Możesz migrować zadania, operatory itp. z jednej instancji SQL Server do drugiej. W tym celu wykonaj kopię zapasową bazy danych msdb z instancji źródłowej i przywróć ją do instancji docelowej. Zajmiemy się tym w innym artykule.

Epilog

W tym artykule przedstawiliśmy szybki przegląd baz danych systemu.

Systemowe bazy danych są domyślnie dostarczane z instalacją SQL Server. Zrozumienie różnych systemowych baz danych i ich ról jest doskonałą pomocą w zarządzaniu instancją SQL Server.

Możesz uzyskać więcej informacji o tym, co przechowują i zrozumieć, jak nimi zarządzać, z Books Online i innych artykułów na CodingSight.

Referencje

  1. Systemowe bazy danych
  2. Bazy danych i pamięć masowa MS SQL Server
  3. Łączenie własności między bazami danych


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 powody, dla których warto priorytetowo traktować monitorowanie baz danych w planowaniu na rok 2020

  2. Wdrażanie LocalDB na komputerze klienckim

  3. Budowanie modelu uczenia maszynowego za pomocą SQL Server, ML.NET i C#

  4. Jak głęboko skopiować zestaw danych i zmienić odniesienia FK, aby wskazywały na wszystkie kopie?

  5. Popraw wydajność zapytań SQL Server na dużych tabelach