婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL自增ID耗盡實例講解

MySQL自增ID耗盡實例講解

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

顯示定義ID

表定義的自增值ID達到上限后,在申請下一個ID時,得到的值保持不變

-- (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會創(chuàng)建一個不可見的,長度為6 Bytes的row_id

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

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

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

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

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

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

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

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

XID

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

2、生成邏輯

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

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

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

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

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

InnoDB trx_id

1、XID是由Server層維護的

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

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

  • 每次需要申請一個新的trx_id,就獲得max_trx_id的當前值,然后max_trx_id+1

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

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

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

操作序列

時刻 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時刻
mysql> SELECT trx_id,trx_mysql_thread_id FROM innodb_trx;
+-----------------+---------------------+
| trx_id   | trx_mysql_thread_id |
+-----------------+---------------------+
| 281479812572992 |     30 |
+-----------------+---------------------+

-- T4時刻
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時刻,trx_id的值其實為0,而很大的值只是為了顯示用的(區(qū)別于普通的讀寫事務(wù))

3、T2時刻,trx_id是一個很大的數(shù)字,因為在T1時刻,session A并未涉及更新操作,是一個只讀事務(wù)

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

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

只讀事務(wù)

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

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

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

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

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

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

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

5、trx_id與row_id的邏輯類似,定義長度為8 Bytes

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

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

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

7、max_trx_id會持久化存儲,重啟不會重置為0,只有到達2^48-1的上限后,才會重置為0

thread_id

1、SHOW PROCESSLIST的第一列就是thread_id

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

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

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

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

參考資料

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

總結(jié)

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL自增ID耗盡實例講解》,本文關(guān)鍵詞  MySQL,自增,耗盡,實例,講解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL自增ID耗盡實例講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL自增ID耗盡實例講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成人av电影在线| 国产精品国产精品国产专区不片 | av中文字幕亚洲| 91成人在线精品| 久久久精品免费免费| 韩国v欧美v日本v亚洲v| 日韩欧美二区三区| 日韩不卡一区二区三区| 国产999精品久久| 国产日韩精品视频一区| 日本欧美一区二区三区乱码| 麻豆精品在线观看| 欧美性大战久久| 亚洲一区免费观看| 久久精品一区四区| 成人国产视频在线观看| 久久久国产精品午夜一区ai换脸| 亚洲国产成人私人影院tom| 暴力调教一区二区三区| 国产婷婷精品av在线| 99视频一区二区三区| 国产欧美日本一区视频| 91久久国产最好的精华液| 一区二区高清在线| 日韩一级片网址| 韩国女主播成人在线| 6080yy午夜一二三区久久| 国产成人亚洲综合色影视| 亚洲一卡二卡三卡四卡| 91麻豆精品国产自产在线观看一区| 精品一区二区在线观看| 最新国产成人在线观看| 天天av天天翘天天综合网色鬼国产| 色婷婷久久一区二区三区麻豆| 蓝色福利精品导航| 国产精品久久久久久久久果冻传媒| 日本韩国欧美在线| 午夜精品福利一区二区蜜股av| 久久夜色精品一区| 欧美午夜视频网站| 国产精品入口麻豆九色| 亚洲综合在线电影| 26uuu久久天堂性欧美| 色综合激情久久| 精品一区二区三区久久久| 欧美日韩视频在线第一区 | 亚洲三级电影网站| 日韩一区二区免费视频| 一本久久综合亚洲鲁鲁五月天 | 中文字幕精品在线不卡| 欧美一区二区三区视频在线观看| 久久精品国产第一区二区三区| 亚洲日本一区二区三区| 精品少妇一区二区三区日产乱码 | 色婷婷精品久久二区二区蜜臂av| 亚洲国产高清不卡| 欧美亚洲综合久久| 亚洲成a人在线观看| 国产精品人妖ts系列视频| 成人深夜在线观看| 亚洲黄色小视频| 亚洲欧美中日韩| 日韩一区二区麻豆国产| 日韩免费高清视频| 欧美大片一区二区| 99久久精品国产毛片| 三级不卡在线观看| 日韩黄色免费电影| 久久机这里只有精品| 久久99久久久欧美国产| 国产揄拍国内精品对白| 日本aⅴ精品一区二区三区 | 久久综合色婷婷| 日韩女同互慰一区二区| 久久综合成人精品亚洲另类欧美 | 精品国产99国产精品| 精品久久久久一区二区国产| 精品国产乱码久久久久久夜甘婷婷 | 午夜精品爽啪视频| 亚洲色大成网站www久久九九| 欧美一区二区三区视频免费 | 久久网这里都是精品| 久久精品欧美一区二区三区不卡 | 一本到不卡免费一区二区| 91亚洲永久精品| 91免费国产视频网站| 欧美亚洲国产一区二区三区| 欧美剧在线免费观看网站| 日韩欧美中文字幕制服| 欧美国产日韩a欧美在线观看| 亚洲欧洲在线观看av| 午夜欧美在线一二页| av综合在线播放| 极品瑜伽女神91| 亚洲精品久久久蜜桃| 中文字幕av一区 二区| 亚洲免费毛片网站| 亚洲一区免费在线观看| 国产高清久久久久| 亚洲欧美在线观看| 欧美精品一区二区三区在线| 丰满少妇在线播放bd日韩电影| 欧美在线免费视屏| 国产精品污网站| 色综合久久久网| 蜜臀av一区二区| 91麻豆精品91久久久久久清纯| 欧美伊人久久久久久久久影院 | 欧美精品久久久久久久多人混战| 国产精品女主播在线观看| 色呦呦网站一区| 韩国v欧美v日本v亚洲v| 国产精品美女久久久久久久网站| 欧美精品久久一区二区三区 | 欧美精品一区二区三区久久久| 久久99精品国产麻豆婷婷洗澡| 视频在线在亚洲| 日韩成人精品在线| 婷婷丁香久久五月婷婷| 亚洲男帅同性gay1069| ...xxx性欧美| 亚洲视频在线一区二区| 欧美激情一区二区在线| 久久久午夜精品理论片中文字幕| 精品奇米国产一区二区三区| 日韩精品一区国产麻豆| 欧美电影免费提供在线观看| 欧美一卡二卡三卡四卡| 26uuu色噜噜精品一区二区| 国产日产欧美精品一区二区三区| 在线播放日韩导航| 久久亚洲一级片| 一区二区在线观看视频在线观看| 日韩激情av在线| 国产成人综合网| 欧美在线不卡视频| 久久久久久亚洲综合影院红桃| 国产精品国产三级国产| 日本不卡高清视频| eeuss国产一区二区三区| 欧美一级片在线看| 国产乱码精品一区二区三| 99久久夜色精品国产网站| 欧美一级夜夜爽| 国产精品每日更新在线播放网址| 午夜伦欧美伦电影理论片| 麻豆高清免费国产一区| 日本一区中文字幕| 欧美在线免费观看亚洲| 国产精品动漫网站| 三级一区在线视频先锋| 色一情一乱一乱一91av| 久久青草国产手机看片福利盒子 | 91精品婷婷国产综合久久性色| 亚洲综合区在线| 在线观看日韩av先锋影音电影院| 欧美日韩一区二区三区免费看| 欧美激情一区二区在线| 成人黄动漫网站免费app| 亚洲精品视频在线观看免费| 91成人在线免费观看| 久久婷婷成人综合色| 日本久久一区二区| 国产亚洲人成网站| 在线观看成人小视频| 久久久无码精品亚洲日韩按摩| 26uuu欧美| 亚洲精品国产无套在线观| 欧美群妇大交群中文字幕| 国产精品一区二区三区网站| 极品销魂美女一区二区三区| 欧美一区二区大片| 欧美亚一区二区| 91麻豆精品国产91久久久久久久久| 91精品国产aⅴ一区二区| 国内精品伊人久久久久影院对白| 久久久亚洲综合| 欧美美女bb生活片| 91网址在线看| 成人精品高清在线| 捆绑调教美女网站视频一区| 亚洲免费色视频| 国产精品久久久久天堂| 国产精品久久免费看| 日韩视频免费观看高清在线视频| 国产一区二区女| 一区二区三区精品久久久| 国产日韩欧美电影| 欧美精品一区二区三区在线播放| 欧美日韩成人综合天天影院| 色狠狠色噜噜噜综合网| aaa亚洲精品| 欧美精品国产精品| 日韩一区二区在线观看| 欧美日韩一区精品| 欧美在线一区二区| 日韩一区二区在线观看视频播放| 欧美精品xxxxbbbb| 国产精品成人免费| 亚洲成av人在线观看|