欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫(kù) > MySQL自增ID耗盡實(shí)例講解

MySQL自增ID耗盡實(shí)例講解

熱門標(biāo)簽:電話機(jī)器人市場(chǎng)趨勢(shì) 百度地圖標(biāo)注后不顯示 電銷機(jī)器人 行業(yè) 南昌高頻外呼系統(tǒng)哪家公司做的好 電銷機(jī)器人各個(gè)細(xì)節(jié)介紹 溫州瑞安400電話怎么申請(qǐng) 昆明電信400電話辦理 淄博400電話申請(qǐng) 俄國(guó)地圖標(biāo)注app

顯示定義ID

表定義的自增值ID達(dá)到上限后,在申請(qǐng)下一個(gè)ID時(shí),得到的值保持不變

-- (2^32-1) = 4,294,967,295
-- 建議使用 BIGINT UNSIGNED
CREATE TABLE t (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) AUTO_INCREMENT=4294967295;
INSERT INTO t VALUES (null);

-- AUTO_INCREMENT沒有改變
mysql> SHOW CREATE TABLE t;
+-------+------------------------------------------------------+
| Table | Create Table           |
+-------+------------------------------------------------------+
| t  | CREATE TABLE `t` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------+

mysql> INSERT INTO t VALUES (null);
ERROR 1062 (23000): Duplicate entry '4294967295' for key 'PRIMARY'

InnoDB row_id

1、如果創(chuàng)建的InnoDB表沒有指定主鍵,那么InnoDB會(huì)創(chuàng)建一個(gè)不可見的,長(zhǎng)度為6 Bytes的row_id

2、InnoDB維護(hù)一個(gè)全局的dict_sys.row_id值,所有無主鍵的InnoDB表,每插入一行數(shù)據(jù)

  • 都將當(dāng)前的dict_sys.row_id值作為要插入數(shù)據(jù)的row_id,然后把dict_sys.row_id的值+1

3、代碼實(shí)現(xiàn)上,row_id是一個(gè)8 Bytes的BIGINT UNSIGNED

  • 但I(xiàn)nnoDB設(shè)計(jì)時(shí),給row_id只保留了6 Bytes的空間,寫到數(shù)據(jù)表時(shí)只會(huì)存放最后的6 Bytes
  • row_id的取值范圍:0 ~ 2^48-1
  • 達(dá)到上限后,下一個(gè)值就是0

4、在InnoDB里面,申請(qǐng)到row_id=N后,就將這行數(shù)據(jù)寫入表中

  • 如果表中已經(jīng)有row_id=N的行,新寫入的行就會(huì)覆蓋原有的行

5、推薦顯示創(chuàng)建自增主鍵

  • 表自增ID達(dá)到上限后,再插入數(shù)據(jù)時(shí)會(huì)報(bào)主鍵沖突的錯(cuò)誤,影響的是可用性
  • 而覆蓋數(shù)據(jù),意味著數(shù)據(jù)丟失,影響的是可靠性
  • 一般來說,可靠性優(yōu)于可用性

XID

1、redolog和binlog相配合的時(shí)候,有一個(gè)共同的字段XID,對(duì)應(yīng)一個(gè)事務(wù)

2、生成邏輯

  • MySQL內(nèi)部維護(hù)一個(gè)全局變量global_query_id
  • 每次執(zhí)行語句的時(shí)候?qū)lobal_query_id賦值給Query_id,然后global_query_id+1
  • 如果當(dāng)前語句是這個(gè)事務(wù)執(zhí)行的第一條語句,把Query_id賦值給這個(gè)事務(wù)的XID

3、global_query_id是一個(gè)純內(nèi)存變量,重啟之后清零

  • 因此,在同一個(gè)數(shù)據(jù)庫(kù)實(shí)例中,不同事務(wù)的XID也有可能是相同的
  • MySQL重啟之后,會(huì)重新生成新的binlog
    • 保證:同一個(gè)binlog文件里,XID是唯一的
  • global_query_id達(dá)到上限后,就會(huì)繼續(xù)從0開始計(jì)數(shù)
    • 因此理論上,同一個(gè)binlog還是會(huì)出現(xiàn)相同的XID,只是概率極低

4、global_query_id是8 Bytes,上限為2^64-1

  • 執(zhí)行一個(gè)事務(wù),假設(shè)XID是A
  • 接下來執(zhí)行2^64次查詢語句,讓global_query_id回到A
  • 再啟動(dòng)一個(gè)事務(wù),這個(gè)事務(wù)的XID也是A

InnoDB trx_id

1、XID是由Server層維護(hù)的

2、InnoDB內(nèi)部使用的是trx_id,為的是能夠在InnoDB事務(wù)和Server層之間做關(guān)聯(lián)

3、InnoDB內(nèi)部維護(hù)一個(gè)max_trx_id的全局變量

  • 每次需要申請(qǐng)一個(gè)新的trx_id,就獲得max_trx_id的當(dāng)前值,然后max_trx_id+1

4、InnoDB數(shù)據(jù)可見性的核心思想

  • 每一行數(shù)據(jù)都記錄了更新它的trx_id
  • 當(dāng)一個(gè)事務(wù)讀到一行數(shù)據(jù)的時(shí)候,判斷數(shù)據(jù)可見性的方法
    • 事務(wù)的一致性視圖和這行數(shù)據(jù)的trx_id做對(duì)比

5、對(duì)于正在執(zhí)行的事務(wù),可以通過information_schema.innodb_trx看到事務(wù)的trx_id

操作序列

時(shí)刻 session A session B
T1 BEGIN;
SELECT * FROM t LIMIT 1;
T2 USE information_schema;
SELECT trx_id,trx_mysql_thread_id FROM innodb_trx;
T3 INSERT INTO t VALUES (null);
T4 SELECT trx_id,trx_mysql_thread_id FROM innodb_trx;

-- T2時(shí)刻
mysql> SELECT trx_id,trx_mysql_thread_id FROM innodb_trx;
+-----------------+---------------------+
| trx_id   | trx_mysql_thread_id |
+-----------------+---------------------+
| 281479812572992 |     30 |
+-----------------+---------------------+

-- T4時(shí)刻
mysql> SELECT trx_id,trx_mysql_thread_id FROM innodb_trx;
+-----------------+---------------------+
| trx_id   | trx_mysql_thread_id |
+-----------------+---------------------+
| 7417540   |     30 |
+-----------------+---------------------+

mysql> SHOW PROCESSLIST;
+----+-----------------+-----------+--------------------+---------+--------+------------------------+------------------+
| Id | User   | Host  | db     | Command | Time | State     | Info    |
+----+-----------------+-----------+--------------------+---------+--------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL    | Daemon | 344051 | Waiting on empty queue | NULL    |
| 30 | root   | localhost | test    | Sleep | 274 |      | NULL    |
| 31 | root   | localhost | information_schema | Query |  0 | starting    | SHOW PROCESSLIST |
+----+-----------------+-----------+--------------------+---------+--------+------------------------+------------------+

1、trx_mysql_thread_id=30就是線程ID,即session A所在的線程

2、T1時(shí)刻,trx_id的值其實(shí)為0,而很大的值只是為了顯示用的(區(qū)別于普通的讀寫事務(wù))

3、T2時(shí)刻,trx_id是一個(gè)很大的數(shù)字,因?yàn)樵赥1時(shí)刻,session A并未涉及更新操作,是一個(gè)只讀事務(wù)

  • 對(duì)于只讀事務(wù),InnoDB不會(huì)分配trx_id

4、session A在T3時(shí)刻執(zhí)行INSERT語句時(shí),InnoDB才真正分配trx_id

只讀事務(wù)

1、在上面的T2時(shí)刻,很大的trx_id是由系統(tǒng)臨時(shí)計(jì)算出來的

  • 把當(dāng)前事務(wù)的trx變量的指針地址轉(zhuǎn)成整數(shù),再加上2^48

2、同一個(gè)只讀事務(wù)在執(zhí)行期間,它的指針地址是不會(huì)變的

  • 不論是在innodb_trx還是innodb_locks表里,同一個(gè)只讀事務(wù)查出來的trx_id都是一樣的

3、如果有多個(gè)并行的只讀事務(wù),每個(gè)事務(wù)的trx變量的指針地址肯定是不同的

  • 不同的并發(fā)只讀事務(wù),查出來的trx_id是不同的

4、加上2^48的目的:保證只讀事務(wù)顯示的trx_id值比較大,用于區(qū)別普通的讀寫事務(wù)

5、trx_id與row_id的邏輯類似,定義長(zhǎng)度為8 Bytes

  • 在理論上,可能會(huì)出現(xiàn)一個(gè)讀寫事務(wù)與一個(gè)只讀事務(wù)顯示的trx_id相同的情況
  • 但概率極低,并且沒有什么實(shí)質(zhì)危害

