2010-12-10 20 views
9

Mam tabeli z polem :: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPmysql opóźniony wkładka datownik

Moje pytanie brzmi, czy mogę użyć opóźnione wkładki na tej tabeli, będzie datownik być czas, gdy żądanie jest w kolejce lub czas, kiedy wstawianie jest rzeczywiście wykonane?

Odpowiedz

6

Odpowiedź jest, gdy żądanie jest w kolejce, ale to niekoniecznie prawda, gdy wniosek został złożony, ponieważ wniosek jest w kolejce po gwint na stole jest ustanowiony jeśli jeszcze nie jest.

Z mysql 5.1 dev docs:

Wątek wykonuje instrukcję, ale zamiast pisać wiersz do tabeli INSERT , stawia kopię końcowy wiersz w kolejce, która jest zarządza wątek obsługi. Wszelkie błędy składniowe są zauważane przez wątek i zgłaszane do klienta pod numerem .

Kolejność zdarzeń, gdy opóźnienie oświadczenie wykonuje:

  1. wątek obsługi dla tabeli jest tworzony, jeśli nie jest już
  2. kontrole Handler lub czeka, aby uzyskać DELAYED zablokować
  3. opiekun wykonuje INSERT i umieścić końcowy wiersz w kolejce
  4. gdy wiersz jest właściwie włożona, dziennik binarny jest aktualizowana
  5. handler pisze delayed_insert_limit wierszy naraz i wykonuje dowolny oczekiwaniu SELECTS między zapisów
  6. gdy kolejka jest pusta, blokada DELAYED zwolnieniu

W zależności od tego, czy wątek musi być tworzone lub nie i jak czas potrzebny na sprawdzenie lub uzyskanie blokady DELAYED, czas pomiędzy wykonaniem instrukcji (krok 0) a wykonaniem instrukcji (krok 3) będzie różny. Następnie, w zależności od tego, jak duża jest kolejka (zwłaszcza jeśli jest to ponad delayed_insert_limit wierszy) i czy dojdzie do jakiejkolwiek oczekującej SELECTS, zapis zostanie opóźniony o pewien nieprzewidywalny czas.

+0

Myślę, że masz rację (ale nie wiesz). Ponieważ, jeśli wątek * wykonuje * instrukcję, aby * zgłosić * błędy składni, jeśli jakieś, prawdopodobnie również "rozszerzy" CURRENT_TIMESTAMP na rzeczywisty znacznik czasu. –

0

Warto poświęcić trochę czasu rzeczywistego wkładu

1

INSERT DELAYED Niezależnie od tego czy stosuje się czy, jeśli stół jest zablokowany z uwagi na inny wątek lub aktualizacji lub czymkolwiek innym, wartość ts weźmie jest równa czasie INSERT została wydana.

+0

Czy chodzi ci o "dummy" INSERT stworzone przez wątek obsługi lub INSERT, który faktycznie jest wykonywany w bazie danych. –

+0

Po wydaniu polecenia przez wątek klienta. – Riedsio