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 jest ustawiony konfigurator Typ zapisu 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 i 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 i 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 i 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 systemie 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