Event scheduler ma za zadanie wykonywać zaplanowane czynności przez osobę uprawnioną do tego.
Opcja wprowadzona w wersji 5.1.6 i wyższej (nie zobaczymy jej w stabilnym drzewie 5.0.x).
W momencie wykonywania zadania baza loguje co się dzieje i jakim wynikiem się kończy. Wiemy czy operacja nie zakończyła się błędem spowodowanym literówką, złą składnią SQL czy złym parametrem.
Przykład zastosowania:
- obsługując duże tabele z kilkoma milionami rekordów aby założyć indeks wymagana jest przebudowa tabeli, która może potrwać dłużej niż jest to dopuszczalne w czasie funkcjonowania firmy. Zamiast czekać do 4 nad ranem gdy ruch zmniejsza się do kilkudziesięciu megabitów możemy zaplanować jednorazowe zadanie. Po zakończeniu zadania event się skasuje(po właściwym jego zdefiniowaniu).
- jeżeli potrzebujemy cyklicznego uruchamiania pewnej procedury/czynności (np.: system logów z automatycznie tworzonymi tabelami z nazwą nawiązującą do miesiąca).
Aby aktywować Scheduler zmienna globalna event_scheduler musi mieć wartość 1.
SET GLOBAL event_scheduler = 1;
wyłączamy poprzez:
SET GLOBAL event_scheduler = 0;
Wszelkie zadania przestają być wykonywane do czasu ponownego aktywowania schedulera.
Domyślnie podczas podnoszenia bazy danych domyślnie scheduler jest wyłączony.
Tworzenie zadań:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
Poniżej przykład zadania które co 10 sekund wywołuje procedurę o nazwie proc_wykonaj.
Możemy takie rozwiązanie zastosować na przykład do aktualizacji wieku pracowników, średnich wypłat lub tego typu zadań.
CREATE EVENT event_wykonaj_procedure -- nazwa zadania
ON SCHEDULE
EVERY 10 SECOND -- cykl co jaki ma byc wykonane zadanie
COMMENT 'Event ma wywolywac procedure proc_wykonaj' -- komentarz
DO CALL proc_wykonaj(); -- wykonanie procedury o nazwie proc_wykonaj
Każdy administrator napewno doceni pomoc w postaci Event Scheduler-a.
Więcej na ten temat można wyczytać na stronie producenta: stronie http://dev.mysql.com/doc/refman/5.1/en/events-syntax.html