DARIUSZ BREJNAK. Cut the tables into partitions v.2

Podobne dokumenty
Fizyczna struktura bazy danych w SQL Serwerze

Nowe technologie baz danych

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

1 Instalowanie i uaktualnianie serwera SQL Server

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Struktura drzewa w MySQL. Michał Tyszczenko

CREATE USER

Internetowe bazy danych

STROJENIE BAZ DANYCH: INDEKSY. Cezary Ołtuszyk coltuszyk.wordpress.com

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Ref. 7 - Język SQL - polecenia DDL i DML

Administracja i programowanie pod Microsoft SQL Server 2000

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Oracle11g: Wprowadzenie do SQL

Partycjonowanie tabel (1)

SQL SERVER 2012 i nie tylko:

Transakcje jednocześnie ACID

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Optymalizacja poleceń SQL Metody dostępu do danych

SYSTEM INFORMATYCZNY KS-SEW

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

Projektowanie systemów baz danych

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

Administracja bazami danych

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Wykład 05 Bazy danych

Język SQL, zajęcia nr 1

Bazy danych Access KWERENDY

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Relacyjne bazy danych. Podstawy SQL

Administracja i programowanie pod Microsoft SQL Server 2000

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Składowane procedury i funkcje

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Microsoft SQL Server Podstawy T-SQL

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Uprawnienia, role, synonimy

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

SQL Server. Odtwarzanie baz danych.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

PODSTAWY BAZ DANYCH. 10. Partycjonowanie tabel i indeksów. 2009/ Notatki do wykładu "Podstawy baz danych"

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

System imed24 Instrukcja Moduł Analizy i raporty

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Relacyjne bazy danych. Podstawy SQL

Przygotowanie bazy do wykonywania kopii bezpieczeństwa

Cele. Definiowanie wyzwalaczy

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych 10. SQL Widoki

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

Wstęp. Opis ten dotyczy wydziałów orzeczniczych.

SQL (ang. Structured Query Language)

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

WPROWADZENIE DO BAZ DANYCH

ACESS- zadania z wykorzystaniem poleceń SQL

Bazy danych Ćwiczenia projektowe

SYSTEM INFORMATYCZNY KS-SEW

Wydajność hurtowni danych opartej o Oracle10g Database

SIECI KOMPUTEROWE I BAZY DANYCH

Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja

Bazy danych. Dr inż. Paweł Kasprowski

Viatoll Calc v1.3. Viatoll Calc. Instrukcja użytkownika. Strona 1

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Wykład 8. SQL praca z tabelami 5

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Tabela wewnętrzna - definicja

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. zadania

P o d s t a w y j ę z y k a S Q L

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Zadania do wykonania na laboratorium

Autor: Joanna Karwowska

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

Wykład 5. SQL praca z tabelami 2

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Tadeusz Pankowski

SQL 4 Structured Query Lenguage

Transkrypt:

DARIUSZ BREJNAK Cut the tables into partitions v.2

DARIUSZ BREJNAK Od wielu lat pracuje jako administrator SQL Server w hurtowniach danych. Administrator baz danych i programista z ponad dwudziestopięcioletnim doświadczeniem w dziedzinie wytwarzania oprogramowania biznesowego oraz dostarczania kompleksowych rozwiązań opartych na bazach danych. Certyfikowany trener MCT, autor szkoleń i warsztatów. Posiada liczne certyfikaty (MCSA, MCSE, MCTS,MCITP), uczestnik i prelegent na spotkaniach warszawskiej grupy Data Community Poland. Kontakt: Dariusz.Brejnak@dbbs.pl dbrejnak@gmail.com

Agenda Co to jest partycjonowanie, do czego jest nam potrzebne? Pionowe i Poziome partycjonowanie Partition Function, Scheme, Column Partitioned Table or Index Split, Merge Partition Switch Partition Trucate Partition Index Partition [Online] Lock Escalations Sliding window scenario

Co to jest partycjonowanie? Partycjonowanie to proces bazy danych, w którym bardzo duże tabele są podzielone na wiele mniejszych części. Dzięki temu, zapytania, które uzyskują dostęp tylko do części danych, mogą działać szybciej, ponieważ jest mniej danych do zeskanowania. Głównym celem partycjonowania jest pomoc w utrzymaniu dużych tabel i zmniejszenie ogólnego czasu reakcji na odczytywanie i ładowanie danych dla poszczególnych operacji SQL. Zapewnia to skalowalność i łatwość zarządzania.

