Promotic

MySQL

MySQL je vyvíjena firmou Oracle a je dostupná v několika komerčních verzích, ale i bezplatně jako MySQL Community Edition verze. Instalační soubory MySQL lze získat například na http://www.mysql.com.

Součástí instalačního balíčku (od verze MySQL 5.6) je i správcovský nástroj Workbench a ODBC ovladače.

Pro práci s databází MySQL v systému PROMOTIC je nutno mít na počítači nainstalované 32-bitové ovladače pro tuto databázi a to i když vlastní databáze je v 64-bitové verzi.

Do databáze lze ukládat:
- objektem PmaTrendGroup, pokud v tomto objektu konfigurátor "Typ uložení" je nastaven na Database MySQL cyclic
- objektem PmaAdo
- objektem PmaDatabase (zastaralé) přes pojmenovaný ODBC zdroj


Charakteristika MySQL
- Komunitní verze je dostupná zdarma.
- Funkčnost produktu není v bezplatné verzi uměle omezena.
- Funkčně i konfiguračně je MySQL jednodušší než MS SQL Server.
- Databáze běží jako služba Windows.
- Umožňuje snadné zálohování, nastavení přístupových práv, transakční zpracování, replikace, atd.
- Je funkční na většině operačních systémů OS Windows, Linux a OS X.
- PROMOTIC lze nastavit tak, aby trendy a alarmy/eventy zapisovaly svá data do MySQL.
- Má vlastní programovací jazyk pro definici tzv. triggerů, nebo uložených procedur.
- Lze zvolit jeden ze dvou standardních DB strojů: MyISAM nebo InnoDB.
- Často se používá u Web aplikací


Vlastnosti základních DB strojů
 
MyISAM
 
MyISAM DB stroj není příliš vhodný pro častý zápis, je optimalizován spíše pro časté čtení z databáze, nepodporuje transakce. Při současném přístupu několika uživatelů používá zámky na úrovni celé tabulky.
 
Pro použití v systému PROMOTIC není doporučen pro zápis trendů, alarmů a eventů.

InnoDB
 
InnoDB stroj je lepší pro častější zápisy, podporuje transakce, při současném přístupu několika uživatelů používá zámky na úrovni řádku.
 
Tento DB stroj je doporučován pro použití v systému PROMOTIC pro zápis trendů, alarmů a eventů

Upozornění
 
Kromě všech svých výhod má InnoDB také určité nevýhody. Jednou z nich je např. problém s příkazem typu SELECT COUNT(*). Tento DB stroj provádí tento typ dotazu tím delší dobu, čím větší je tabulka, nad kterou se takový dotaz volá. Pro tabulku obsahující přibližně 300-400 tisíc záznamů může tento dotaz trvat až 1 sekundu. Tento příkaz tedy může v určitých případech negativně ovlivnit plynulost běhu vaší aplikace.


Doporučená nastavení databáze MySQL pro použití v systému PROMOTIC
 
Pro náročnější aplikace (hodně objektů PmaTrendGroup, časté zápisy alarmů atd.) je nutno nastavit MySQL databázi dodatečně, aby nedocházelo k jejímu přetížení:

1. V konfiguračním souboru my.ini je nutno změnit volbu "default-storage-engine" na InnoDB, aby případné nově vytvářené tabulky používaly DB stroj InnoDB. Již existující tabulky je vhodné zkonvertovat na InnoDB, např. pomocí zprávcovského nástroje Workbench.

2. Dále je potřeba pro InnoDB stroj nastavit "innodb_flush_log_at_trx_commit" na volbu 0 nebo 2 (standardně je nastaveno na 1). Tato volba ovlivňuje způsob fyzického zápisu dat do databáze.
 
0 - zapisuje data a transakční log na disk přibližně jednou za sekundu - menší počet diskových operací
1 - zapisuje na disk transakční log při každém zápisu - bezpečné, ale při velkém počtu současných zápisů pomalé
2 - zapisuje do transakčního logu při každém potvrzení transakce, ale fyzický zápis transakčního logu na disk se provádí přibližně jednou za vteřinu - menší počet diskových operací


3. Vhodné je také nastavit velikost cache paměti pro data a indexy tabulek pomocí volby "innodb_buffer_pool_size". U dedikovaných databázových serverů je doporučeno až 70% - 80% instalované operační paměti.

4. MySQL je standardně nastaven tak, aby udržoval spojení s klientem po dobu 8 hodin (28800 sekund) pokud klient neprovádí žádnou činnost. Po uplynutí uvedené doby je spojení automaticky zavřeno ze strany serveru. Takové chování způsobí, že aplikace PROMOTIC ztratí spojení s databázovým serverem a nemůže pak dále zapisovat potřebná data do databáze.

Možná řešení:
A) Na straně MySQL serveru - prodloužení uvedeného času (parametry wait_timeout a/nebo interactive_timeout) v MySQL serveru
B) Na straně aplikace PROMOTIC - zajištění toho, aby aplikace PROMOTIC před uplynutím tohoto timeoutu periodicky provedla nějakou činnost s databází (tzn. zapsala nebo vyčetla data z databáze)

Postup řešení pro různé objekty v aplikaci PROMOTIC:
 
1. Alarmy/Eventy - všechny objekty PmaAlarmGroup/PmaEventGroup se stejným parametrem "ConnectionString" sdílejí jedno připojení k databázi. V případě MySQL je nutno zajistit, aby se alespoň jednou za uvedenou dobu (interaction_timeout) něco zapsalo do databáze. V praxi si stačí vytvořit jednu skupinu eventů jednou za 8 hodin (nebo i častěji např. každou hodinu) v aplikaci vytvářet event typu "aplikace žije". Tento postup zajistí aby se spojení s databází pro alarmy nezavřelo.
 
2. Trendy - všechny objekty PmaTrendGroup se stejným parametrem "ConnectionString" sdíleji jedno připojení k databázi. Proto je nutno zajistit, aby alespoň jeden PmaTrendGroup zapisoval častěji než je definovaná perioda timeoutu, což je ve většině aplikací splněno – situace kdy aplikace zapisuje trendy jednou za 8 hodin nebo ještě pomaleji se v praxi objevuje jen velmi zřídka.
 
3. PmaAdo - zde si projektant musí zajistit, aby se alespoň jednou za definovanou dobu timeoutu (lépe častěji) prováděl nějaký dotaz na MySQL server. U PmaAdo objektu lze navíc provést odpojení/opětovné připojení k databázi pokud dojde k tomu, že se server automaticky odpojí.
 
Příklad příkazu, který lze použít pro udržení připojení, a který zároveň MySQL server minimálně zatěžuje:
 
SHOW GLOBAL STATUS LIKE 'Uptime'




Další popisy k MySQL viz:
© MICROSYS, spol. s r.o.