MySQL_Mechanizmy_wewnetrzne_bazy_danych_msqlme.pdf

(306 KB) Pobierz
MySQL. Mechanizmy
wewnêtrzne bazy danych
Autor: Sasha Pachev
T³umaczenie: Grzegorz Werner
ISBN: 978-83-246-1232-1
Tytu³ orygina³u:
Understanding MySQL Internals
Format: B5, stron: 240
Poznaj sekrety jednej z najpopularniejszych baz danych
Jak przechowywane s¹ dane?
Jak dodawaæ w³asne zmienne konfiguracyjne?
Jak przebiega proces replikacji?
MySQL to obecnie jedna z najpopularniejszych baz danych. Jedn¹ z jej najwiêkszych
zalet jest nieodp³atny dostêp zarówno do samego systemu, jak i do jego kodu
Ÿród³owego. Mo¿liwoœæ przegl¹dania kodu i – w razie potrzeby – samodzielnego
modyfikowania go mo¿e okazaæ siê przydatna programistom tworz¹cym aplikacje, które
korzystaj¹ z MySQL jako zaplecza bazodanowego. Jednak samodzielne
„przegryzanie
siê” przez setki tysiêcy linii kodu i rozpracowywanie mechanizmów dzia³ania bazy
danych mo¿e zaj¹æ mnóstwo czasu.
Dziêki tej ksi¹¿ce poznasz kod Ÿród³owy i sposób dzia³ania tego narzêdzia. Autor, przez
wiele lat pracuj¹cy w zespole tworz¹cym MySQL, przedstawia w niej tajniki systemu.
Podczas czytania poznasz architekturê i wzajemne powi¹zania pomiêdzy komponentami
MySQL, strukturê kodu Ÿród³owego oraz metody modyfikowania go przez kompilacj¹.
Dowiesz siê tak¿e, jak przebiega komunikacja pomiêdzy klientem i serwerem bazy
danych, jak realizowane s¹ zapytania, w jaki sposób sk³adowane s¹ dane i jak
implementowane s¹ mechanizmy replikacji.
Architektura MySQL
Struktura kodu Ÿród³owego
Komunikacja pomiêdzy klientem i serwerem
Zmienne konfiguracyjne
Obs³uga ¿¹dañ
Parser i optymalizator zapytañ
Mechanizmy sk³adowania danych
Replikacja danych
Wydawnictwo Helion
ul. Koœciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Dziêki tej ksi¹¿ce zrozumiesz budowê bazy danych MySQL i bêdziesz w stanie
samodzielnie dostosowaæ j¹ do ka¿dego zadania
Spis treści
Przedmowa ...............................................................................................................................9
1. Historia i architektura MySQL ..................................................................................... 15
Historia MySQL
Architektura MySQL
15
17
2. Praca z kodem
źródłowym
MySQL ............................................................................. 31
Powłoka Uniksa
BitKeeper
Przygotowywanie systemu do budowania MySQL z drzewa BitKeepera
Budowanie MySQL z drzewa BitKeepera
Budowanie z dystrybucji
źródłowej
Instalowanie MySQL w katalogu systemowym
Układ katalogów z kodem
źródłowym
Przygotowywanie systemu do uruchomienia MySQL w debugerze
Wycieczka po kodzie
źródłowym
w towarzystwie debugera
Podstawy pracy z gdb
Wyszukiwanie definicji w kodzie
źródłowym
Interesujące punkty wstrzymania i zmienne
Modyfikowanie kodu
źródłowego
Wskazówki dla koderów
Aktualizowanie repozytorium BitKeepera
Zgłaszanie poprawki
31
31
34
35
37
38
38
40
40
41
44
45
45
47
50
51
3. Podstawowe klasy, struktury, zmienne i interfejsy API ............................................53
THD
NET
TABLE
Field
53
58
58
58
Spis treści
|
5
Narzędziowe wywołania API
Makra preprocesora
Zmienne globalne
65
68
70
4. Komunikacja między klientem a serwerem ............................................................... 73
Przegląd protokołu
Format pakietu
Relacje między protokołem MySQL a warstwą systemu operacyjnego
Uzgadnianie połączenia
Pakiet polecenia
Odpowiedzi serwera
73
73
74
75
80
83
5. Zmienne konfiguracyjne .............................................................................................89
Zmienne konfiguracyjne: samouczek
Interesujące aspekty konkretnych zmiennych konfiguracyjnych
89
96
6. Wątkowa obsługa
żądań
...........................................................................................115
Wątki kontra procesy
Implementacja obsługi
żądań
Problemy programowania wątkowego
115
117
121
7. Interfejs mechanizmów składowania .......................................................................127
Klasa handler
Dodawanie własnego mechanizmu składowania do MySQL
127
142
8. Dostęp współbieżny i blokowanie ............................................................................ 163
Menedżer blokad tabel
164
9. Parser i optymalizator ............................................................................................... 169
Parser
Optymalizator
169
172
10. Mechanizmy składowania ........................................................................................ 195
Wspólne cechy architektury
MyISAM
InnoDB
Memory (Heap)
MyISAM Merge
NDB
Archive
Federated
196
196
202
204
205
205
206
207
6
|
Spis treści
11. Transakcje ..................................................................................................................209
Implementowanie transakcyjnego mechanizmu składowania
Implementowanie podklasy handler
Definiowanie handlertona
Praca z pamięcią podręczną zapytań
Praca z binarnym dziennikiem replikacji
Unikanie zakleszczeń
209
210
212
214
214
215
12. Replikacja ....................................................................................................................217
Przegląd
Replikacja oparta na instrukcjach i na wierszach
Dwuwątkowy serwer podrzędny
Konfiguracja z wieloma serwerami nadrzędnymi
Polecenia SQL ułatwiające zrozumienie replikacji
Format dziennika binarnego
Tworzenie własnego narzędzia do replikacji
217
218
219
219
220
223
227
Skorowidz .............................................................................................................................229
Spis treści
|
7
ROZDZIAŁ 6.
Wątkowa obsługa
żądań
Podczas pisania kodu serwera programista staje przed dylematem: czy obsługiwać
żądania
za pomocą wątków, czy procesów? Oba podejścia mają swoje zalety i wady. Od samego początku
MySQL korzystał z wątków. W tym rozdziale uzasadnimy wątkową obsługę
żądań
w serwerze
MySQL, a także omówimy jej wady i zalety oraz implementację.
Wątki kontra procesy
Być może najważniejszą różnicą między procesem a wątkiem jest to,
że
wątek potomny współ-
dzieli stertę (globalne dane programu) z wątkiem macierzystym, a proces potomny — nie.
Ma to pewne konsekwencje, które trzeba uwzględnić podczas wybierania jednego albo drugiego
modelu.
Zalety wątków
Wątki są implementowane w bibliotekach programistycznych i systemach operacyjnych z nastę-
pujących powodów:
Zmniejszone wykorzystanie pamięci. Koszty pamięciowe związane z tworzeniem nowego
wątku są ograniczone do stosu oraz do pamięci ewidencyjnej używanej przez menedżer
wątków.
Dostęp do globalnych danych serwera bez użycia zaawansowanych technik. Jeśli dane mogą
zostać zmodyfikowane przez inny działający równolegle wątek, wystarczy chronić odpo-
wiednią sekcję za pomocą blokady ze wzajemnym wykluczaniem, zwanej
muteksem
(opi-
sywanej w dalszej części rozdziału). Jeśli nie ma takiej możliwości, dostęp do globalnych
danych można uzyskiwać w taki sposób, jakby nie było
żadnych
wątków.
Tworzenie wątku zajmuje znacznie mniej czasu niż tworzenie procesu, ponieważ nie trzeba
kopiować segmentu sterty, który może być bardzo duży.
Program szeregujący w jądrze szybciej przełącza konteksty między wątkami niż między
procesami. Dzięki temu w mocno obciążonym serwerze procesor ma więcej czasu na wyko-
nywanie rzeczywistej pracy.
115
Zgłoś jeśli naruszono regulamin