Na czym polega partycjonowanie? Partycjonowanie polega na fizycznym dzieleniu tabeli i indeksów na mniejsze jednostki zwane partycjami. Z logicznego punktu widzenia nadal widać całą tabelę i indeksy. Partycjonowanie tabel i indeksów może być osiągnięte na kilka sposobów. Dane zapisywane są w plikach rozmieszczone wielu grupach plików (FG), ale z punktu widzenia użytkownika logicznie, pozostają widoczne jakby wchodziły w skład jednej tylko tabeli. Nie jest jednak wymagane, aby podział skutkował fizycznym rozłożeniem tabeli pomiędzy kilka fizycznych plików rozmieszczonych na wielu fizycznych dyskach twardych.

Dlaczego potrzebujemy partycjonowania? Partycjonowanie tabel i indeksów bazy danych SQL Server pozwala poprawić wydajność, rozumianą jako szybkość dostępu do danych oraz ułatwia zarządzanie. Załóżmy, że mamy tabelę, która rośnie z dnia na dzień. W takim przypadku tabela może powodować problemy: Maintenance tej tabeli. To zajmie dużo czasu i zużyje więcej zasobów (CPU, IO itp.). Tworzenie kopii zapasowej. Problemy z blokadami.

Kilka zalet partycjonowania Jeżeli grupy plików znajdują się na różnych dyskach (z dedykowanymi kontrolerami!), to odczyt z takiej tabeli odbywa się jednocześnie równolegle z każdego z tych dysków. Oszczędzamy na podziale FG, gdzie możemy dane historyczne (tzw. zimne dane umieścić na najwolniejszych dyskach, a dane gorące na najszybszych) Jeżeli użytkownik uruchomi transakcję blokującą wiele rekordów w ramach jednej tylko partycji, to serwer może zdecydować o zablokowaniu tylko tej jednej partycji zamiast całej tabeli (do czego by mogło dojść, gdyby tabela nie była partycjonowana)-lock Escalation Można przenieść partycję z jednej tabeli do innej niepartycjonowanej lub partycjonowanej tabeli bez kopiowania rekordów tej tabeli. Kopiowanie polega po prostu na przepięciu tej partycji z jednej tabeli do innej i jest to wykonywane na poziomie metadanych. Jest to operacja zwana jako partition switching.

Pionowe partycjonowanie tabel Pionowe partycjonowanie tabel jest używane głównie w celu zwiększenia wydajności, szczególnie w przypadkach, w których zapytanie pobiera wszystkie kolumny z tabeli zawierającej wiele bardzo szerokich kolumn tekstowych lub typu BLOB. W tym przypadku, aby skrócić czasy dostępu, kolumny BLOB można wydzielić do innych tabel. Innym przykładem jest ograniczenie dostępu do poufnych danych, np. hasła, informacje o zarobkach itp. Podział pionowy dzieli tabelę na dwie lub więcej tabel zawierających różne kolumny

