这一节提供了Greenplum数据库中有关操纵数据和并发访问的信息。这个主题包括下列小标题:
关于Greenplum数据库中的并发控制
插入行
更新现有行
删除行
使用事务
清理数据库
关于Greenplum数据库中的并发控制
Greenplum数据库和PostgreSQL不为并发控制使用锁。它们使用一种多版本模型来维护数据一致性,即多版本并发控制(MVCC)。MVCC为每一个数据库会话实现了事务隔离,并且每一个查询事务会看到一个数据的快照。这保证该事务会看到一致的不受其他并发事务影响的数据。
因为MVCC不会为并发控制使用显式锁,锁竞争被最小化并且Greenplum数据库在多用户环境中维持了合理的性能。为查询(读取)数据获得的锁不与为写数据获得的锁冲突。
Greenplum数据库提供了多种锁模式来控制对表中数据的并发访问。大部分Greenplum数据库的SQL命令自动获取适当的锁来确保在命令执行期间被引用的表不会被删除或者被以不兼容的方式被修改。对于不能轻易适应于MVCC行为的应用,可以使用LOCK命令来获取显式锁。不过,MVCC的正确使用通常能提供更好的性能。
锁模式相关的SQL命令冲突模式ACCESS SHARESELECTACCESS EXCLUSIVE
ROW SHARESELECT FOR SHARE、SELECT FOR UPDATEEXCLUSIVE、ACCESS EXCLUSIVE
ROW EXCLUSIVEINSERT、COPYSHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS EXCLUSIVE
SHARE UPDATE EXCLUSIVEVACUUM(不带FULL)、ANALYZESHARE UPDATE EXCLUSIVE、SHARE、SHARE ROW EXCLUSIVE、EXCLUSIVE、ACCESS