l 执行alter table,drop database等操作时,有时会出现卡住的情况,show processlist查看sql状态,如果是checking permissions的状态,大概率是被锁阻塞住了。比如这样:
gbase> show processlist;
+——+—————–+——————-+——+———+——+————————+——————-+
| Id | User | Host | db | Command | Time | State | Info |
+——+—————–+——————-+——+———+——+————————+——————-+
| 1 | event_scheduler | localhost | NULL | Daemon | 5982 | Waiting for event lock | NULL |
| 832 | root | localhost | NULL | Query | 5340 | checking permissions | drop database abc |
| 1688 | gbase | 10.10.55.12:59078 | NULL | Sleep | 1143 | | NULL |
| 1944 | gbase | 10.10.55.13:40818 | NULL | Sleep | 967 | | NULL |
| 2066 | gbase | 10.10.55.14:34950 | NULL | Sleep | 872 | | NULL |
| 8321 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+——+—————–+——————-+——+———+——+————————+——————-+
[gbase@node11 ~]$ gcadmin showlock
+=====================================================================================================+
| GCLUSTER LOCK |
+=====================================================================================================+
+———————————————+———–+—————-+————–+——+—-+
| Lock name | owner | content | create time |locked|type|
+———————————————+———–+—————-+————–+——+—-+
| gc-event-lock |10.10.55.14| global master |20230921133450| TRUE | E |
+———————————————+———–+—————-+————–+——+—-+
| gc-event-lock |10.10.55.13| global master |20230921133626|FALSE | E |
+———————————————+———–+—————-+————–+——+—-+
| gc-event-lock |10.10.55.12| global master |20230921133922|FALSE | E |
+———————————————+———–+—————-+————–+——+—-+
| gc-event-lock |10.10.55.11| global master |20230921133730|FALSE | E |
+———————————————+———–+—————-+————–+——+—-+
| vc00000.gbase.db_lock |10.10.55.11|832(LWP:2072152)|20230921134810| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
| vc00000.hashmap_lock |10.10.55.11|832(LWP:2072152)|20230921134810| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
|vc00001.abc.bd_00dt_idpsa_dp_arg_h1.meta_lock|10.10.55.11|175(LWP:2055728)|20230921111259| TRUE | E |
+———————————————+———–+—————-+————–+——+—-+
| vc00001.abc.db_lock |10.10.55.11|175(LWP:2055728)|20230921111259| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
| vc00001.abc.db_lock |10.10.55.11|832(LWP:2072152)|20230921134810|FALSE | E |
+———————————————+———–+—————-+————–+——+—-+
| vc00001.abc.table_space_lock |10.10.55.11|175(LWP:2055728)|20230921111259| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
| vc00001.hashmap_lock |10.10.55.11|175(LWP:2055728)|20230921111259| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
| vc00001.hashmap_lock |10.10.55.11|832(LWP:2072152)|20230921134810| TRUE | S |
+———————————————+———–+—————-+————–+——+—-+
| 112 | abc | bd_00dt_i | 121 | ddl | 20230921133920 | 2 | 10.10.55.11 | 10.10.55.14 | 145 |
| | | dpsa_dp_a | | | | | | | |
| | | rg_h1 | | | | | | | |
+———–+————+———–+————+———–+——————+——-+——————–+——————–+—————–+
l 如果这个锁产生的原因也不明确,可以去排查一下failover的情况,多半是该库下表的failover记录长时间无法恢复导致的阻塞。
[gbase@node14 ~]$ gcadmin showfailover
+====================================================================================================================================================+
| GCLUSTER FAILOVER |
+====================================================================================================================================================+
+———–+————+———–+————+———–+——————+——-+——————–+——————–+—————–+
| commit id | database | table | scn | type | create time | state | original node | takeover node | takeover number |
+———–+————+———–+————+———–+——————+——-+——————–+——————–+—————–+
| 112 | abc | bd_00dt_i | 121 | ddl | 20230921133920 | 2 | 10.10.55.11 | 10.10.55.14 | 145 |
| | | dpsa_dp_a | | | | | | | |
| | | rg_h1 | | | | | | | |
+———–+————+———–+————+———–+——————+——-+——————–+——————–+—————–+
l 此种情况需运维或者用户介入,判定是否可以手工删除此failover;手工删除failover的方法:
[gbase@node14 ~]$ python
Python 2.7.18 (default, Jun 10 2022, 11:23:11)
[GCC 7.3.0] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import gcware
>>> gcware.deletefailoverforce(112) #–括号里写的是failover的commit id
0
>>>
[gbase@node14 ~]$ gcadmin showfailover
gcadmin showfailover: no gcluster failover information now
Failover被删除,被卡住的sql得以进行
gbase> drop database abc;
Query OK, 79 rows affected, 3 warnings (Elapsed: 01:54:02.33)
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/317937.html