Pionowe partycjonowanie- przykład Duża tabela z raportami zawierająca podstawowe informacje, takie jak nazwa raportu, identyfikator, numer raportu i kolumna Varchar(max) z opisem raportu. Zakładamy, że ~ 95% użytkowników szuka części nazwy raportu, numeru itd. i tylko ~ 5% odczytuje pole opisu raportów i szuka wg. opisu. Załóżmy, że wszystkie te wyszukiwania doprowadzą do skanowania w indeksie klastrowym, a ponieważ skanowanie indeksu odczytuje wszystkie wiersze w tabeli, koszt zapytania jest proporcjonalny do całkowitej liczby wierszy w tabeli. Naszym celem jest zminimalizowanie liczby operacji IO i zmniejszenie kosztów wyszukiwania. (https://www.sqlshack.com/wp-content/uploads/2014/04/verticalpartitioning.png)

SELECT er.reportid, er.reportname, er.reportnumber FROM horizontal.employeereports er WHERE er.reportnumber LIKE '%33%' SELECT er.reportid, er.reportname, er.reportnumber FROM horizontal.reportsdata er WHERE er.reportnumber LIKE '%33%' (3691 rows affected) Table 'EmployeeReports'. Scan count 3, logical reads 107016, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times: CPU time = 140 ms, elapsed time = 137 ms. (3691 rows affected) Table 'ReportsData'. Scan count 1, logical reads 421, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times: CPU time = 31 ms, elapsed time = 67 ms. DEMO

Poziome partycjonowanie danych dostępne jest w wersji Enterprise i Developer do SQL Server 2016. Od SQL Server 2016 z SP1 partycjonowanie dostępne jest również w wersjach Standard, Web, Express (mamy jednak w tych wersja ograniczenia). Tabela normalna to szczególny przypadek tabeli z partycjonowanej składającej się tylko z jednej partycji B-Tree Clustered NonClustered NonClustered NonClustered Clustered Partition 1 Clustered Partition 2 Clustered Partition N B-Tree Partitioned Table

Partition Function Określa sposób podziału tabeli, zawiera informacje o typie klucza partycjonującego (np. int, date) oraz wartości tego klucza na podstawie, której wskazuje czy rekord należy zapisać do jednej czy do innej partycji. Funkcje składają się z listy granicznych wartości, które rozdzielają partycje. Definiuje się również warunki brzegowe podziału. Zawsze powstaje N+1 partycji, gdzie N to ilość warunków brzegowych. Dwa rodzaje funkcji: Lewa dane wpadają do lewej partycji od wartości brzegowej Prawa - dane wpadają do prawej partycji od wartości brzegowej

CREATE PARTITION FUNCTION pf_name (input_parameter_type ) AS RANGE [ LEFT RIGHT ] FOR VALUES (val1, val2, val3); Partition 1 2 3 4 Values for Left Col1<=val1 Col1>val1 and col1 <=val2 Col1>val2 and col1 <=val3 Col1> val3 Values for Right Col1<val1 Col1>=val1 and col1 <val2 Col1>=val2 and col1 <val3 Col1> =val3 https://docs.microsoft.com/dede/sql/relationaldatabases/tables/media/partitioning3.png

Partition Column To kolumna zwana kluczem partycjonującym. Na podstawie jej wartości następuje wybór partycji, do której ma zostać zapisany rekord. Zabronione typy danych w kluczu partycjonującym to: text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), aliasy typów danych i typy CLR zdefiniowane przez użytkownika. Kluczem partycjonującym może być tylko jedna kolumna. Jeżeli jakiś scenariusz zakłada partycjonowanie po złożonym kluczu składającym się z kilku kolumn, to należy wtedy utworzyć kolumnę wyliczaną i dopiero po niej partycjonować.

Partition Scheme Składa się z listy grup plików, na których mają być umieszczone partycje. Schemat partycjonowania wiąże jednocześnie się z funkcją, która będzie ustalać numer partycji dla danego rekordu na podstawie przekazanej do niej wartości klucza. W schemacie partycjonowania używanych jest zawsze N+1 grup plików, gdzie N to liczba warunków brzegowych zawartych w funkcji partycjonującej. Maksymalnie można utworzyć 15 000 partycji.

Partition Scheme CREATE PARTITION SCHEME ps_invline AS PARTITION pf_invline TO (FG_InvLine01, FG_InvLine02, FG_InvLine03) CREATE PARTITION SCHEME ps_invline AS PARTITION pf_invline ALL TO (FG_InvLineAll)

Partition Table Tabelę partycjonowaną tworzy się za pomocą składni CREATE TABLE i wskazuje we frazie ON schemat partycjonowania, a nie grupy plików, jak w przypadku tabel niepartycjonowanych. [ON nazwa_schematu(nazwa_klucza)] CREATE TABLE name (..) ON nazwa_schematu(nazwa_klucza)

SPLIT PARTITION W momencie, gdy przyrastają dane i dochodzą coraz to nowsze rekordy może zajść potrzeba dodania nowych partycji. Realizowane to jest przez podzielenie ostatniej pustej partycji. Nie zalecany jest podział partycji z danymi. Podczas tej operacji oprócz zmian w metadanych fizycznie są przenoszone dane (operacje INSERT i DELETE). Dokładny opis można znaleźć: "Oops I forgot to leave an empty SQL table partition, how can I split it with minimal IO impact? https://blogs.msdn.microsoft.com/sql_pfe_blog/2013/08/13/oops-i-forgot-toleave-an-empty-sql-table-partition-how-can-i-split-it-with-minimal-io-impact/ "SPLIT PARTITION is causing an abnormal LOG growth with the simple recovery model" https://connect.microsoft.com/sqlserver/feedback/details/379763/split-partition-iscausing-an-abnormal-log-growth-with-the-simple-recovery-model

