关于 mysql trx_id 的疑惑 发帖一问

225 天前
 qtxxm

请教一个问题,

BEGIN;
select * from sys_hosts;
SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX  WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID();
COMMIT;

返回如下 +-----------------+ | TRX_ID | +-----------------+ | 421114694075176 | +-----------------+ 1 row in set (0.00 sec)

BEGIN;
delete from sys_hosts WHERE id < 0;
SELECT TRX_ID FROM INFORMATION_SCHEMA.INNODB_TRX  WHERE TRX_MYSQL_THREAD_ID = CONNECTION_ID();
COMMIT;

返回如下 +---------+ | TRX_ID | +---------+ | 1092017 | +---------+ 1 row in set (0.00 sec)

以上,只读事务中的 事务 id 是一个非常大的值 421114694075176 实际上如果数据库有写操作,得到的真实事务 id 是一个逐渐递增的值,比如这里 1092017,这个值会用于实际数据行中的隐藏列 trx_id

那么请问大佬们

  1. 只读事务 id 这个值数据库是怎么生成得到的?
  2. 是否可以认为,mysql 为了避免 trx_id 的浪费,只会在真实涉及到写操作的事务中,才生成真正的 trx_id
  3. 在 mysql trx_id 自增达到最大值时,各互联网大厂是怎么处理的?(这个值理论上足够用很久,是不是我想多了)
2071 次点击
所在节点    MySQL
3 条回复
wps353
225 天前
据我所知,trx_id 是 6 个字节,基本上用不完。
qtxxm
225 天前
@wps353 正常业务,用完之前公司应搞倒闭了
qtxxm
224 天前
无人问津啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1111463

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX