SlideShare a Scribd company logo
1 of 26
Download to read offline
WWW.HIGHWHEELSOFTWARE.COM 1
© High Wheel Software All rights reserved
RDBMS dla programistów
Przemysław Dzierżak
WWW.HIGHWHEELSOFTWARE.COM 2
O prowadzącym
• Programista .NET od 2005 roku
• Architekt hurtowni danych (Microsoft SQL Server)
• Współwłaściciel
• Miłośnik:
• Automatyzacji
• Czytelnego kodu
• LEAN Software Development / Agile
WWW.HIGHWHEELSOFTWARE.COM 3
Agenda
• Tabele
• Indeksy
• Partycje
• Statystyki
• Utrzymanie bazy danych (maintenance)
WWW.HIGHWHEELSOFTWARE.COM 4
Tabele
WWW.HIGHWHEELSOFTWARE.COM 5
Nośnik danych
• Dane na dysku
• Zapis / odczyt stronami (page) – 8kB
• Typy stron:
• dane,
• indeksy,
• ‚blob’ – dane binarne, długie teksty,
• (oraz różne techniczne)
Plik
Grupa
plików
Baza
Pole Wiersz Strona Partycja
Obiekt
BD
Baza
WWW.HIGHWHEELSOFTWARE.COM 6
Dwa ułożenia danych
Sterta (Heap)
LinkedList<Row>
ICollection<Row>
B-drzewo
SortedDictionary<Key,LinkedList<Row>>
IDictionary<Key,ICollection<Row>>
http://guide.couchdb.org/draft/btree.html
WWW.HIGHWHEELSOFTWARE.COM 7
Dwa ułożenia danych (2)
Sterta
+ Brak narzutu, prostota
+ Zrównoleglenie operacji
- Wyszukanie elementu O(n)
B-drzewo
http://guide.couchdb.org/draft/btree.html
+Wyszukanie po kluczu O(log n)
- Ograniczone zrównoleglenie
- Dodatkowe strony
WWW.HIGHWHEELSOFTWARE.COM 8
Ograniczenie wydajności zapisu B-drzewa
B-drzewo, klucz = Primary Key (identity)
WWW.HIGHWHEELSOFTWARE.COM 9
Indeksy
WWW.HIGHWHEELSOFTWARE.COM 10
Czym jest indeks?
Indeks to B-drzewo ☺
• Klastrowany (clustered)
• główna struktura przechowywania danych jest B-drzewem
• Nieklastrowany (nonclustered)
• dodatkowa struktura obok głównej sterty / B-drzewa
• zawiera kopię części danych
WWW.HIGHWHEELSOFTWARE.COM 11
Tabelka – przykład C#
CREATE TABLE Customers (
nr int not null,
name nvarchar(50),
country nvarchar(50)
);
public class Customer {
public int nr;
public string name;
public string country;
}
public interface CustomersTable {
ICollection<Customer> Data { get; }
}
WWW.HIGHWHEELSOFTWARE.COM 12
Indeksy – NONCLUSTERED i sterta
CREATE TABLE Customers (
nr int not null,
name nvarchar(50),
country nvarchar(50)
);
CREATE NONCLUSTERED INDEX ByCountry
ON Customers (Country);
public class Customer {
public int nr;
public string name;
public string country;
}
public interface CustomersTable {
ICollection<Customer> Data { get; }
IDictionary<string,ICollection<int>>
ByCountry { get; }
}
WWW.HIGHWHEELSOFTWARE.COM 13
Indeksy - CLUSTERED
CREATE TABLE Customers (
nr int not null,
name nvarchar(50),
country nvarchar(50)
);
CREATE CLUSTERED INDEX Data
ON Customers (name);
public class Customer {
public int nr;
public string name;
public string country;
}
public interface CustomersTable {
IDictionary<string, ICollection<Customer>>
Data { get; }
}
WWW.HIGHWHEELSOFTWARE.COM 14
Indeksy – CLUSTERED + NONCLUSTERED
CREATE TABLE Customers (
nr int not null,
name nvarchar(50),
country nvarchar(50)
);
CREATE CLUSTERED INDEX Data
ON Customers (name);
CREATE NONCLUSTERED
INDEX ByCountry
ON Customers (Country);
public class Customer {
public int nr;
public string name;
public string country;
}
public interface CustomersTable {
IDictionary<string, ICollection<Customer>>
Data { get; }
IDictionary<string, ICollection<string>>
ByCountry { get; }
}
* W zasadzie Tuple<string,RowId> chyba że
UNIQUE(name)
WWW.HIGHWHEELSOFTWARE.COM 15
Indeksy – PRIMARY KEY
CREATE TABLE Customer (
nr int not null IDENTITY(1,1) PRIMARY KEY,
name nvarchar(50),
country nvarchar(50)
);
 Niejawna deklaracja CLUSTERED INDEX (nr)
 PRIMARY KEY NONCLUSTERED
