mysql溢位 MySQL 行溢位資料

2021-10-17 12:12:14 字數 992 閱讀 9645

mysql 行溢位資料

mysql 對一條記錄占用的最大儲存空間是有限制的,除了 blob 和 text 型別之外,其他所有列 (不包括隱藏列和記錄頭資訊) 占用的位元組長度不能超過 65535 個位元組,當記錄長度超過限制時,mysql 會建議使用 text 或 blob 型別

儲存資料

儲存上限 65535 個位元組不僅包含本身的資料,還包含一些其他資料 (storage overhead),以 verchar 型別為例,共需要 3 部分儲存空間:

真實資料

真實資料占用的位元組長度

null 值標識,not null 列沒有這部分

當使用 ascii 字符集時:如果 '真實資料占用的位元組長度' 占用兩個位元組,null 值標識占用乙個位元組,則真實資料最多只能儲存 65532 個字元

當使用 utf8 字符集時:如果 '真實資料占用的位元組長度' 占用兩個位元組,null 值標識占用乙個位元組,則真實資料最多只能儲存 21844 (65532 / 3) 個字元

行溢位由於 mysql 中以頁為基本單位來管理儲存空間的,所有的記錄都會被分配到頁中

由於乙個頁一般為 16kb (16384 個位元組),而乙個 verchar 最多可以儲存 65532 個位元組,所以會出現乙個頁存放不下一條記錄的情況,造成行溢位

不僅是 verchar,blob 和 text 也會發生行溢位

儲存方式

對於不同行格式,有不同儲存溢位頁的方式

compact & reduntant

當發生行溢位時,在 compact 和 reduntant 中,'記錄的真實資料' 處只會儲存一部分 (768 位元組的) 資料,剩下的資料儲存在幾個其他的頁 (溢位頁) 中 (以鍊錶的方式連線),在 '記錄的真實資料' 處用 20 個位元組儲存這些頁的位址 (包含分散在其他頁面中的資料的占用的位元組數)

dynamic & compressed

它們不會在 '記錄的真實資料' 處儲存真實資料的前 768 個位元組,而是把所有的位元組都儲存到其他頁面中,只儲存其他頁面的位址

mysql防止記憶體溢位 mysql記憶體溢位處理

主庫實列發生oom,例項程序由於占用記憶體達到linux系統的最大閾值,導致linux系統kill了mysql例項程序,可以通過如下方式檢視mysql使用了多少記憶體 檢視每個執行緒占用多少記憶體,然後乘以正在執行的執行緒 也就是排查sleep的 select read buffer size re...

mysql溢位 MySQL數值型別溢位的處理方法

來,考考大家乙個問題,在 mysql 中當某一列設定為 int 0 時會發生什麼 為了演示這個問題,我們先要建立乙個表 drop table if exists na create table na n1 int 0 not null default 0 n2 int 11 not null def...

php mysql 溢位 mysql時間戳溢位問題

眾所周知,時間戳是自 1970 年 1 月 1 日 00 00 00 gmt 以來的秒數。它也被稱為 unix 時間戳 unix timestamp mysql也提供了時間戳方面的函式,如unix timestamp 和from unixtime 現在通用的時間戳貌是32位無符號整形,這也就標示著時...