国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MYSQL RC 和RR隔離級別差別性

2024-07-24 12:32:08
字體:
供稿:網(wǎng)友
       今天一個朋友咨詢我關(guān)于MYSQL 的LOCK,我針對他的問題,整理了一篇BLOG,供大家了解學(xué)習(xí),有興趣的同學(xué)可以參考來測試加深原理的理解。
 
      結(jié)論:
     1.RR隔離級別并發(fā)性沒有RC好
     2、開發(fā)過程中,事務(wù)要盡量小,結(jié)束要快
     3、需要創(chuàng)建合適的索引來減少全表掃的概率
  
RR隔離級別的詭異現(xiàn)象,RC隔離級別比RR隔離級別的并發(fā)性好
 
1、隔離級別為RR 查看如下:
mysql> show variables like '%iso%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
2、創(chuàng)建測試表t_test4且插入4條記錄
create table t_test4(id int,name varchar(20));
INSERT INTO T_TEST4 VALUES(4,'wuhan');
 
4、開啟會話2,做插入語句,此時語句2直接掛起直到會話1提交或者等待INNODB超時時間自動回滾,
查看INNODB 超時時間(這里默認(rèn)是50秒):
mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |--默認(rèn)50秒
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| wait_timeout | 28800 |
+-----------------------------+----------+
12 rows in set (0.00 sec)
 
mysql> insert into t_test4 values(4,'zhej');
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
 
可見插入語句無法執(zhí)行成功。在測試中我們來分別觀察information_schema.innodb_trx,information_schema.innodb_locks,information_schema.innodb_lock_waits
 
數(shù)據(jù)如下:可見會話152,插入語句堵塞了,會話151,UPDATE語句鎖定了5行,但是我們只需要修改一行。
 
mysql> select * from information_schema.innodb_trx /G
*************************** 1. row ***************************
trx_id: 579737
trx_state: LOCK WAIT
trx_started: 2017-09-02 01:29:12
trx_requested_lock_id: 579737:121:3:1
trx_wait_started: 2017-09-02 01:29:12
trx_weight: 2
trx_mysql_thread_id: 152
trx_query: insert into t_test4 values(4,'zhej')
trx_operation_state: inserting
trx_tables_in_use: 1
trx_tables_locked: 1
trx_lock_structs: 2
trx_lock_memory_bytes: 360
trx_rows_locked: 1
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0
*************************** 2. row ***************************
trx_id: 579733
trx_state: RUNNING
trx_started: 2017-09-02 01:05:27
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 3
trx_mysql_thread_id: 151
trx_query: select * from information_schema.innodb_trx
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 2
trx_lock_memory_bytes: 360
trx_rows_locked: 5
trx_rows_modified: 1
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0;
測試到這里,大家應(yīng)該可以發(fā)現(xiàn)隔離級別在RR情況下,并發(fā)性不好,那原因是什么呢?
 
小結(jié)如下:1、開發(fā)過程中,事務(wù)要盡量小,結(jié)束要快
2、需要創(chuàng)建合適的索引來減少全表掃的概率
 
2、修改隔離級別,臨時性修改如下(如果永久性修改需要修改my.cnf文件)這里修改完了切記退出會話重新登錄。
mysql> set global tx_isolation='READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 长阳| 景谷| 治多县| 新建县| 获嘉县| 额济纳旗| 兴仁县| 金乡县| 乡城县| 察隅县| 古浪县| 化德县| 神木县| 西贡区| 郧西县| 团风县| 丹东市| 庐江县| 义乌市| 定兴县| 鸡西市| 松江区| 中阳县| 九龙坡区| 桂东县| 清徐县| 廉江市| 哈巴河县| 拉萨市| 广平县| 信宜市| 湛江市| 淄博市| 清远市| 桂平市| 石狮市| 本溪市| 浦东新区| 白银市| 白银市| 偏关县|