Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

Witam,
mam taki problem, jest sobie tabela w ktorej znalazlo sie 11 000 000 rekordow. Tabel ma jeden trigger, ktory wrzuca kazdy swiezo dodany rekord do drugiej tabeli tak by byla informacja jaki ostatni rekord jest wpisany do bazy, ta druga tabela jest bardzo czesto odpytywana.
Nagle po kilku miesiacach chodzenia trigger przestał wrzucać dane do tabeli, tak jak by w ogole go nie było.
Pomimo ze dane są dalej wpisywane do tabeli głownej, trigger jak by nie działał...
Usuniecie triggera i ponowne jego utworzenie nic nie dało.

Jako ciekawostka dodam że phpmyadmin'nie w zakladce struktura przestal wyświetlać informację żę jest trigger dla tej tabeli pomimo że w information_schema jest on widoczny.

Czy ktoś z szanownych grupowiczów spotkał się może z takim cudem?

ustawienia:
MySQL: 5.1.62
tabela INNODB
Wykorzystanie przestrzeni Typ Wykorzystanie
Dane 591,0 MB
Indeks 606,0 MB
Sumarycznie 1 197,0 MB

konto usunięte

Temat: Mysql i dziwne zachowanie triggera

A nie było robione jakieś odtwarzanie / upgrade / naprawa bazy?
Przydałoby się podać treść triggera - choćby w uproszczeniu.
Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

No wlasnie raczej nie było, choć 100% pewnosci nie mam bo administracja serwerem przez zewnetrzna firme... ale uptime nie ruszony wiec chyba raczej nie.

Tresci triggera :

CREATE TRIGGER `tbi_fxcurrencytrading` BEFORE INSERT
ON `FxCurrencyTrading` FOR EACH ROW
BEGIN
INSERT INTO FxCurrencyTradingSummary(EcnId,BaseCurrencyId,CounterCurrencyId,AskPrice,BidPrice,UpdateTime)
VALUES (NEW.EcnId,NEW.BaseCurrencyId,NEW.CounterCurrencyId,NEW.AskPrice,NEW.BidPrice,NEW.UpdateTime)
ON DUPLICATE KEY UPDATE EcnId = NEW.EcnId, BaseCurrencyId = NEW.BaseCurrencyId,
CounterCurrencyId = NEW.CounterCurrencyId,AskPrice=NEW.AskPrice,BidPrice=NEW.BidPrice,UpdateTime=NEW.UpdateTime;
END; |
DELIMITER ;

konto usunięte

Temat: Mysql i dziwne zachowanie triggera

Podaj jeszcze jakie masz indeksy unikalne i PK (primary key) na tej tabeli.Piotr L. edytował(a) ten post dnia 10.01.13 o godzinie 21:55
Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

FxCurrencyTrading
Komentarze tabeli: Tabela notowan kursow forexa

Kolumna Typ Null Domyślnie Komentarze EcnId int(11) Tak NULL Id dostawcy kursu forexa
BaseCurrencyId int(11) Tak NULL Id waluty bazowej
CounterCurrencyId int(11) Tak NULL Id waluty kwotowanej
BidPrice decimal(11,4) Tak NULL Cena po ktorej mozemy sprzedac walute
AskPrice decimal(11,4) Tak NULL Cena po ktorej mozemy kupic walute
UpdateTime timestamp Nie CURRENT_TIMESTAMP Data wpisu do bazy

Założony jeden indeks złożony z pól (PK w mojej ocenie był tu zbędny) :

EcnId 10 A YES
BaseCurrencyId 10 A YES
CounterCurrencyId 10 A YES
UpdateTime 202217 AJakub Rutkowski edytował(a) ten post dnia 11.01.13 o godzinie 02:17
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Mysql i dziwne zachowanie triggera

Spróbuj zamiast INSERT użyć REPLACE.
Choć nie wiem, jak to możliwe, byś miał duplikaty, skoro masz CURRENT_TIMESTAMP (aha, masz go jako defaulta).

pozdrawiaMM
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Mysql i dziwne zachowanie triggera

Jakub Rutkowski:
No wlasnie raczej nie było, choć 100% pewnosci nie mam bo administracja serwerem przez zewnetrzna firme... ale uptime nie ruszony wiec chyba raczej nie.

UpTime nie ruszony bo nie masz " ON UPDATE CURRENT_TIMESTAMP"

konto usunięte

Temat: Mysql i dziwne zachowanie triggera

Spróbuj odtworzyć triggera.
Drop + create.

Potem możesz uzupełnić brakujące wpisy SQL-em.
Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

Marcin Miga:
Jakub Rutkowski:
No wlasnie raczej nie było, choć 100% pewnosci nie mam bo administracja serwerem przez zewnetrzna firme... ale uptime nie ruszony wiec chyba raczej nie.

UpTime nie ruszony bo nie masz " ON UPDATE CURRENT_TIMESTAMP"

pod hasłem UpTime mialem na myśli czas pracy maszyny od włączenia prądu / restartu. Ten powyższy timestamp nie ma znaczenia, dla wartosci danych.
Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

Piotr L.:
Spróbuj odtworzyć triggera.
Drop + create.

Potem możesz uzupełnić brakujące wpisy SQL-em.

Jak napisałem na początku mojej wypowiedzi, pierwsze co zrobiłem to usunąłem trigger i utworzyłem od nowa. Nie pomogło stąd mój post i pytanie czy komuś zdarzała się podobna sytuacja.

Tabela służy do wyliczania kursów średnich z przedziałów, a że miałem je już wyliczone to mogłem sobie pozwolić na jej opróżnienie.

Ponieważ maszyna produkcyjna wymagała szybkiej reakcji usunąłem tabele (zrobiłem sobie jej kopie na wolne chwile) i utworzyłem od nowa korzystając dokładnie z tych samych ustawień.
Trigger pojawił się jako widoczny w phpmyadminie i dane znów latają prawidłowo, jednakże dalej zastanawiam się czy jak tabela osiągnie rozmiar 11 M rekordów czy sytuacja się powtórzy?

Tak czy siak, dziękuję za dobre chęci.

konto usunięte

Temat: Mysql i dziwne zachowanie triggera

Sprawdź jaki masz engine na tabeli.
Jeśli jest MyISAM to spróbuj zamienić na InnoDB (najlepiej obie tabele jeśli to możliwe).

Jeśli nie chcesz tego zmieniać to przynajmniej sprawdź czy w obu tabelach jest ten sam engine.

Z tego co opisałeś prawdopodobnie miałeś uszkodzoną tabelę.Piotr L. edytował(a) ten post dnia 11.01.13 o godzinie 13:32
Jakub Rutkowski

Jakub Rutkowski Tempo spółka z o.o.
, .NET Developer

Temat: Mysql i dziwne zachowanie triggera

FxCurrencyTrading InnoDB latin1_swedish_ci 22,0 MB FxCurrencyTradingSummary InnoDB utf8_general_ci 32,0 KB

InnoDB uszkodzone?

konto usunięte

Temat: Mysql i dziwne zachowanie triggera

InnoDB - mniej prawdopodobne.

Następna dyskusja:

[PostgreSQL] Dziwne zachowa...




Wyślij zaproszenie do