dml语句卡住原因排查及failover手动删除

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

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

登录后才能评论