Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej.

Podobne prezentacje


Prezentacja na temat: "Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej."— Zapis prezentacji:

1 Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej Inteligencji, Instytut Informatyki Biomedycznej (Partycjonowanie tabel)

2 Informacje podstawowe Partycjonowanie tabel dostępne jest tylko w edycjach Enterprise i Developer SQL Server (oraz wersje ewaluacyjne), Partycjonowanie obiektów bazy danych: umożliwia zwiększenie wydajności (szybkość dostępu do danych), oraz ułatwia zarządzanie, Partycjonowanie tabeli polega na podzieleniu na mniejsze części, Nie jest wymagane jednak, aby podział skutkował fizycznym ro- złożeniem tabeli pomiędzy kilka fizycznych plików rozmiesz- czonych na fizyczne dyski twarde (zwiększenie wydajności samej aplikacji, ponieważ dane odczytywane są równocześnie przy udziale wielu głowic dysku twardego).

3 Partycjonowanie tabel (przykład) Przykład – wykorzystanie podziału horyzontalnego, względem pewnego klucza nałożonego na wiersze tabeli: Na przykład tabela zawierająca 100 milionów wierszy może zostać podzielona na 12 partycji (mniejszych tabel) reprezentujących kolejne miesiące w roku. Jeżeli zapytanie wymaga danych z określonego miesiąca, to będzie odwoływało się do określonej części (partycji) tabeli, a nie do całego zbioru. Najistotniejszym pytaniem, na które należy odpowiedzieć, jest w jaki sposób wyznaczyć klucz partycjonowania tabeli. Odpowiedź na to pytanie wymaga przeprowadzenia analizy biznesowej, ponieważ jako klucz partycjonowania powinny zostać wybrane te kolumny, które pozwolą odwoływać się do jak najmniejszej liczby partycji. Typowym zastosowaniem partycjonowania tabeli jest podział ze względu na wiek danych. Można wyobrazić sobie sytuację, w której tabela zawiera dane z ostatnich dwóch lat, ale tylko dane z ostatniego miesiąca są najczęściej potrzebne. Można więc w taki sposób podzielić tabelę, aby w jednej partycji znajdowały się dane tylko z ostatniego miesiąca, a pozostałe dane znajdą się na innej lub innych partycjach.

4 Proces partycjonowania tabeli Proces partycjonowania (podziału) tabeli: Utworzenie odpowiedniej liczby grup plików, Wstawienie do każdej grupy pliku, zawierającego partycję tabeli, Utworzenie funkcji partycjonującej, Wykonanie schematu partycjonowania – powiązanie funkcji partycjonują- cej oraz grup plików, w których będą przechowywane kolejne partycje ta- beli, Utworzenie definicji tabeli (CREATE TABLE) i wskazanie we frazie ON schematu partycjonowania (a nie grupy plików, jak dla tabel niepartycjo- nowanych). Uprawnienia – rola serwerowa sysadmin lub role bazodanowe (db_owner, db_ddladmin)

5 Proces partycjonowania tabeli (c.d.2) Utworzenie grupy plików – należy rozważyć wszystkie uwa- runkowania biznesowe oraz znać dobrze dane, ich przyrost oraz rozkład zanim zostanie podjęta decyzja o liczbie grup plików, które mają być utworzone. W naszym przypadku utworzone zostaną cztery grupy plików: USE master GO ALTER DATABASE AdventureWorks ADD FILEGROUP grupa_1 GO ALTER DATABASE AdventureWorks ADD FILEGROUP grupa_2 GO ALTER DATABASE AdventureWorks ADD FILEGROUP grupa_3 GO ALTER DATABASE AdventureWorks ADD FILEGROUP grupa_4 GO

6 Proces partycjonowania tabeli (c.d.3) Następnie do każdej nowej grupy plików należy wstawić pliki. W praktyce, każdy plik zostałby umieszczony na osobnym dysku, aby zwiększyć szybkość odczytu i zapisu danych. Jednak w przykładzie pliki zostaną utworzone w jednym katalogu: ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'AdventureWorks_D1', FILENAME = N'C:\BazyDanych\DAY_2\MOD_2\AdventureWorks_D1.ndf', SIZE = 2048KB, FILEGROWTH = 1024KB ) TO FILEGROUP [grupa_1] GO ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'AdventureWorks_D2', FILENAME = N'C:\BazyDanych\DAY_2\MOD_2\AdventureWorks_D2.ndf', SIZE = 2048KB, FILEGROWTH = 1024KB ) TO FILEGROUP [grupa_2] GO ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'AdventureWorks_D3', FILENAME = N'C:\BazyDanych\DAY_2\MOD_2\AdventureWorks_D3.ndf', SIZE = 2048KB, FILEGROWTH = 1024KB ) TO FILEGROUP [grupa_3] GO ALTER DATABASE [AdventureWorks] ADD FILE (NAME = N'AdventureWorks_D4', FILENAME = N'C:\BazyDanych\DAY_2\MOD_2\AdventureWorks_D4.ndf', SIZE = 2048KB, FILEGROWTH = 1024KB ) TO FILEGROUP [grupa_4] GO