6、只讀事務(wù)不分配trx_id的好處

  • 可以減少事務(wù)視圖里面活躍數(shù)組的大小
    • 當(dāng)前正在運(yùn)行的只讀事務(wù),是不影響數(shù)據(jù)的可見性判斷
    • 因此,在創(chuàng)建事務(wù)的一致性視圖時(shí),只需要拷貝讀寫事務(wù)的trx_id
  • 可以減少trx_id的申請(qǐng)次數(shù)
    • 在InnoDB里,即使只執(zhí)行一條普通的SELECT語句,在執(zhí)行過程中,也要對(duì)應(yīng)一個(gè)只讀事務(wù)
    • 如果普通查詢語句不申請(qǐng)trx_id,就可以大大減少并發(fā)事務(wù)申請(qǐng)trx_id的鎖沖突
    • 由于只讀事務(wù)不分配trx_id,trx_id的增加速度會(huì)變慢

7、max_trx_id會(huì)持久化存儲(chǔ),重啟不會(huì)重置為0,只有到達(dá)2^48-1的上限后,才會(huì)重置為0

thread_id

1、SHOW PROCESSLIST的第一列就是thread_id

2、系統(tǒng)保存了一個(gè)環(huán)境變量thread_id_counter

  • 每新建一個(gè)連接,就將thread_id_counter賦值給這個(gè)新連接的線程變量

3、thread_id_counter定義為4 Bytes,因此達(dá)到2^32-1后就會(huì)重置為0

  • 但不會(huì)在SHOW PROCESSLIST里面看到兩個(gè)相同的thread_id
  • 因?yàn)镸ySQL設(shè)計(jì)了一個(gè)唯一數(shù)組的邏輯,給新線程分配thread_id,邏輯代碼如下
do {
  new_id= thread_id_counter++;
} while (!thread_ids.insert_unique(new_id).second);

參考資料

《MySQL實(shí)戰(zhàn)45講》

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 關(guān)于mysql自增id,你需要知道的
  • MySQL表自增id溢出的故障復(fù)盤解決
  • 關(guān)于MySQL自增ID的一些小問題總結(jié)
  • 關(guān)于Mysql自增id的這些你可能還不知道
  • mysql自增id超大問題的排查與解決
  • MySQL分表自增ID問題的解決方法
  • 兩種mysql對(duì)自增id重新從1排序的方法
  • 利用mysql事務(wù)特性實(shí)現(xiàn)并發(fā)安全的自增ID示例
  • mysql自增ID起始值修改方法
  • MySQL的自增ID(主鍵) 用完了的解決方法