niejawne: NONCLUSTERED INDEX (nr)
WWW.HIGHWHEELSOFTWARE.COM 16
Sterta vs B-Drzewo - dogrywka
• CLUSTERED INDEX
• Wszystkie inne indeksy odwołują się do klucza tego indeksu
• min. 1 odczyt więcej
• Przenoszenie rekordu – bez zmiany indeksów nieklastrowanych
• Sterta
• Indeksy odwołują się do położenia rekordu
• odczyt od razu danych
• Przenoszenie rekordu – zmiana w indeksach
WWW.HIGHWHEELSOFTWARE.COM 17
Partycje
WWW.HIGHWHEELSOFTWARE.COM 18
Partycje w C#
• Tabela bez partycji – ICollection<Row>
• Tabela partycjonowana:
• IDictionary<PartitionId, ICollection<Row>>
• // partitionId = Func( row.PartitionKey )
WWW.HIGHWHEELSOFTWARE.COM 19
Partycje cechy
• Dane fizycznie w wielu tabelach o tej samej strukturze,
logicznie połączone w jedną kolekcję
• Partition1.Concat(Partition2).Concat(Partition3)…
• Partycje można niezależnie:
• Podmienić / dodać / usunąć
• Umieszczać w różnych plikach (wydajność/koszt/backup)
• Kompresować
• Utrzymywać (działania administracyjne)
• Każdy obiekt można partycjonować inaczej
WWW.HIGHWHEELSOFTWARE.COM 20
Statystyki
WWW.HIGHWHEELSOFTWARE.COM 21
Statystyki
[DEMO]
WWW.HIGHWHEELSOFTWARE.COM 22
Utrzymanie (maintenance)
WWW.HIGHWHEELSOFTWARE.COM 23
Kompresja
• Procesory się nudzą
• Mogą kompresować dane
• Ucieszy adminów,
• Może przyspieszyć działanie.
• Kompresja
• per wiersz
• per strona
• BTW: kompresja backupu
WWW.HIGHWHEELSOFTWARE.COM 24
Utrzymanie obiektów bazodanowych
• Sterty – tylko w skrajnych przypadkach
• B-drzewa:
• Równoważenie – REORGANIZE (fragmentacja 5-30%)
• Przebudowa – REBUILD (fragmentacja > 30%)
• Brak automatu w SQL Server!
• Statystyki
• Przeliczanie
• Automat – 20% zmian
• SQL Server 2016 lub trace flag – malejący %
• [Demo]
WWW.HIGHWHEELSOFTWARE.COM 25
Podsumowanie - złożoność „tabeli” MSSQL
• 1 tabela – wiele struktur
• Dane, indeksy, statystyki (…)
• Nowy indeks =
• Szybszy odczyt (wybrane zapytania)
• Wolniejszy zapis
• Więcej zajętego miejsca
• Struktury żyją długo – wymagają opieki
Zapraszamy do kontaktu
ul. Al. Zwycięstwa 96/98, 81-451 Gdynia
www.highwheelsoftware.com
przemyslaw.dzierzak@highwheelsoftware.com

More Related Content

Similar to SQLServer dla Programistów

IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychWomen in Technology Poland
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuHighWheelSoftware
 
AnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseAnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseWlodek Bielski
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Bartosz Ratajczyk
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and AnalyticsŁukasz Grala
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PROIDEA
 
SQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPSQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPWlodek Bielski
 
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...Konrad Sagala
 
Projektowanie i przetwarzanie danych w SQL
Projektowanie i przetwarzanie danych w SQLProjektowanie i przetwarzanie danych w SQL
Projektowanie i przetwarzanie danych w SQLNatalia Stanko
 
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...Elitmind
 
20160405 Cloud Community Poznań - Cloud Analytics on Azure
20160405  Cloud Community Poznań - Cloud Analytics on Azure20160405  Cloud Community Poznań - Cloud Analytics on Azure
20160405 Cloud Community Poznań - Cloud Analytics on AzureŁukasz Grala
 
Wprowadzenie do modelowania danych w PowerPivot
Wprowadzenie do modelowania danych w PowerPivotWprowadzenie do modelowania danych w PowerPivot
Wprowadzenie do modelowania danych w PowerPivotKamil Nowinski
 
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptxSeeQuality.net
 
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. Future Processing
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQLExpert.pl
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 

