成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

GreatSQL 中 Insert 慢是什么情況?

數據庫 其他數據庫
導致此次問題的原因是 GAP 鎖阻塞了 INSERT_INTENTION 鎖;因此建議客戶在執行 update 操作時,where 條件用主鍵列,這樣可以避免加 GAP 鎖。

背景概述

客戶反映,業務上某張表的 insert 操作速度很慢,單條 insert 語句的最大執行時間超過了 5 秒。在收到客戶問題后,我們仔細檢查了數據庫狀態以及主機的負載情況,發現目前一切正常,并沒有發現數據庫故障或主機負載過高導致 insert 操作變慢的問題。

因此,我們分析了慢日志,希望從中找出問題。經過分析,發現這條插入語句的query_time和lock_time幾乎相同,因此懷疑是由于鎖等待導致插入操作變慢。隨后,我們捕獲了通用日志,幾乎同一時間這張表有update,insert操作,發現由于更新操作阻塞了插入操作,導致插入速度下降的問題。這個更新操作所在的事務包含了多條 SQL 語句,因此如果該事務執行時間較長,就會阻塞插入操作,導致插入操作的執行時間延長。

問題復現

本次測試基于 GreatSQL 8.0.32-25,隔離級別為 RR

2.1 創建測試表

greatsql> CREATE TABLE `t11` (
 `id` int NOT NULL,
 `c1` int DEFAULT NULL,
 `c2` int DEFAULT NULL,
 `c3` int DEFAULT NULL,
 `c4` int DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `c2` (`c2`,`c3`),
 KEY `c4` (`c4`)
);

greatsql> insert into t11 values (1,1,1,1,1),(2,2,2,2,2),(3,3,3,3,3),(5,5,5,5,5);

2.2 事務執行順序

時間

事務1

事務2

T1

BEGIN;

BEGIN;

T2

update t10 set c2=20 where c4=2;


T3


insert into t10 values (6,2,2,2,2);

T4


-- hang住,處于鎖等待

T5

commit;

-- 鎖等待結束

T6


commit;

2.3 事務1執行

greatsql> begin;
greatsql> update t11 set c2=20 where c4=2;

查看加鎖情況:

greatsql> select THREAD_ID,EVENT_ID,ENGINE_LOCK_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks;
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+---------------+-------------+-----------+
| THREAD_ID | EVENT_ID | ENGINE_LOCK_ID               | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE   | LOCK_STATUS | LOCK_DATA |
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+---------------+-------------+-----------+
|     55 |    20 | 140531661278568:44172:140531678523168   | test      | t11     | NULL    | TABLE   | IX       | GRANTED   | NULL    |
|     55 |    20 | 140531661278568:43110:6:3:140531678129184 | test      | t11     | c4     | RECORD   | X       | GRANTED   | 2, 2    |
|     55 |    20 | 140531661278568:43110:4:3:140531678129528 | test      | t11     | PRIMARY   | RECORD   | X,REC_NOT_GAP | GRANTED   | 2     |
|     55 |    20 | 140531661278568:43110:6:4:140531678129872 | test      | t11     | c4     | RECORD   | X,GAP     | GRANTED   | 3, 3    |
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+---------------+-------------+-----------+
4 rows in set (0.01 sec)

可以看到此時給【3, 3】這條數據加加了X,GAP鎖

2.4 事務2執行

greatsql> begin;
greatsql> insert into t11 values (6,2,2,2,2);

查看加鎖情況:

greatsql> select THREAD_ID,EVENT_ID,ENGINE_LOCK_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks;
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+------------------------+-------------+-----------+
| THREAD_ID | EVENT_ID | ENGINE_LOCK_ID               | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE        | LOCK_STATUS | LOCK_DATA |
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+------------------------+-------------+-----------+
|     56 |    14 | 140531661279416:44172:140531678523936   | test      | t11     | NULL    | TABLE   | IX           | GRANTED   | NULL    |
|     56 |    14 | 140531661279416:43110:6:4:140531678132256 | test      | t11     | c4     | RECORD   | X,GAP,INSERT_INTENTION | WAITING   | 3, 3    |
|     55 |    20 | 140531661278568:44172:140531678523168   | test      | t11     | NULL    | TABLE   | IX           | GRANTED   | NULL    |
|     55 |    20 | 140531661278568:43110:6:3:140531678129184 | test      | t11     | c4     | RECORD   | X            | GRANTED   | 2, 2    |
|     55 |    20 | 140531661278568:43110:4:3:140531678129528 | test      | t11     | PRIMARY   | RECORD   | X,REC_NOT_GAP      | GRANTED   | 2     |
|     55 |    20 | 140531661278568:43110:6:4:140531678129872 | test      | t11     | c4     | RECORD   | X,GAP          | GRANTED   | 3, 3    |
+-----------+----------+-------------------------------------------+---------------+-------------+------------+-----------+------------------------+-------------+-----------+
6 rows in set (0.00 sec)

