声明
- meta_data表的分布规则是复制分布
- 查看锁的SQL
SELECT
locktype,
relation :: regclass AS rel,
page || ',' || tuple AS ctid,
virtualxid AS vxid,
transactionid AS xid,
virtualtransaction AS vxid2,
pid,
MODE,
GRANTED
FROM
pg_locks;
复制分布表加锁实验
T1 | T2 |
---|---|
begin | begin |
select * from meta_data where id=‘wh_test1’ for UPDATE; (正常获取数据) | select * from meta_data where id=‘wh_test1’ for UPDATE;(正常获取数据,本应该阻塞) |
EXPLAIN ANALYZE UPDATE meta_data set “timestamp”=‘2020-01-09 20:20:20.529’ where id=‘wh_test1’;(阻塞) | |
上面的update成功 | rollback |
rollback |
发现coordinator分配任务是远程在不同的datanode执行的,那么锁加在了不同的postgresql里,所以不能阻塞。
非复制分布表加锁实验
T1 | T2 |
---|---|
begin | begin |
EXPLAIN ANALYZE select * from wfs_test where id=‘3080417’ for UPDATE; (正常获取数据) | EXPLAIN ANALYZE select * from wfs_test where id=‘3080417’ for UPDATE; (阻塞) |
rollback | select成功 |
" " | rollback |
和以前的认知一样,正常地阻塞住了。