在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。
greenplum数据库,基本两种锁:
1.GP查看锁
- -- 通过表名,获取该表是否被锁,然后按照lorpid字段进行升序排序
- select * from gp_toolkit.gp_locks_on_relation t where t.lorrelname = '#{table_name}' order by lorpid;
多个事务同时在数据库中运行时,查看GP库所有表锁
- SELECT
- l.pid,
- a.datname AS database,
- c.relname AS table,
- l.mode AS lock_mode,
- l.granted AS granted,
- a.usename AS username,
- a.query AS query
- FROM
- pg_locks l
- JOIN
- pg_stat_activity a ON l.pid = a.pid
- JOIN
- pg_class c ON l.relation = c.oid
2.解锁
- -- 按照lorpid,自上而下,进行删除进程,将排他锁之前的共享锁停止后,排他锁可正常运行。
- select pg_cancel_backend('#{pid}')
- /*
- select pg_terminate_backend(#{pid})
- */
参考文章:
https://www.jianshu.com/p/763eb183a291