greatsql> select REQUESTING_THREAD_ID,REQUESTING_EVENT_ID,REQUESTING_ENGINE_LOCK_ID,BLOCKING_THREAD_ID,BLOCKING_EVENT_ID,BLOCKING_ENGINE_LOCK_ID from performance_schema.data_lock_waits;
+----------------------+---------------------+-------------------------------------------+--------------------+-------------------+-------------------------------------------+
| REQUESTING_THREAD_ID | REQUESTING_EVENT_ID | REQUESTING_ENGINE_LOCK_ID         | BLOCKING_THREAD_ID | BLOCKING_EVENT_ID | BLOCKING_ENGINE_LOCK_ID          |
+----------------------+---------------------+-------------------------------------------+--------------------+-------------------+-------------------------------------------+
|          56 |          14 | 140531661279416:43110:6:4:140531678132256 |         55 |         20 | 140531661278568:43110:6:4:140531678129872 |
+----------------------+---------------------+-------------------------------------------+--------------------+-------------------+-------------------------------------------+
1 row in set (0.00 sec)

通過上面2張表,可以看到 X,GAP鎖 阻塞了 X,GAP,INSERT_INTENTION 鎖;

2.5 結論

此次Insert慢的原因就是Update語句所在的事務執行時間較長,Update語句產生了GAP鎖;

Insert語句在執行時此Update語句所在事務還沒有執行完成,因此Insert處于鎖等待階段,待Update所在事務提交后Insert才提交;

總結

導致此次問題的原因是 GAP 鎖阻塞了 INSERT_INTENTION 鎖;因此建議客戶在執行 update 操作時,where 條件用主鍵列,這樣可以避免加 GAP 鎖。

責任編輯:武曉燕 來源: GreatSQL社區
相關推薦

2012-04-25 09:24:40

Android

2021-04-13 13:18:11

數字貨幣加密貨幣區塊鏈

2015-06-29 14:23:13

JavaC++慢很多

2024-11-20 08:00:00

死鎖多線程編程

2011-12-11 11:51:28

2021-11-08 15:17:15

變量Defer 失效

2023-11-23 23:52:06

options請求瀏覽器

2021-06-04 09:17:13

JavaScriptBoolean函數

2015-11-23 14:29:16

流量提速降費運營商

2013-09-04 15:17:38

2022-09-14 19:50:22

事務場景流程

2011-12-28 15:24:21

2021-04-23 23:19:26

加密貨幣穩定幣比特幣

2022-06-27 07:23:44

MySQL常量優化

2013-09-12 10:41:39

VDI部署

2021-09-14 07:26:25

雪花算法ID

2013-07-29 14:50:43

API

2025-05-26 08:15:00

Go開發指針

2010-04-14 17:46:10

Oracle數據庫

2020-09-24 09:43:59

Http協議options請求
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级成人 | 亚洲一区不卡 | 成人在线视频免费播放 | 成人免费激情视频 | 日韩亚洲一区二区 | 91精品国产99| 日韩视频在线免费观看 | 男人天堂视频在线观看 | 岛国一区| 中文字幕成人av | 欧美网站一区 | 在线免费国产视频 | 欧美精品成人一区二区三区四区 | 亚洲国产免费 | 九九热在线免费观看 | www.亚洲一区二区 | 精品一区二区三区四区外站 | 亚洲天天干 | www.久久精品视频 | 亚洲美女一区 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 久久久亚洲| 久国产视频 | jlzzjlzz国产精品久久 | 青青艹在线视频 | 日韩中文字幕 | 老司机深夜福利网站 | 亚洲欧美一区二区三区视频 | 午夜精品久久久久久不卡欧美一级 | 中文字幕在线看第二 | av片免费观看 | 伊人网综合在线观看 | 九九免费观看视频 | 午夜网 | 久久综合久色欧美综合狠狠 | 911精品美国片911久久久 | 欧美二区在线 | 九九爱这里只有精品 | 福利视频一区二区 | 国产色| 久久综合爱 |