Promotic

MySQL

MySQL to produkt firmy Oracle i jest on dostępny w kilku komercyjnych wersjach, jak również darmowo jako wersja MySQL Community Edition. Pliki instalacyjne MySQL można uzyskać na przykład na http://www.mysql.com.

Częścią składową pakietu instalacyjnego (od wersji MySQL 5.6) jest narzędzie do administracji Workbench oraz drivera ODBC.

Do pracy z bazami danych MySQL w systemie PROMOTIC jest konieczne na komputerze posiadać zainstalowane 32-bitowe drivery do tej bazy danych a to nawet jeżeli sama baza danych jest w wersji 64-bitowej.

Do bazy danych można zapisywać:
- przy pomocy obiektu PmaTrendGroup, jeżeli w tym obiekcie konfigurator "Typ zapisu" jest ustawiony na Database MySQL cyclic
- przy pomocy obiektu PmaAdo
- przy pomocy obiektu PmaDatabase (przestarzałe) poprzez ustawione nazwane źródło danych ODBC


Charakterystyka MySQL
- Wersja Community jest dostępna darmowo.
- Funkcjonalność produktu nie jest sztucznie ograniczana w darmowej wersji.
- Funkcjonalnie oraz konfiguracyjnie jest MySQL prostrzy od MS SQL Serwer.
- Baza danych działa jako usługa systemu operacyjnego Windows.
- Umożliwia prosty backup, ustawienie uprawnień dostępu, obsługuje transakje, replikacje, itd.
- Działa przez większość systemów operacyjnych SO Windows, Linux oraz OS X.
- PROMOTIC można ustawić tak, by trendy oraz alarmy/eventy zostały zapisywane do MySQL.
- Posiada własny język programowania do definicji tzw. wyzwalaczy (triggers), lub zapisanych procedur.
- Można wybrać jeden z dwu standardowych mechanizmów bazodanowych: MyISAM lub InnoDB.
- Często wykorzystywany w Web aplikacjach


Właściwości podstawowych mechanizmów bazodanowych
 
MyISAM
 
MyISAM mechanizm bazodanowy nie jest wskazanym do częstego zapisu, został zoptymalizowany do częstego odczytu z bazy danych, nie wspiera transakcji. Podczas jednoczesnego podłączenia kilku użytkowników stosuje zamki na poziomie całej tabeli.
 
W systemie PROMOTIC nie jest zalecany do zapisu trendów, alarmów oraz eventów.

InnoDB
 
Mechanizm InnoDB jest bardziej odpowiedni do częstszego zapisu, wspiera transakcje, podczas jednoczesnego podłączenia kilku użytkowników stosuje zamki na poziomie wierszy.
 
Mechanizm ten jest zalecany do stosowania w systemie PROMOTIC do zapisu trendów, alarmów oraz eventów.

Uwaga
 
Oprócz wszystkich swoich zalet InnoDB posiada również pewne mankamenty. Jednym z nich jest np. problem z poleceniem typu SELECT COUNT(*). Mechanizm ten wykonuje to polecenie o tyle dłużej, o ile większa jest tabela, ponad którą polecenie zostało wywołane. Dla tabeli zawierającej około 300-400 tysięcy rekordów może wykonanie tego polecenia trwać aż 1 sekundę. Z tego powodu polecenie to może negatywnie wpłynąć na płynne działanie Państwa aplikacji.


Zalecane ustawienie bazy danych MySQL w celu zastosowania w systemie PROMOTIC
 
Dla zaawansowanych aplikacji (duża ilość obiektów PmaTrendGroup, częste zapisy alarmów itd.) jest konieczne bazę danych MySQL dodatkowo ustawić tak, by nie dochodziło do jej przeciążenia:

1. W pliku konfiguracyjnym my.ini jest konieczne zmienieć wybór "default-storage-engine" na InnoDB, by ewentualnie nowo wytwarzane tabeli korzystały z mechanizmu InnoDB. Istniejące tabeli należy skonwertować do InnoDB, np. przy pomocy narzędzia administracyjnego Workbench.

