
W dniu 9 lutego 2019 odbyła się po raz trzeci w Polsce, a po raz drugi w Krakowie konferencja SQL Saturday #824, na której poprowadziłem sesję „Cut the tables into partitions v.2”






W dniu 9 lutego 2019 odbyła się po raz trzeci w Polsce, a po raz drugi w Krakowie konferencja SQL Saturday #824, na której poprowadziłem sesję „Cut the tables into partitions v.2”
W lutym 2018 r. na spotkaniu warszawskiej grupy Data Comunnity Poland prowadziłem sesję o tematyce partycjonowania „Kroimy tabele na partycje”. Ze względu na duże zainteresowanie postanowiłem powtórzyć tę sesję na SQL Saturday #824 w Krakowie, ale w nieco zmienionej formie. Podczas tej sesji zaprezentowana zostanie jedna z technik optymalizacji baz danych, czyli podział tabel i indeksów bazy danych SQL Server. Pozwala to poprawić wydajność, rozumianą jako szybkość dostępu do danych i ułatwia zarządzanie. Partycjonowanie wiąże się z różnymi mechanizmami, takimi jak przełączanie partycji, okno przesuwne strefy lub eliminacja partycji, które mogą być pomocne w codziennej pracy. Omówimy podstawowe pojęcia, metody podziału, zalety i wady dobrych praktyk. Wspomnę o mitach o podziałach. Wszystko będzie poparte przykładami.
Zapraszam wszystkich na moją sesję „Cut the tables into partitions v.2„, która odbędzie się 9 lutego 2019 r. na konferencji SQL Saturday #824 w Krakowie.
Czytaj dalejSQL 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.
1 2 3 4 5 |
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> |
Przykład użycia:
Bardzo często zdarza się, że trzeba dokonać zmian na wielu milionach rekordów. Wykonując update czy delete na takiej ilości rekordów w ramach jednej transakcji doprowadzamy do sytuacji rozrostu loga transakcyjnego.
Oczywiście jeżeli byśmy takie operacje wykonywali małymi porcjami to powstało by dużo transakcji i po zakończeniu każdej z nich silnik sql serwera wstawiał by ponownie dane do loga transakcyjnego wykorzystując już zwolnione miejsca (Recovery model = SIMPLE)
Poniżej przedstawiam przykładowy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
use Foo go declare @i int =1 declare @x int=0 set rowcount 50000; -- będzie wykonywał update tylko na 50000 rekordów while @i>0 begin UPDATE Foo.dbo.Tabela SET kolumna = wartosc WHERE {predykat} set @i=@@ROWCOUNT set @x=@x+@i end set rowcount 0 |
W dniach od 14 do 16 maja odbył się już po raz kolejny SQLDay 2018.
Oto kilka wybranych zdjęć:
Czytaj dalejNa co dzień pracując z tabelami i indeksami partycjonującymi stworzyłem procedurę, która na podstawie parametrów wejściowych zwraca nazwę grupy plików, na której założona jest wybrana partycja.
Parametry wejściowe procedury to: