登錄mysql怎么查看引擎 mysql mvcc解決什么問題?
mysql mvcc解決什么問題?解釋如下:MySQL 的事務(wù)存儲(chǔ)引擎不實(shí)現(xiàn)簡(jiǎn)單的行級(jí)鎖。為了提高并發(fā)性能,它們一般同時(shí)實(shí)現(xiàn)多版本并發(fā)控制(MVCC)。不僅僅是MySQL,其他數(shù)據(jù)庫系統(tǒng)如Oracl
mysql mvcc解決什么問題?
解釋如下:
MySQL 的事務(wù)存儲(chǔ)引擎不實(shí)現(xiàn)簡(jiǎn)單的行級(jí)鎖。為了提高并發(fā)性能,它們一般同時(shí)實(shí)現(xiàn)多版本并發(fā)控制(MVCC)。不僅僅是MySQL,其他數(shù)據(jù)庫系統(tǒng)如Oracle、PostgreSQL都實(shí)現(xiàn)了MVCC,只是實(shí)現(xiàn)機(jī)制不同,因?yàn)镸VCC沒有相同的標(biāo)準(zhǔn)。
可以認(rèn)為MVCC是行級(jí)鎖的變種,但很多情況下避免了鎖操作,所以開銷更低。大多數(shù)MVCC實(shí)現(xiàn)非阻塞讀操作,寫操作只鎖定必要的行。
MVCC是通過保存某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)快照來實(shí)現(xiàn)的。換句話說,無論執(zhí)行多久,每個(gè)事務(wù)看到的數(shù)據(jù)都是一致的。根據(jù)事務(wù)的開始時(shí)間,所有的東西都可能在同一時(shí)間看到同一個(gè)表的不同數(shù)據(jù)。
不同存儲(chǔ)引擎的MVCC實(shí)現(xiàn)是不同的,通常有樂觀并發(fā)控制和悲觀并發(fā)控制。
InnoDB的MVCC是通過在每行記錄后保存兩個(gè)隱藏列來實(shí)現(xiàn)的。這兩列,一列保存行的創(chuàng)建時(shí)間,另一列保存行的到期時(shí)間(刪除時(shí)間)。并且存儲(chǔ)的不是實(shí)時(shí)值,而是系統(tǒng)版本號(hào)。每次啟動(dòng)新事務(wù)時(shí),系統(tǒng)版本號(hào)都會(huì)自動(dòng)遞增。事務(wù)開始時(shí)的系統(tǒng)版本號(hào)將作為事務(wù)的版本號(hào),用于與找到的每一行記錄的版本號(hào)進(jìn)行比較。
表空間和臨時(shí)表空間的區(qū)別?
讓 讓我們先談?wù)勁R時(shí)表的概念。顧名思義,臨時(shí)表是臨時(shí)的,銷毀的表就用完了。數(shù)據(jù)可以存儲(chǔ)在臨時(shí)文件系統(tǒng)或固定磁盤文件系統(tǒng)中。臨時(shí)表如下:
1個(gè)全局臨時(shí)表
這個(gè)臨時(shí)表在數(shù)據(jù)庫實(shí)例啟動(dòng)后生效,在數(shù)據(jù)庫實(shí)例銷毀后失效。在MySQL中,這個(gè)臨時(shí)表對(duì)應(yīng)的是內(nèi)存表,也就是內(nèi)存引擎。
2會(huì)話級(jí)臨時(shí)表
該臨時(shí)表在用戶成功登錄系統(tǒng)后生效,在用戶退出時(shí)失效。MySQL中的臨時(shí)表是指用cr:/usr/local/mysql/data# ln-s/run/shm//usr/local/MySQL/data/tmp _ spac:/usr/local/mysql/data#ls-l | gr: 28 tmp _ space 2-/run/shm/
然后把
innodb _ temp _ data _ file _ path tmp _ spac: 200 m: auto extend
添加到中[mysqld]下面的行。
重啟MySQL服務(wù)后,
MySQL select @ @ innodb _ t: tmp _ spac: 200 m: auto extend
1行一組(0.00秒)
編寫一個(gè)存儲(chǔ)過程來批量創(chuàng)建臨時(shí)表:
分隔符$$
使用` t_girl`$$
drop procedure IF EXISTS ` sp _ create _ temporary _ table ` $ $
CREATEDEFINER`root`@`localhost `過程` sp_create_temporary_table `(
IN f_cnt INT UNSIGNED)
開始
聲明i INT無符號(hào)默認(rèn)值1;
當(dāng)我離開時(shí)
防御命令(Defense Order)
SET @ stmt CONCAT(create temporary table tmp,I,(id int,tmp _ desc varchar(60)););
從@stmt準(zhǔn)備S1;
執(zhí)行S1;
集合I I 1;
結(jié)束WHILE
滴準(zhǔn)備S1;
結(jié)束$$
分隔符;
現(xiàn)在創(chuàng)建10個(gè)臨時(shí)表:
MySQL call sp _ create _ temporary _ table(10);
QueryOK,0行受影響(0.07秒)
如果在以前,我們只知道創(chuàng)建了10個(gè)臨時(shí)表,但只能靠記憶或手工記錄臨時(shí)表的名稱等信息。
現(xiàn)在,您可以直接從數(shù)據(jù)字典中檢索相關(guān)數(shù)據(jù)。
MySQL select * from information _ _ temp _ table _ info;
- - - - - -
| TABLE _ ID | NAME | N _ COLS | SPACE | PER _ TABLE _ TABLESPACE | IS _ COMPRESSED |
- - - - --
| 56 | # SQL 1705 _ 2 _ 9 | 5 | 36 | FALSE | FALSE |
| 55 | # SQL 1705 _ 2 _ 8 | 5 | 36 | FALSE | FALSE |
| 54 | # SQL 1705 _ 2 _ 7 | 5 | 36 | FALSE | FALSE |
| 53 | # SQL 1705 _ 2 _ 6 | 5 | 36 | FALSE | FALSE |
| 52 | # SQL 1705 _ 2 _ 5 | 5 | 36 | FALSE | FALSE |
| 51 | # SQL 1705 _ 2 _ 4 | 5 | 36 | FALSE | FALSE |
| 50 | # SQL 1705 _ 2 _ 3 | 5 | 36 | FALSE | FALSE |
| 49 | # SQL 1705 _ 2 _ 2 | 5 | 36 | FALSE | FALSE |
| 48 | # SQL 1705 _ 2 _ 1 | 5 | 36 | FALSE | FALSE |
| 47 | # SQL 1705 _ 2 _ 0 | 5 | 36 | FALSE | FALSE |
- - - - - -
一組10行(0.00秒)
我 我將在這里停止功能。如果對(duì)性能感興趣,可以找時(shí)間測(cè)試一下。