Promotic
WikipediaLinkedInYoutubeTwitterFacebook

MySQL

MySQL to produkt firmy Oracle i jest on dostępny w kilku komercyjnych wersjach, jak również darmowo w formie wersji 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 driwery ODBC.
 
Do pracy z bazami danych MySQL w systemie PROMOTIC należy posiadać zainstalowane 32-bitowe driwery 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 PmTrend, jeżeli w tym obiekcie konfigurator Typ zapisu jest ustawiony na Database MySQL cyclic
- przy pomocy obiektu PmAdo
- przy pomocy obiektu PmDatabase (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.
- Umożliwia prosty backup, ustawienie uprawnień dostępu, obsługuje transakje, replikacje, itd..
- Wspierany 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 aplikacjach webowych
 
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 tabelki.
 
W systemie PROMOTIC nie jest zalecany do zapisu trendów, alarmów oraz zdarzeń.
 
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 zdarzeń.
 
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 tebela, 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ść PmTrend obiektów, częste zapisy alarmów itp.) należy bazę danych MySQL dodatkowo ustawić tak, by nie dochodziło do jej przeciążenia:
 
1. W pliku konfiguracyjnym my.ini należy zmienieć wybór "default-storage-engine" na InnoDB, by ewentualnie nowo wytwarzane tabelki korzystały z mechanizmu InnoDB. Istniejące tabelki 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 zaleca 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 (28800s) 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 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/zdarzenia - wszystkie obiekty typu PmAlarmEvent o zgodnym parametrze "ConnectionString" korzystają z jednego połączenia z bazą danych. W przypadku MySQL należy zapewnić, by przynajmniej raz w określonym czasie (interaction_timeout) zapisano do bazy danych. W praktyce wystarczy wytworzyć jedną grupę zdarzeń i raz na 8 godzin (lub częściej np. każdą godzinę) w aplikacji wytwarzać zdarzenie typu "aplikacja działa". To zapewni, by połączenie z bazą danych dla alarmów nie zostało zamknięte.
 
2. Trendy - wszystkie obiekty typu PmTrend o zgodnym parametrze "ConnectionString" korzystają z jednego połączenia z bazą danych. Dlatego jest potrzebne, by przynajmniej jeden PmTrend 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. PmAdo - tu projektant musi sobie zapewnić, by minimalnie raz na okres timeouta (lepiej częściej) wykonywał zapytanie do serwera MySQL. W przypadku automatycznego odłączenia serwera obiekt PmAdo 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.Tavičská 845/21 703 00 Ostrava-Vítkovice