標(biāo)簽:吐魯番 洛陽 葫蘆島 安徽 海口 甘南 嘉峪關(guān) 拉薩

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL自增ID耗盡實(shí)例講解》,本文關(guān)鍵詞  MySQL,自增,耗盡,實(shí)例,講解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL自增ID耗盡實(shí)例講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL自增ID耗盡實(shí)例講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    日韩欧美一级片| 色伊人久久综合中文字幕| 黄色工厂在线观看| 色噜噜在线观看| 精品欧美一区二区久久久| www.日本高清视频| 91麻豆免费视频网站| 色婷婷香蕉在线一区二区| 日本国产一区二区| 精品视频资源站| 91精品国产丝袜白色高跟鞋| 日韩精品一区二区三区swag | 成人性生交大免费看| 亚洲午夜精品久久久久久高潮| 日本欧美一区二区三区不卡视频| 蜜臀av午夜精品久久| 欧美午夜一区二区三区| 日韩欧美一级在线播放| 欧美国产成人在线| 亚洲国产aⅴ天堂久久| 久久精品国产亚洲一区二区三区| 国产激情视频一区二区在线观看| 不卡大黄网站免费看| 精品无码人妻一区| 在线这里只有精品| 国产午夜精品美女毛片视频| 亚洲美女区一区| 国模一区二区三区白浆| 国产性猛交96| 三级影片在线看| 欧美精品一区二区在线播放 | 欧美人体做爰大胆视频| 国产日韩成人精品| 免费在线看成人av| 一起草最新网址| 国产免费一区二区三区四区| 日韩限制级电影在线观看| 一区二区不卡在线播放 | 国产剧情av麻豆香蕉精品| 日本一级片在线播放| 欧美亚洲一区三区| 国产精品久99| 成人毛片在线观看| 小泽玛利亚一区| 色婷婷国产精品| 欧美xxxxx牲另类人与| 亚洲视频在线一区二区| 国产一区二区三区免费观看| 国产一区二区三区不卡在线观看| 97久久精品人人澡人人爽| 女人扒开腿免费视频app| 99久久人妻精品免费二区| 成人无码av片在线观看| 国产婷婷一区二区| 亚洲精品女人久久久| 亚洲国产精品一区二区久久| 欧美最新大片在线看| 成人永久aaa| 精品国产成人在线影院| 麻豆成人91精品二区三区| 91在线精品一区二区| 五月天激情小说| 欧美巨胸大乳hitomi| 在线观看亚洲成人| 亚洲欧洲美洲综合色网| 国产成人一区二区精品非洲| 大桥未久恸哭の女教师| 欧美日韩视频第一区| 国产精品五月天| 国产福利一区二区三区视频 | 综合激情成人伊人| 95精品视频在线| 色噜噜久久综合| 一区二区三区国产精品| 2018国产精品| 91精品国产欧美一区二区成人| 国产制服丝袜一区| 婷婷久久综合网| 亚洲午夜激情网站| 女~淫辱の触手3d动漫| 国产精品美女久久久久aⅴ| 99国产精品免费视频| 精品国产乱码久久久久久图片| 蜜臀精品久久久久久蜜臀 | 成人av电影在线观看| 欧美丰满少妇xxxbbb| 视频一区免费在线观看| 色综合久久天天| 成人精品鲁一区一区二区| 国产午夜精品一区二区三区视频| 国产激情视频网站| 亚洲成人你懂的| 91精品国产综合久久蜜臀| 日韩激情一二三区| 三级av在线免费观看| 免费欧美日韩国产三级电影| 欧美性大战久久| 成人手机电影网| 久久久精品欧美丰满| 日韩免费高清一区二区| 亚洲另类在线制服丝袜| 三上悠亚在线观看视频| 精品一二三四在线| 欧美一区在线视频| 亚洲激情 欧美| 亚洲一级二级三级| 欧美在线你懂的| www.日本不卡| ●精品国产综合乱码久久久久| 色综合99久久久无码国产精品| 日本不卡的三区四区五区| 欧美美女bb生活片| 五月天丁香社区| 亚洲成人免费在线| 欧美一区二区啪啪| 男男做爰猛烈叫床爽爽小说 | 久久久久9999亚洲精品| 人妻熟女aⅴ一区二区三区汇编| 无码av免费一区二区三区试看 | 全黄一级裸体片| 热久久免费视频| 欧美精品一区二区在线观看| 亚洲天堂岛国片| 成人免费视频caoporn| 亚洲激情第一区| 911精品国产一区二区在线| 欧美夫妇交换xxx| 裸体在线国模精品偷拍| 日本一区二区电影| 一本久道久久综合中文字幕| 99久久er热在这里只有精品15| 亚洲精品欧美二区三区中文字幕| 欧美午夜精品久久久久久孕妇 | 国产毛片一区二区| 中文字幕欧美一| 欧美一区二区三区在线| 日韩欧美黄色网址| 91在线视频网址| 免费看欧美美女黄的网站| 国产日韩欧美制服另类| 欧洲av在线精品| 日韩女同一区二区三区| 91视视频在线观看入口直接观看www | 欧美性受xxxx| 国产成人精品无码免费看夜聊软件| 粉嫩欧美一区二区三区高清影视| 亚洲国产精品麻豆| 欧美激情综合五月色丁香| 在线观看视频一区二区欧美日韩| 51妺嘿嘿午夜福利| 女同性αv亚洲女同志| 国产成人精品在线看| 日韩精品一卡二卡三卡四卡无卡| 中文字幕在线观看不卡视频| 日韩欧美视频在线 | 视频免费在线观看| 99国产精品久久久久久久久久 | 免费久久99精品国产| 亚洲精品乱码久久久久久久久 | 日韩一区二区三区电影在线观看 | 91麻豆精品成人一区二区| 免费观看一级一片| 在线播放第一页| 91年精品国产| 99视频一区二区三区| 国产美女免费网站| 国产精品无码毛片| 日本黄色录像片| 99精品欧美一区二区三区综合在线| 国产在线视视频有精品| 日本va欧美va精品发布| 午夜亚洲福利老司机| 亚洲成人自拍一区| 亚洲一区欧美一区| 一区二区三区免费在线观看| 亚洲日本在线看| 一区二区三区四区亚洲| 一区二区欧美精品| 亚洲高清不卡在线| 日本不卡不码高清免费观看| 免费精品视频在线| 久久99精品国产麻豆不卡| 经典三级视频一区| 国产成人av资源| 99久久精品久久久久久清纯| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 7777精品伊人久久久大香线蕉完整版 | 国产成人午夜片在线观看高清观看| 国产一区二区视频在线| 国产a精品视频| 国产老头和老头xxxx×| 色综合久久99| 欧美视频在线观看一区二区| 欧美日韩电影在线| 久久综合九色综合欧美就去吻| 久久精品欧美日韩精品| 亚洲视频一区二区在线观看| 天天做天天摸天天爽国产一区 | 国产女人aaa级久久久级| 日韩美女啊v在线免费观看|