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 také
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
PmaDatabase (zastaralé) přes pojmenovaný
ODBC zdroj dat
Charakteristika MySQL
- Komunitní verze je dostupná zdarma.
- Funkčnost produktu není v bezplatné verzi uměle omezena.
- 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.
- 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í k databázovému serveru 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ílejí 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: