当前位置: 首页 > wzjs >正文

做网站设计的提成点是多少软文广告属于什么营销

做网站设计的提成点是多少,软文广告属于什么营销,redis 在网站开发中怎么用,自己做网站可以吗文章目录表自增ID自增ID的保存自增ID不意味着每次1自增ID达到最大值自增ID的执行流程批量申请自增IDinnodb_autoinc_lock_mode并发事务 自增ID binlog如何记录时间戳同步备库也是相似的问题row_idxid事务ID:trx_id线程ID:thread_id表自增ID 自增ID的保存…

文章目录

    • 表自增ID
      • 自增ID的保存
      • 自增ID不意味着每次+1
      • 自增ID达到最大值
      • 自增ID的执行流程
      • 批量申请自增ID
        • innodb_autoinc_lock_mode
      • 并发事务 自增ID binlog如何记录
        • 时间戳同步备库也是相似的问题
    • row_id
    • xid
    • 事务ID:trx_id
    • 线程ID:thread_id

表自增ID

自增ID的保存

innodb中表结构存在.frm文件中(MyISAM 把自增ID值保存在数据文件中),但不会保存自增值。mysql 8.0之前,自增值不会被持久化。

没有被持久化:自增值保存在内存中,重启后第一次打开表,回去计算当前max(id),将max(id)+1作为下一个自增值。比如:当前表中; id=10, auto_increment=11,如果这时删除id=10的数据,auto_increment=11,如果此时插入数据,新数据的id=11(// 注意:表中id不是连续的);如果此时重启数据库,再插入数据,新数据的id=10

持久化:8.0之后,将自增值的变更记录保存在redo log中,重启后依靠redo log恢复。

自增ID不意味着每次+1

auto_increment_offset 开始位置,auto_increment_increment 每次增长的步长,默认值都是1。

也有步长是2的情况,比如双主的主备结构,一个机器的自增ID用奇数,一个机器的自增ID用偶数,步长都是2。原因:避免两个库生成的主键发生冲突。

自增ID达到最大值

达到最大值后,再insert新数据,自增ID不变,报主键错误

自增ID的执行流程

insert into t values(null, 1, 1); 

在这里插入图片描述

自增锁用完就释放+insert出错也不会回退,提高了事务的并发性。会发现ID不连续,导致ID不连续的场景,比如:

  • 删除一个元素,后面再插入不会再用这个ID
  • insert失败,自增ID不会回滚,不然会影响其他事务。失败举例:唯一键冲突、事务kill回滚
  • 批量申请ID(不知道申请几个)时,为了提高效率,第一次申请给1个,第二次申请给2个,第三次申请给4个,就算最后一次申请没用完也不能还回来

批量申请自增ID

insert…select用的是语句级的自增ID锁,不是申请完一次就释放。因为insert…select不像insert…values知道一次要申请多少个,所以要渐进式的多次申请。而且为了保证在并发场景下,主从数据一致性 => 主库执行插入操作和binlog回放结果一样,所以insert…select需要是一个整体。所以insert…select用的是语句级的自增ID锁。

sessionAsessionB
insert into t2 values(null,1,1)
insert into t2 values(null,2,2)
insert into t2 values(null,3,3)
insert into t2 values(null,4,4)
insert into t2 values(null,5,5)insert into t2(c,d) select c,d from t;

如果sessionB的insert…select不是一个整体,插入的数据可能就是:(1,1,1),(2,2,2),(3,5,5),(4,3,3),(5,4,4);sessionA的语句查到中间了。binlog是没有办法回放出来的。sessionA的insert t2和sessionB的insert t2有冲突(要保证主备一致),需要insert…select加锁执行。

innodb_autoinc_lock_mode

0:语句结束后释放锁

1:普通insert,自增ID申请到就释放;类似insert…select、load data、replace…select等批量插入语句,自增锁要等语句结束后才释放

2:所有自增ID都申请完立即释放

为提高并发插入能力,可行的配置:innodb_autoinc_lock_mode=2 + binlog=row(保证数据一致)

并发事务 自增ID binlog如何记录

在binlog=statement,binlog只记录语句的情况下

sessionAsessionB
insert into t2 values(null,1,1) // 实际插入时申请的id=1 insert(1,1,1)insert into t2 values(null,2,2) // 实际插入时申请的id=2 insert(2,2,2)

但sessionB先执行完记录到binlog,那binlog的回放的时候id不就等于=1的给sessionB了吗?

在这里插入图片描述

不会,事务记录的时候insert_ID会跟着事务

// sessionB先完成,sessionA后完成,binlog的记录:
SET INSERT_ID=2;
语句 B;
SET INSERT_ID=1;
语句 A;
时间戳同步备库也是相似的问题
insert into t values(1,1,now())

binlog=statement时,binlog也会记录当前时间戳对应的实际值

row_id

表没定主键,系统会默认生成一个主键,实际占6个字节;达到上限后,下一个就是0,循环。

xid

redo log关联对应的binlog语句时使用xid。mysql有全局变量global_query_id,每次执行语句会给它发一个query_id,然后把这个变量+1。如果这个语句是事务的第一条语句,就会把这个query_id给xid。

每次sql重启都会清空global_query_id。global_query_id有8个字节,所以一般不会到达极限

事务ID:trx_id

xid是关联redo log和binlog用的,由server层维护。trx_id是innodb 事务单独维护的,trx_id是为了处理读写事务一致性的。

只读是不分配事务ID的,但在innodb_trx能看到一个很大的数,这个数是系统临时算出来的=当前事务trx变量的指针地址转整数+2的48次方;不分配事务ID好处:不需要,能减少trx_id的申请次数和相应的逻辑处理,比如:事务视图的活跃列表数组的大小。

trx_id到达最大值之后,就会重置为0。按照现在的TPS,在十几年后会出现。那就会出现脏读。

在这里插入图片描述

线程ID:thread_id

用完会重置到0,但mysql分配线程ID时加了逻辑限制要求唯一:重置0之后,mysql会遍历thread_id_counter,直至找到一个没有被正在用的thread_id,分配给新线程。

http://www.dtcms.com/wzjs/397449.html

相关文章:

  • 电商网站后台建设广东今天新闻最新消息
  • 网站建设中可能出现的问题海外社交媒体营销
  • 做品牌特卖的网站代写文章价格表
  • 怎么自己建立一个网站后台seo推广专员工作好做吗
  • 专门做租房的网站重庆森林经典台词截图
  • 内蒙古自治区党风廉政建设网站怎么做推广
  • 怎样自己做卖商品的网站交换链接的作用
  • 自己做的微课上传到哪个网站网络营销师主要做什么
  • 丰城市城乡规划建设局网站怎样推广公司的网站
  • 如何做网站的301重定向链接推广
  • 建设共享经济网站的可行性泉州网站seo公司
  • 自建网站需要哪些技术b2b电商平台有哪些
  • 做房产网站不备案可以吗黄冈免费网站推广平台汇总
  • 离线网站制作活动策划公司
  • 做前端网站考虑兼容分辨率宁波网络推广方式
  • 万网可以花钱做网站吗上海排名优化seo
  • 林州网站建设价格南京今天重大新闻事件
  • 国内做设计的网站有哪些上海网站建设关键词排名
  • 主流的外贸平台深圳网络推广优化
  • 辽宁省住房和城乡建设部网站厦门零基础学seo
  • 有ecs怎么做网站百度云官网
  • 开发房地产需要多少钱石家庄seo网络优化的公司
  • 上海比较好的电商公司有哪些seo整站网站推广优化排名
  • 传媒公司网站源码php近日发生的重大新闻
  • 怎么搜索网站内容淘宝关键词搜索量排名
  • z-blog和wordpress哪个好seo排名规则
  • 佛山网站策划公司优化网站关键词的技巧
  • 4s店网站建设济南头条新闻热点
  • 如何在服务器上做网站微信指数查询
  • 如何做游戏网站画质优化app下载