Systemy zarządzania bazami danych
12. Strojenie systemu operacyjnego
Do nastrojenia
• System operacyjny
– Wątki
• Przełączanie kontekstu
• Priorytety
– Pamięć wirtualna – System plików
• Sprzęt
– Podsystem składowania
• Konfiguracja macierzy dysków
• Korzystanie z pamięci podręcznej sterownika
– Poprawa parametrów komponentów
– Architektury
wieloprocesorowe
Wątki
• Tryb dzielony czy dedykowany?
– Mniej aktywnych wątków niż sesji użytkownika oznacza zwiększony czas oczekiwania u niektórych użytkowników w zamian za mniej przełączeń kontekstu (czyli
zwiększoną całościową przepustowość).
• Przełączanie kontekstu między wątkami jest kosztowne
– Użyj dużego kwantu by ich uniknąć, np. 1 sekunda.
– Planowanie bez wywłaszczania (np. włókna w ramach wątków w MS SQL Server – zalecane przy wielu
procesorach zajętych w 100%)
– Poziom współbieżności: czy zwiększanie poprawia czy psuje wydajność?
Odwrócenie priorytetów
zamyka X
żąda X
Priorytet #1
T3
T1
T2
Priorytet #2
Priorytet #3
działa czeka Stany transakcji
• Trzy transakcje T1, T2, T3 w porządku priorytetów (T1 ma najwyższy)
1. T3 uzyskuje zamek na x i jest wywłaszczana
2. T1 czeka na zamek na x, więc jest usypiana
3. T2 nie potrzebuje x, więc sobie działa długo i szczęśliwie
– Efekt: T1 czeka na T2!
Wątki
• Uważaj na priorytety
– SZBD nie powinno mieć niższego priorytetu niż inne aplikacje
– Unikaj odwrócenia priorytetów
• Daj wszystkim transakcjom ten sam priorytet (zalecane przez Oracle). Niestety może to
prowadzić do niepożądanej równości.
• Priorytety dynamiczne: właściciel zamka dziedziczy priorytet od transakcji oczekującej o najwyższym priorytecie (SQL Server)
Poziom współbieżności
• DB2 UDB v7.1 na procesorze dwurdzeniowym i Windows 2000.
• Dane w pamięci RAM
– Zwiększanie współbieżności zmniejsza przepustowość
• Przełączenia
• Synchronizacja
• Dane na dysku
– Zwiększanie współbieżności zwiększa przepustowość dostępu losowego
• Listowe ładowanie na zapas w DB2
0 0,1 0,2 0,3 0,4 0,5 0,6
0 2 4 6 8 10
Degree of Parallelism
Throughput (Trans/sec) Sequential on- disk
Random on-disk
Sequential in- memory Random in- memory
Wielkość bufora bazy danych
• Za mały bufor to za mało stosunek trafień
stosunek trafień =
dostępy logiczne – dostępy fizyczne dostępy logiczne
• Za duży bufor, to ryzyko stronicowania
• Zalecenie: monitoruj stosunek trafień i zwiększaj rozmiar
buforu, dopóki wykres stosunku się nie spłaszczy.
• Jeśli SO nadal stronicuje, dokup pamięci
Dzien-
nik Dane Dane
PAMIĘĆ RAM
Dysk stroni- cowania
PROCESY BAZY DANYCH
BUFOR BAZY DANYCH
Wielkość bufora – eksperymenty
• SQL Server 7 na Windows 2000
• Tabela ma 630 MB
• Zapytanie z odczytem pełnym
– Tabela jest albo w całości w RAM, albo w całości czytana z dysku – wynik strategii LRU (sekwencyjne zalewanie bufora)
• Zapytanie wielopunktowe
– Przepustowość rośnie liniowo wraz z wielkością bufora do chwili, gdy cała tabela jest w RAM
Multipoint Query
0 40 80 120 160
0 200 400 600 800 1000
Buffer Size (Mb) Throughput (Queries/sec)
Scan Query
0 0.02 0.04 0.06 0.08 0.1
0 200 400 600 800 1000
Buffer Size (Mb) Throughput (Queries/sec)
Układanie na dysku
• Przydzielaj długie ciągłe fragmenty dysku na
pliki, które się często odczytuje w pełni. Dobierz parametr odczytu na zapas
– Plik dziennika, plik z historią
– Plik często odczytywany w pełni
• Uwaga na pliki o różnej pośredniości (np. Unix)
– Dalsze części pliku są bardziej pośrednie i mają dłuższy czas dostępu
– Lepiej wtedy zaimplementować własne pliki na urządzeniu surowym
Wykorzystanie stron
• Ustal stopień użycia stron dyskowych w zależności od stosunku zapytań i
modyfikacji
– Wysokie użycie pomaga w pełnym odczycie, ponieważ trzeba wtedy odczytać mniej stron (pod warunkiem, że nie ma łańcuchowania i stron nadmiarowych)
– Małe użycie zmniejsza prawdopodobieństwo
łańcuchowania, gdy modyfikacje zmieniają
rozmiar rekordu
Ładowanie na zapas
• DB2 UDB v7.1 na Windows 2000
• Pełny odczyt tabeli
• Przepustowość rośnie do pewnego punktu
razem ze zwiększaniem rozmiaru danych
ładowanych na zapas
0 0.05 0.1 0.15 0.2
32Kb 64Kb 128Kb 256Kb
Prefetching
Throughput (Trans/sec)
scan
Stopień wykorzystania stron
• DB2 UDB v7.1 na Windows 2000
• Pełny odczyt tabeli
• Przepustowość
wyraźnie rośnie wraz ze stopniem
wykorzystania
0 0.05 0.1 0.15 0.2
70 80 90 100
Usage Factor (%)
Throughput (Trans/sec)
scan
Poziomy RAID
• Dziennik
– RAID 1 jest właściwy (mirroring)
• Zabezpieczenie przed błędami przy wysokiej przepustowości zapisu. Zapisy są synchroniczne i sekwencyjne. Nie byłby zysku przy stripingu
• Plik tymczasowe
– RAID 0 jest właściwy (striping)
• Brak odporności na błędy (po co?). Wysoka przepustowość
• Pliki danych, pliki indeksowe
– RAID 5 (parity) dobry dla aplikacji intensywnie czytających. Uwaga: 1 zapis = 4 operacje I/O.
– RAID 10 (striping&mirroring) dobry dla aplikacji intensywnie piszących
Poziomy RAID – eksperymenty
• Intensywnie czytające
– Powielenie dysków
(RAID0, RAID 10, RAID5) znacząco zwiększa
przepustowość
• Intensywnie piszące
– Negatywny wpływ
programowego RAID 5 jest oczywisty
– Sterownik potrafi jednak zniwelować negatywy RAID 5 dzięki swojej pamięci podręcznej
Write-Intensive
0 40 80 120 160
Soft- RAID5
RAID5 RAID0 RAID10 RAID1 Single Disk
Throughput (tuples/sec)
Read-Intensive
0 20000 40000 60000 80000
Soft- RAID5
RAID5 RAID0 RAID10 RAID1 Single Disk
Throughput (tuples/sec)
Pamięć podręczna sterownika
• Odczyt na zapas
– Prefetching na poziomie sterownika dysku.
– Brak informacji o profilu dostępu – Niezalecane
• Zapis do końca czy do pamięci podręcznej?
– Zapis do pamięci podręcznej: transfer kończy się, gdy dane znajdą się w pamięci podręcznej sterownika
• Baterie gwarantują zapis przy zaniku zasilania
• Szybki zrzut pamięci podręcznej jest priorytetem
– Zapis do końca: transfer kończy się, gdy dane znajdą się na dysku
Pamięć podręczna sterownika
• SQL Server 7 (Windows2000)
• Sterownik Adaptec ServerRaid
– 80 MB RAM
– Zapis do pamięci podręcznej
• Pamięć podręczna sterownika zwiększa przepustowość
niezależnie od tego, czy aplikacja jest przyjazna dla pamięci podręcznej, czy nie
– Ten sterownik ma dobrą strategię wymiany
Updates on 2 Disks - Cache Size 80Mb
0 500 1000 1500 2000
cache friendly (90Mb) cache unfriendly (900Mb)
Throughput (tuples/sec) no cache
cache
Konfiguracja sprzętu
• Dodaj pamięć
– Zwiększa bufor bazy danych bez większego stronicowania
• Dodaj dyski
– Dziennik na oddzielnym dysku
– Powielaj (mirror) pliki często czytane – Partycjonuj wielkie pliki
• Dodaj procesory
– Wyrzuć aplikacje inne niż SZBD na inne komputery
– Wyrzuć aplikacje analityczne (np. data mining) na inne komputery
– Zwiększ przepustowość poprzez współdzielenie danych
• Architektura pamięci dzielonej lub dysków dzielonych
Konfiguracje dzielone
Dziel wszystko
Dziel dyski
Dziel nic
Konfiguracje
• Dziel wszystko (shared everything)
– jedna pamięć i wiele dysków, być może wiele procesorów – gdy nie ma dobrego podziału obciążenia
• Dziel nic (shared nothing)
– wiele pamięci/procesorów i wiele dysków (każdy swoje) – gdy można równomiernie rozłożyć obciążenie
• Dziel dyski (shared disks)
– wiele procesorów korzystających z wielu dysków podłączonych przez szynę
– Klaster baz danych – wspólne dyski