Promotic
WikipediaLinkedInYoutubeTwitterFacebook

MySql

MySQL je vyvíjena firmou Oracle a je dostupná v několika komerčních verzích, ale i bezplatně ve formě 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 potřeba mít na počítači nainstalované 32-bitové ovládače pro tuto databázi a to i když vlastní databáze je v 64-bitové verzi.
 
Do databáze lze ukládat:
- pomocí objektu PmTrend, pokud je v tomto objektu nastaven konfigurátor Typ uložení na Database MySQL cyclic
- pomocí objektu PmAdo
- pomocí objektu PmDatabase (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 operačního systému.
- Umožňuje snadné zálohování, nastavení přístupových práv, transakční zpracování, replikace, atd..
- 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.
- Je možné 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 pro zápis trendů, alarmů a eventů není doporučen.
 
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ě PmTrend objektů, časté zápisy alarmů apod.) je třeba MySQL databázi dodatečně nastavit, aby nedocházelo k jejímu přetížení:
 
1. V konfiguračním souboru my.ini je potřeba 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 (28800s) pokud klient neprovádí žádnou činnost. Po uplynutí uvedené doby je spojení automaticky uzavřeno ze strany serveru. Takové chování způsobí, že 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 PROMOTIC před uplynutím tohoto timeoutu periodicky provedl nějakou činnost s databází (tj. zapsal nebo vyčetl data z databáze)
 
Postup řešení pro různé objekty v systému PROMOTIC:
 
1. Alarmy/eventy - všechny objekty typu PmAlarmEvent se stejným parametrem "ConnectionString" sdílejí jedno připojení k databázi. V případě MySQL je potřeba zajistit, aby se alespoň jednou za uvedenou dobu (interaction_timeout) něco zapsalo do databáze. V praxi si stačí vytvořit jednu eventovou skupinu a 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 neuzavřelo.
 
2. Trendy - všechny objekty PmTrend se stejným parametrem "ConnectionString" sdíleji jedno připojení k databázi. Proto je zapotřebí, aby alespoň jeden PmTrend 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. PmAdo - zde si projektant musí zajistit, aby se minimálně jednou za definovanou dobu timeoutu (lépe častěji) prováděl nějaký dotaz na MySQL server. U PmAdo 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ý je možno 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.Tavičská 845/21 703 00 Ostrava-Vítkovice