Similar to SQLServer dla Programistów (20)

IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danych
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
 
AnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseAnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data Warehouse
 
Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?Jak działa rekurencyjne CTE?
Jak działa rekurencyjne CTE?
 
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics20060416   Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
20060416 Azure Boot Camp 2016- Azure Data Lake Storage and Analytics
 
Podstawy ETL z SSIS
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSIS
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
 
SQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTPSQL Server 2014: In-memory OLTP
SQL Server 2014: In-memory OLTP
 
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...
Zarządzanie użytkownikami i komputerami w firmie - dlaczego warto znać Active...
 
Projektowanie i przetwarzanie danych w SQL
Projektowanie i przetwarzanie danych w SQLProjektowanie i przetwarzanie danych w SQL
Projektowanie i przetwarzanie danych w SQL
 
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...
Elitmind @ 113. Spotkanie Data Community, Warszawa - Business Intelligence w ...
 
20160405 Cloud Community Poznań - Cloud Analytics on Azure
20160405  Cloud Community Poznań - Cloud Analytics on Azure20160405  Cloud Community Poznań - Cloud Analytics on Azure
20160405 Cloud Community Poznań - Cloud Analytics on Azure
 
Transact-SQL. Czarna księga
Transact-SQL. Czarna księgaTransact-SQL. Czarna księga
Transact-SQL. Czarna księga
 
Wprowadzenie do modelowania danych w PowerPivot
Wprowadzenie do modelowania danych w PowerPivotWprowadzenie do modelowania danych w PowerPivot
Wprowadzenie do modelowania danych w PowerPivot
 
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx
[PL] WDI22-Adrian Chodkowski - Azure SQL Skalowalna baza w świecie chmury.pptx
 
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
 
SQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracjiSQL Server 2008 Tips & tricks administracji
SQL Server 2008 Tips & tricks administracji
 
Prezentacja
PrezentacjaPrezentacja
Prezentacja
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 

