будет ли скрытое поле DB_TRX_ID изменено меньше, чем оно будет использоваться? - PullRequest
1 голос
/ 24 марта 2019

согласно ссылке mysql, 6-байтовое поле идентификатора транзакции будет добавлено в индексную запись кластера и будет установлено значение транзакции, которая создала / изменила его.Мой вопрос: допустим, что транзакции 1, 2 активны в MySQL и 2 изменили запись, в то же время установите ее идентификатор транзакции на 2. снять блокировку и выйти.затем транзакция 1 введена и снова изменена та же запись, будет ли идентификатор транзакции изменяться меньше чем 2 на 1?

1 Ответ

0 голосов
/ 25 марта 2019

Если вам интересны внутренние форматы хранения InnoDB, вам может понадобиться инструмент Джереми Коула Innodb_ruby .

Я попытался создать таблицу test.foo с 1 строкой и обновил строку серией транзакций. Затем я могу использовать сценарий Джереми Коула, чтобы сбросить страницу:

innodb_space -s ibdata1 -T test/foo -p 3 page-dump

...

records:
{:format=>:compact,
 :offset=>125,
 :header=>
  {:next=>112,
   :type=>:conventional,
   :heap_number=>2,
   :n_owned=>0,
   :min_rec=>false,
   :deleted=>false,
   :nulls=>[],
   :lengths=>{},
   :externs=>[],
   :length=>5},
 :next=>112,
 :type=>:clustered,
 :key=>[{:name=>"id", :type=>"BIGINT UNSIGNED", :value=>7}],
 :row=>[],
 :sys=>
  [{:name=>"DB_TRX_ID", :type=>"TRX_ID", :value=>2843},
   {:name=>"DB_ROLL_PTR",
    :type=>"ROLL_PTR",
    :value=>
     {:is_insert=>true, :rseg_id=>20, :undo_log=>{:page=>335, :offset=>272}}}],
 :length=>21,
 :transaction_id=>2843,
 :roll_pointer=>
  {:is_insert=>true, :rseg_id=>20, :undo_log=>{:page=>335, :offset=>272}}}

Вы можете увидеть под ключом :sys DB_TRX_ID. Поскольку я делаю дальнейшие обновления строки, это значение изменяется. Вы можете попробовать сами и посмотреть, как меняется значение.

Прочтите серию постов Джереми в блоге, чтобы узнать больше о формате InnoDB:

Вот список его сообщений в блоге: https://blog.jcole.us/innodb/

...