2. Następnie należy dla mechanizmu InnoDB ustawić "innodb_flush_log_at_trx_commit" na opcję 0 lub 2 (standardowo jest ustawione na 1). Opcja ta ma wpływ na sposób fizycznego zapisu danych do bazy danych.
 
0 - dane oraz log transakcji zapisuje na dysk za ok. jedną sekundę - mniejsza ilość operacji dyskowych
1 - log transakcji zapisuje na dysk podczas każdego zapisu - bezpieczne, lecz przy wielkiej ilości jednoczesnych zapisów powolne
2 - zapisuje do logu transakcji podczas każdego potwierdzenia transakcji, ale fizyczny zapis logu transakcji na dysk wykonywany jest ok. 1 raz na minutę - mniejsza ilość operacji dyskowych


3. Zalecane jest również ustawienie pamięci cache dla danych oraz indeksów tebeli przy pomocy wyboru "innodb_buffer_pool_size". W przypadku deddykowanych serwerów bazodanowych zalecane się aż 70% - 80% instalowanej pamięci RAM.

4. MySQL jest standardowo ustawiony w taki sposób, by utrzymywał połączenie z klientem na czas 8 godzin (28800 sekund) jeżeli klient nie wykonuje żadnej czynności. Po upływie w/w okresu połaczenie zostanie automatycznie zamknięte od strony serwera. Zachowanie to spowoduje, że aplikacja PROMOTIC utraci łączność z serwerem bazodanowym i niepotrafi dalej zapisywać potrzebne dane do bazy danych.

Możliwe rozwiązania:
A) Po stronie serwera MySQL - wydłużenie w/w czasu (parametry wait_timeout oraz/lub interactive_timeout) w serwerze MySQL
B) Po stronie aplikacji PROMOTIC - zapewnienie, by PROMOTIC przed upływem tego timeouta periodycznie wykonał dowolną czynność z bazą danych (tzn. zapisał lub odczytał dane z bazy danych)

Procedura rozwiązania dla różnych obiektów w aplikacji PROMOTIC:
 
1. Alarmy/Eventy - wszystkie obiekty PmaAlarmGroup/PmaEventGroup o zgodnym parametrze "ConnectionString" korzystają z jednego połączenia do bazy danych. W przypadku MySQL jest konieczne zapewnić, by przynajmniej raz w określonym czasie (interaction_timeout) zapisano do bazy danych. W praktyce wystarczy wytworzyć jedną grupę eventów i raz na 8 godzin (lub częściej np. każdą godzinę) w aplikacji wytwarzać event typu "aplikacja działa". To zapewni, by połączenie z bazą danych dla alarmów nie zostało zamknięte.
 
2. Trendy - wszystkie obiekty PmaTrendGroup o zgodnym parametrze "ConnectionString" korzystają z jednego połączenia do bazy danych. Dlatego jest potrzebne, by przynajmniej jeden PmaTrendGroup zapisywał częsciej niż określony period timeouta, co w większości przypadków jest zapewnione - sytuacja kiedy aplikacja zapisuje trendy raz na 8 godzin lub rzadziej występuje bardzo rzadko.
 
3. PmaAdo - tu projektant musi sobie zapewnić, by przynajmniej raz na okres timeouta (lepiej częściej) wykonywał zapytanie do serwera MySQL. W przypadku automatycznego odłączenia serwera obiekt PmaAdo potrafi wykonać odłączenie/ponowne podłączenie do bazy danych.
 
Przykład polecenia, który można zastosować w celu utrzymania połączenia z minimalnym obciążeniem serwera MySQL:
 
SHOW GLOBAL STATUS LIKE 'Uptime'




Następne opisy dotyczące MySQL patrz:
© MICROSYS, spol. s r. o.