7 Proces partycjonowania tabeli (c.d.4) Następnie Po utworzeniu grup plików i wstawieniu plików należy zdefiniować funkcję partycjonującą, która określa sposób podziału tabeli na partycje. Na tym etapie nie wskazuje się, która kolumna będzie kluczem partycjonowania, wiadomo jedynie jakiego typu jest ten klucz (w tym wypadku – int). W definicji funkcji partycjonującej nie podaje się również nazwy tabeli: USE AdventureWorks GO CREATE PARTITION FUNCTION funkcja_SalesOrderDetail(int) AS RANGE RIGHT FOR VALUES(50000,60000,70000) GO W pokazanym powyżej przypadku kluczem partycjonowania będzie ko- lumna o typie int, a do kolejnych partycji trafią przedziały wartości (1) od 0 do (pierwsza partycja), (2) od do (druga), (3) od do (trzecia) oraz (4) od (czwarta). Słowo kluczowe RIGHT w definicji funkcji oznacza, że wartości brzegowe (50000, i 70000) trafią do kolejnej partycji.

8 Proces partycjonowania tabeli (c.d.5) Ostatnim krokiem przed podziałem tabeli na partycje jest utworzenie schematu partycjonowania, który wykorzysta funkcje partycjonującą wykonaną w poprzednim punkcie. Tak, jak w przypadku funkcji, podczas tworzenia schematu partycjo- nowania nie trzeba podawać nazwy tabeli w jego definicji. tabeli: USE AdventureWorks GO CREATE PARTITION SCHEME schemat_SalesOrderDetail AS PARTITION funkcja_SalesOrderDetail TO (grupa_1,grupa_2,grupa_3,grupa_4) GO

9 Proces partycjonowania tabeli (c.d.6) Obiekty, które zostały wykonane, czyli funkcja i schemat partycjono- wania, można odnaleźć w SSMS w Eksploratorze obiektów. Należy wy- brać bazę danych AdventureWorks2008 a następnie przejść do sek- cji Storage:

10 Proces partycjonowania tabeli (c.d.7) Po utworzeniu wszystkich wymaganych obiektów należy przystąpić do utworzenia partycjonowanej tabeli. Należy w niej podać nazwę schematu, względem którego zostanie podzielona na partycje. Nazwę tą wskazuje się we frazie ON nazwa_schematu(nazwa_klucza): USE [AdventureWorks] GO CREATE TABLE [Sales].[Kopia_SalesOrderDetail] ( [SalesOrderID] [int] NOT NULL, [SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL, [CarrierTrackingNumber] [nvarchar](25) NULL, [OrderQty] [smallint] NOT NULL, [ProductID] [int] NOT NULL, [SpecialOfferID] [int] NOT NULL, [UnitPrice] [money] NOT NULL, [UnitPriceDiscount] [money] NOT NULL, [LineTotal] AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))), [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL, [ModifiedDate] [datetime] NOT NULL, CONSTRAINT [PK_SalesOrderDetail_SalesOrderDetailID] PRIMARY KEY CLUSTERED ( [SalesOrderID] ASC, [SalesOrderDetailID] ASC ) ON schemat_SalesOrderDetail([SalesOrderID])

11 Wprowadzenie danych do tabeli Po utworzeniu tabeli i podzieleniu jej na partycje można wypełnic ją danymi. Ponieważ wykonana w poprzednim punkcie tabela jest kopią tabeli Sales.SalesOrderDetail to najprościej będzie wypełnić ją już istniejącymi danymi: USE [AdventureWorks] GO INSERT INTO [Sales].[Kopia_SalesOrderDetail] ( [SalesOrderID],[CarrierTrackingNumber],[OrderQty],[ProductID],[SpecialOfferID],[UnitPrice],[UnitPriceDiscount],rowguid,[ModifiedDate] ) SELECT [SalesOrderID],[CarrierTrackingNumber],[OrderQty],[ProductID],[SpecialOfferID],[UnitPrice],[UnitPriceDiscount],NEWID(),[ModifiedDate] FROM [Sales].[SalesOrderDetail] GO

12 Wyświetlanie danych Po wypełnieniu tablicy danymi można sprawdzić, do których partycji dane zostały faktycznie zapisane. Kod zapytania, które wyświetla informację, w której partycji znajduje się dany wiersz: USE AdventureWorks GO SELECT SalesOrderDetailId, [SalesOrderID], $PARTITION.funkcja_SalesOrderDetail ([SalesOrderID]) AS 'Numer partycji' FROM Sales.Kopia_SalesOrderDetail GO Wynik:

13 Wyświetlanie danych (c.d.) Poniższe zapytanie wyświetla informację o ilości wierszy w danej partycji. Pozwala to ocenić, czy funkcja partycjonująca została wybrana poprawnie, czy może należy ją zmodyfikować. W idealnym przypadku partycje powinny być zapełnione równą ilością elementów, ale w praktyce jest to trudne do osiągnięcia: SELECT $PARTITION.funkcja_SalesOrderDetail ([SalesOrderID]) AS 'Numer partycji', COUNT(*) AS 'Liczba elementów' FROM Sales.Kopia_SalesOrderDetail GROUP BY $PARTITION.funkcja_SalesOrderDetail ([SalesOrderID]) ORDER BY [Numer partycji] GO Wynik:

14 Wyższa Szkoła Informatyki i Zarządzania ul. Sucharskiego 2, Rzeszów, Polska Dziękuję za uwagę…


Pobierz ppt "Tworzenie typów danych i tabel dr inż. Łukasz Piątek Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie Katedra Systemów Ekspertowych i Sztucznej."

Podobne prezentacje


Reklamy Google