Kategoria: (MySQL) Autor: Gabrym Data 1 wrz 2008

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


seban @ 10 wrz 2008 - 19:45 #

Nieźle. Nigdy bym nie podejrzewał mysql o takie coś :)

Gabrym @ 7 mar 2009 - 20:40 #

Podczas uruchamiania mysql event_scheduler jest wyłączony.
Chcąc zmienić to dodajemy w my.cnf:
event_scheduler = 1