SQLServer dla Programistów

  • 1. WWW.HIGHWHEELSOFTWARE.COM 1 © High Wheel Software All rights reserved RDBMS dla programistów Przemysław Dzierżak
  • 2. WWW.HIGHWHEELSOFTWARE.COM 2 O prowadzącym • Programista .NET od 2005 roku • Architekt hurtowni danych (Microsoft SQL Server) • Współwłaściciel • Miłośnik: • Automatyzacji • Czytelnego kodu • LEAN Software Development / Agile
  • 3. WWW.HIGHWHEELSOFTWARE.COM 3 Agenda • Tabele • Indeksy • Partycje • Statystyki • Utrzymanie bazy danych (maintenance)
  • 5. WWW.HIGHWHEELSOFTWARE.COM 5 Nośnik danych • Dane na dysku • Zapis / odczyt stronami (page) – 8kB • Typy stron: • dane, • indeksy, • ‚blob’ – dane binarne, długie teksty, • (oraz różne techniczne) Plik Grupa plików Baza Pole Wiersz Strona Partycja Obiekt BD Baza
  • 6. WWW.HIGHWHEELSOFTWARE.COM 6 Dwa ułożenia danych Sterta (Heap) LinkedList<Row> ICollection<Row> B-drzewo SortedDictionary<Key,LinkedList<Row>> IDictionary<Key,ICollection<Row>> http://guide.couchdb.org/draft/btree.html
  • 7. WWW.HIGHWHEELSOFTWARE.COM 7 Dwa ułożenia danych (2) Sterta + Brak narzutu, prostota + Zrównoleglenie operacji - Wyszukanie elementu O(n) B-drzewo http://guide.couchdb.org/draft/btree.html +Wyszukanie po kluczu O(log n) - Ograniczone zrównoleglenie - Dodatkowe strony
  • 8. WWW.HIGHWHEELSOFTWARE.COM 8 Ograniczenie wydajności zapisu B-drzewa B-drzewo, klucz = Primary Key (identity)
  • 10. WWW.HIGHWHEELSOFTWARE.COM 10 Czym jest indeks? Indeks to B-drzewo ☺ • Klastrowany (clustered) • główna struktura przechowywania danych jest B-drzewem • Nieklastrowany (nonclustered) • dodatkowa struktura obok głównej sterty / B-drzewa • zawiera kopię części danych
  • 11. WWW.HIGHWHEELSOFTWARE.COM 11 Tabelka – przykład C# CREATE TABLE Customers ( nr int not null, name nvarchar(50), country nvarchar(50) ); public class Customer { public int nr; public string name; public string country; } public interface CustomersTable { ICollection<Customer> Data { get; } }
  • 12. WWW.HIGHWHEELSOFTWARE.COM 12 Indeksy – NONCLUSTERED i sterta CREATE TABLE Customers ( nr int not null, name nvarchar(50), country nvarchar(50) ); CREATE NONCLUSTERED INDEX ByCountry ON Customers (Country); public class Customer { public int nr; public string name; public string country; } public interface CustomersTable { ICollection<Customer> Data { get; } IDictionary<string,ICollection<int>> ByCountry { get; } }
  • 13. WWW.HIGHWHEELSOFTWARE.COM 13 Indeksy - CLUSTERED CREATE TABLE Customers ( nr int not null, name nvarchar(50), country nvarchar(50) ); CREATE CLUSTERED INDEX Data ON Customers (name); public class Customer { public int nr; public string name; public string country; } public interface CustomersTable { IDictionary<string, ICollection<Customer>> Data { get; } }
  • 14. WWW.HIGHWHEELSOFTWARE.COM 14 Indeksy – CLUSTERED + NONCLUSTERED CREATE TABLE Customers ( nr int not null, name nvarchar(50), country nvarchar(50) ); CREATE CLUSTERED INDEX Data ON Customers (name); CREATE NONCLUSTERED INDEX ByCountry ON Customers (Country); public class Customer { public int nr; public string name; public string country; } public interface CustomersTable { IDictionary<string, ICollection<Customer>> Data { get; } IDictionary<string, ICollection<string>> ByCountry { get; } } * W zasadzie Tuple<string,RowId> chyba że UNIQUE(name)
  • 15. WWW.HIGHWHEELSOFTWARE.COM 15 Indeksy – PRIMARY KEY CREATE TABLE Customer ( nr int not null IDENTITY(1,1) PRIMARY KEY, name nvarchar(50), country nvarchar(50) );  Niejawna deklaracja CLUSTERED INDEX (nr)  PRIMARY KEY NONCLUSTERED niejawne: NONCLUSTERED INDEX (nr)
  • 16. WWW.HIGHWHEELSOFTWARE.COM 16 Sterta vs B-Drzewo - dogrywka • CLUSTERED INDEX • Wszystkie inne indeksy odwołują się do klucza tego indeksu • min. 1 odczyt więcej • Przenoszenie rekordu – bez zmiany indeksów nieklastrowanych • Sterta • Indeksy odwołują się do położenia rekordu • odczyt od razu danych • Przenoszenie rekordu – zmiana w indeksach
  • 18. WWW.HIGHWHEELSOFTWARE.COM 18 Partycje w C# • Tabela bez partycji – ICollection<Row> • Tabela partycjonowana: • IDictionary<PartitionId, ICollection<Row>> • // partitionId = Func( row.PartitionKey )
  • 19. WWW.HIGHWHEELSOFTWARE.COM 19 Partycje cechy • Dane fizycznie w wielu tabelach o tej samej strukturze, logicznie połączone w jedną kolekcję • Partition1.Concat(Partition2).Concat(Partition3)… • Partycje można niezależnie: • Podmienić / dodać / usunąć • Umieszczać w różnych plikach (wydajność/koszt/backup) • Kompresować • Utrzymywać (działania administracyjne) • Każdy obiekt można partycjonować inaczej
  • 23. WWW.HIGHWHEELSOFTWARE.COM 23 Kompresja • Procesory się nudzą • Mogą kompresować dane • Ucieszy adminów, • Może przyspieszyć działanie. • Kompresja • per wiersz • per strona • BTW: kompresja backupu
  • 24. WWW.HIGHWHEELSOFTWARE.COM 24 Utrzymanie obiektów bazodanowych • Sterty – tylko w skrajnych przypadkach • B-drzewa: • Równoważenie – REORGANIZE (fragmentacja 5-30%) • Przebudowa – REBUILD (fragmentacja > 30%) • Brak automatu w SQL Server! • Statystyki • Przeliczanie • Automat – 20% zmian • SQL Server 2016 lub trace flag – malejący % • [Demo]
  • 25. WWW.HIGHWHEELSOFTWARE.COM 25 Podsumowanie - złożoność „tabeli” MSSQL • 1 tabela – wiele struktur • Dane, indeksy, statystyki (…) • Nowy indeks = • Szybszy odczyt (wybrane zapytania) • Wolniejszy zapis • Więcej zajętego miejsca • Struktury żyją długo – wymagają opieki
  • 26. Zapraszamy do kontaktu ul. Al. Zwycięstwa 96/98, 81-451 Gdynia www.highwheelsoftware.com przemyslaw.dzierzak@highwheelsoftware.com