SPLIT PARTITION Aby utworzyć nową partycję, która będzie przechowywała nowe rekordy (nie ma ich jeszcze w tabeli) najpierw przygotujmy nową grupę plików. Modyfikujemy schemę partycjonującą przekazując informację, jaka ma być następna schema do użycia. ALTER PARTITION SCHEME ps_invline NEXT USED [FG_InvLine05] Teraz modyfikujemy funkcję partycjonującą podając nowy punkt brzegowy. ALTER PARTITION FUNCTION [pf_invline]() SPLIT RANGE ('2016-06-01')

SPLIT PARTITION Clustered Partition 1 Clustered Partition 2 Clustered Partition 3 Clustered Partition N 2016-01-01 2016-02-01 2016-03-01 2016-05-01 Clustered Partition 1 Clustered Partition 2 Clustered Partition 3 Clustered Partition N 2016-01-01 2016-02-01 2016-03-01 2016-05-01 2016-06-01 Clustered Partition N+1

MERGE PARTITION Aby połączyć dwie partycje w jedną modyfikujemy tylko funkcję partycjonującą podając punkt brzegowy do połączenia. ALTER PARTITION FUNCTION [pf_invline]() MERGE RANGE ('2014-01-01 ) W wyniku połączenia partycji zniknęła wartość graniczna 2014-01-01 Wcześniej partycja 1 przechowywała dane od 0001-01-01 do 2013-12-31, a partycja 2 z zakresu 2014-01-01-2014-01-31. Teraz po połączeniu partycja 2 została dołączona do partycji nr 1, która przyjęła nowy zakres 0001-01-01-2014-01-31 Zgodnie z dobrymi praktykami zalecane jest w tabeli partycjonowanej zostawiać zawsze pierwszą i ostatnią partycję pustą. Uniknie się wtedy problemów związanych z dzieleniem czy też łączeniem partycji z danymi.

MERGE PARTITION DEMO Clustered Partition 1 Clustered Partition 2 Clustered Partition 3 2014-01-01 2014-02-01 2014-03-01 2014-08-01 Clustered Partition N Clustered Partition 1 Clustered Partition 3 1 2014-02-01 2014-03-01 2014-08-01 Clustered Partition N - 1

SWITCH PARTITION Przepinanie, wypinanie z partycji, wpinanie do partycji, czyli switchowanie partycji

SWITCH PARTITION DEMO Operacja tego typu jest bardzo szybka. Tak naprawdę to nie są fizycznie przenoszone dane, całość przepięcia jest realizowana na poziomie metadanych. Kilka wymogów dotyczących SWITCH Partition: struktura tabeli docelowej musi być identyczna z tabelą, z której wypinamy dane tabela docelowa musi być założona na tej samej grupie plików co wypinana partycja docelowa partycja musi być pusta (lub tabela). Nie użyjemy tego mechanizmu, jeśli tabela docelowa zawiera dane. jeżeli przepinamy partycje do tabeli docelowej, która również jest partycjonowana to muszą być zgodne w obu tabelach klucze partycjonujące. Podczas wpinania tabeli niepartycjonowanej do tabeli partycjonowanej należy na tabeli źródłowej założyć CHECK tak aby silnik bazy wiedział, że przepinane dane mają taki sam zakres jak zakres w partycji 1 tabeli docelowej. CHECK musi się zawierać w zakresie partycji.

TRUNCATE PARTITION SQL Server 2016 wprowadza modyfikację do instrukcji TRUNCATE TABLE, która pozwala czyścić określoną partycję lub zestaw partycji z tabeli, jednocześnie uzyskując zalety instrukcji TRUNCATE TABLE bez usuwania wszystkich danych z tabeli. Ten nowy mechanizm filtru w instrukcji TRUNCATE TABLE jest uzyskiwany za pomocą opcji WITH PARTITIONS () określającej partycję lub zestawy partycji. TRUNCATE TABLE [ { database_name.[ schema_name ]. schema_name. } ] table_name [ WITH ( PARTITIONS ( { <partition_number_expression> <range> } [,...n ] ) ) ] [ ; ] <range> ::= <partition_number_expression> TO <partition_number_expression>

TRUNCATE PARTITION Przykład użycia TRUNCATE TABLE dbo.sqlpartitiontable WITH (PARTITIONS (2)); TRUNCATE TABLE dbo.sqlpartitiontable WITH (PARTITIONS (1,3,6)) TRUNCATE TABLE dbo.sqlpartitiontable WITH (PARTITIONS (1,2, 4 TO 6)); TRUNCATE TABLE dbo.sqlpartitiontable WITH (PARTITIONS (4 TO 6)); Jak i kiedy używać Truncate table z klauzulą Partition? Proces szybkiego archiwizowania / oczyszczania wymaga wyłączenia partycji. Chociaż Switch Partition jest operacją aktualizacji metadanych i nie wymaga przenoszenia fizycznych danych pomiędzy plikami danych, w niektórych przypadkach wymaga wyłącznych blokad, a to powoduje blokowanie tabeli dla ładowania i usuwania danych.

TRUNCATE PARTITION Usuwanie danych (usuwanie, ale nie archiwizowanie) z określonych partycji było żmudnym zadaniem w poprzednich wersjach SQL Server. Operacje te blokowały tabelę, co uniemożliwiło użytkownikom dostęp do tabeli; to również zakończyło się powiększeniem dziennika transakcji. Przed SQL 2016, następujące kroki zostały wykonane w celu usunięcia danych lub usunięcia plików z partycji. Utwórz nową tabelę do przełączania z tą samą definicją i indeksem klastrowym, co w tabeli podzielonej na partycje (Tabela stage ingowa) Przełącz partycję na inną tabelę Zmień funkcję Partycji i Schemat partycji, aby pozbyć się grupy plików Wykonaj merge Usuń grupę plików

TRUNCATE PARTITION A co z wprowadzeniem nowej komendy TRUNCATE TABLE w tym scenariuszu? Jest to dość płynny i skuteczny sposób usuwania wierszy z tabeli podzielonej na partycje, ponieważ działa on jak normalna operacja Truncate tabeli. Wykonaj TRUNCATE na tabeli z klauzulą WITH (PARTITIONS()) Wykonaj polecenie MERGE Usuń pustą grupę plików

INDEX PARTITION Od SQL Server 2008 można również wykonać odbudowę indeksu dla wybranej partycji. Nie trzeba już przebudowywać całego indeksu na całej wybranej tabeli partycjonowanej. ALTER INDEX [CL_IDX_InvoiceLinePartitioning_InvoiceDate] ON sales.invoicelinespartitioning REBUILD Partition = 5 [ALL] Jeśli podamy Partition=ALL przebudowane zostaną wszystkie indeksy na partycjach. Indeksy te muszą być indeksami wyrównanymi (Alligned Index).

ALTER INDEX - ONLINE W wielu systemach podczas przebudowy indeksów występują blokady co powoduje wydłużenie operacji. Właśnie dlatego SQL Server wspiera przebudowę indeksu online. Należy dodać: WITH (ONLINE = ON) do instrukcji przebudowy indeksu. Przebudowa indeksu w trybie offline jest to trochę szybsza. Do wersji SQL Server 2016 SP1 dostępna opcja wyłącznie dla edycji Enterprise lub Developer. Przebudowa ONLINE wybranej partycji dostępna jest od SQL Server 2014, we wcześniejszych wersjach dostępna jest tylko przebudowa wszystkich partycji. ALTER INDEX idx_foo_id on dbo.foo REBUILD PARTITION = 2 WITH (ONLINE = ON)

ALTER INDEX - ONLINE Ograniczenia: Indeksy klastrowe muszą być tworzone, przebudowywane lub kasowane w trybie offline, gdy tabela zawiera następujące typy danych (LOB): image, ntext, text. Nieunikalne indeksy nieklastrowane mogą być tworzone online, gdy tabela zawiera typy danych LOB, ale żadna z tych kolumn nie jest używana w definicji indeksu jako kolumna w kluczu lub jako kolumna dołączona (included). Zalety przebudowy wybranej partycji online Lepsza kontrola nad przebudową online poprzez wybór jednej lub więcej partycji. Dzięki temu tabela będzie dostępna podczas odbudowy. Procesor, zużycie pamięci również zmniejszyłoby się z powodu przebudowy pojedynczej partycji.

LOCK ESCALATION - zwiększenie możliwości partycjonowania Używając partycjonowania staramy się zwiększać wydajność i skalowalność w SQL Server. Często DBA skarżą się deweloperom, że ich kod nie jest skalowalny i że występują blokady w systemie ze względu na sposób napisania kodu. Bardzo często dochodzi do sytuacji, że w ramach jednej tabeli są aktualizowane duże ilości danych w obrębie jednej partycji co powodu eskalacje blokad do poziomu tabeli. Jest to wykonywane zgodnie z hierarchią blokad. Po przekroczeniu 5000 modyfikowanych rekordów SQL Server rozpoczyna proces eskalacji blokad.

LOCK ESCALATION Istnieje również błędne przekonanie, że SQL Server będzie eskalować od poziomu wiersza do poziomu strony, a na koniec do poziomu tabeli. Taka ścieżka nie istnieje w SQL Server! SQL Server będzie domyślnie zawsze eskalować od poziomu wiersza bezpośrednio do poziomu tabeli. Jeśli mamy tabelę partycjonowaną (wersja Enterprise lub od SQL Server 2016SP1), można skonfigurować eskalację do poziomu partycji. Należy jednak uważać, ponieważ eskalacja blokady do poziomu partycji może spowodować zakleszczenie. Dlatego ta opcja nie jest domyślnie włączona.

LOCK ESCALATION Od wersji SQL Server 2008 można również kontrolować, w jaki sposób SQL Server wykonuje eskalację blokady - za pomocą instrukcji LOCK_ESCALATION. Dostępne są 3 różne opcje: TABLE (domyślnie zawsze eskalacja do poziomu tabeli) AUTO (jeśli tabela jest podzielona na partycje do eskalacja do poziomu partycji, jeśli nie to do poziomu tabeli) DISABLE wyłączenie eskalacji (uwaga, bo mogą być nadmiernie zużyta pamięć) ALTER TABLE Person.Person SET ( LOCK_ESCALATION = AUTO -- or TABLE or DISABLE) DEMO

Windows sliding partition table scenario Jest to scenariusz polegający na "przesuwaniu" okna z danymi. Generalnie polega on na tym, że w tabeli partycjonowanej regularnie przeprowadzamy dodawanie nowych punktów brzegowych i jednocześnie usuwamy stare punkty brzegowe. Partition 1 Partition 2 Partition 3 Partition 4 Partition N Partition N+1 Switch Out & Merge B-Tree Partitioned Table Split

Sliding a LEFT Partition Function Window Na początku nowego okresu przy lewym zakresie partycja nr 1 zawiera stare dane, druga z ostatniej partycji zawiera już dane bieżące, a ostatnia pusta partycja jest przeznaczona dla przyszłych danych. Operacje Sliding a Left Partition Window możemy wykonać w następujących krokach: 1.SWITCH OUT - wypięcie partycji 1 do tabeli stagingowej w celu archiwizacji lub wyczyszczenia 2.MERGE - połączenie pustej partycji 1 z niepustą partycją 2 tworzy się partycja 1 z danymi 3.SPLIT - podział ostatniej pustej partycji na dwie puste 4.Powtarzamy kroki od 1 do 3 przy rozpoczęciu kolejnego okresu.

Sliding a RIGHT Partition Function Window Ta strategia nieco się różni niż w przypadku partycji z zakresem po lewej stronie. Różnica polega na tym, że partycja nr 2 zawiera stare dane na początku nowego okresu. Druga z ostatnich niepustych partycji zawiera dane bieżące, a ostatnia pusta partycja jest przeznaczona dla przyszłych danych. Operacje Sliding a Right Partition Window możemy wykonać w krokach: 1. SWITCH OUT - wypięcie partycji 2 do tabeli stagingowej w celu archiwizacji lub wyczyszczenia 2. MERGE - połączenie pustej partycji 1 z pustą partycją 2 tworzy się pusta partycja 1 3. SPLIT - podział ostatniej pustej partycji na dwie puste 4. Powtarzamy kroki od 1 do 3 przy rozpoczęciu kolejnego okres

Dziękuję za uwagę. DARIUSZ BREJNAK dbrejnak@gmail.com dariusz.brejnak@dbbs.pl