отметка времени вставки с задержкой mysql - PullRequest
9 голосов
/ 10 декабря 2010

У меня есть таблица с полем :: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

Мой вопрос: если я использую отложенную вставку в этой таблице, будет ли временная метка временем, когда запрос ставится в очередь, или временем, когда вставка фактически выполняется?

Ответы [ 3 ]

6 голосов
/ 10 декабря 2010

Ответ - когда запрос находится в очереди, но это не обязательно правильно, когда запрос сделан, поскольку запрос ставится в очередь после того, как поток для таблицы установлен, если его еще нет.

Сдокументация mysql 5.1 dev :

Поток выполняет инструкцию INSERT, но вместо записи строки в таблицу он помещает копию последней строки в очередь, котораяуправляется потоком обработчика.Любые синтаксические ошибки замечаются потоком и сообщаются клиентской программе.

Порядок событий при выполнении отложенного оператора:

  1. поток обработчика для таблицысоздается, если его еще нет
  2. , обработчик проверяет или ожидает получения DELAYED lock
  3. , обработчик выполняет INSERT и помещает последнюю строку в очередь
  4. когда строка фактически вставлена, двоичный журнал обновляется
  5. , обработчик записывает delayed_insert_limit строк за раз и выполняет все ожидающие SELECTS между записями
  6. когда очередьпусто, блокировка DELAYED снята

В зависимости от того, нужно ли создавать поток или нет, и сколько времени требуется, чтобы проверить или получить блокировку DELAYED, время между выполнениемоператора (шаг 0) и выполнение оператора (шаг 3) будет отличаться.Затем, в зависимости от того, насколько велика очередь (особенно если она превышает delayed_insert_limit строк), и от того, произойдет ли ожидание SELECTS, запись будет отложена на некоторое непредсказуемое время.

1 голос
/ 10 декабря 2010

Независимо от того, используется ли INSERT DELAYED, или если таблица заблокирована из-за другого потока, обновления или чего-либо еще, значение, которое примет ts, будет равно времени, когда был выпущен INSERT.

0 голосов
/ 10 декабря 2010

Это должно занять время фактической вставки

...