将 DB_TRX_ID 隐藏字段修改得比它使用的要小吗?
will DB_TRX_ID hidden field modified smaller than it use be?
根据mysql参考,6字节的交易ID字段将被添加到集群索引记录中,并将设置为create/modifed它的交易的值。
我的问题是:
假设事务 1、2 在 mysql 中处于活动状态,并且 2 修改了一条记录,同时将其事务 ID 设置为 2。释放锁并退出。那么事务1进入,再次修改同一条记录,事务ID会不会被修改为小于2的1?
如果您对 InnoDB 内部存储格式感兴趣,您可能想阅读 Jeremy Cole 的 Innodb_ruby tool。
我尝试创建一个包含 1 行的 table test.foo
,并用一系列事务更新该行。然后我可以使用 Jeremy Cole 的脚本转储页面:
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。当我对该行进行进一步更新时,该值发生了变化。大家可以自己试试,看看数值变化如何。
阅读 Jeremy 的系列博文以了解有关 InnoDB 格式的更多信息:
这是他的博文列表:https://blog.jcole.us/innodb/
根据mysql参考,6字节的交易ID字段将被添加到集群索引记录中,并将设置为create/modifed它的交易的值。 我的问题是: 假设事务 1、2 在 mysql 中处于活动状态,并且 2 修改了一条记录,同时将其事务 ID 设置为 2。释放锁并退出。那么事务1进入,再次修改同一条记录,事务ID会不会被修改为小于2的1?
如果您对 InnoDB 内部存储格式感兴趣,您可能想阅读 Jeremy Cole 的 Innodb_ruby tool。
我尝试创建一个包含 1 行的 table test.foo
,并用一系列事务更新该行。然后我可以使用 Jeremy Cole 的脚本转储页面:
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。当我对该行进行进一步更新时,该值发生了变化。大家可以自己试试,看看数值变化如何。
阅读 Jeremy 的系列博文以了解有关 InnoDB 格式的更多信息:
这是他的博文列表:https://blog.jcole.us/innodb/