日期:2014-05-16  浏览次数:20424 次

GPDB管理员笔记(二)管理数据
并发访问控制
与事务型数据库系统通过锁机制来控制并发访问的机制不同,GPDB(与PostgreSQL
一样)使用多版本控制(Multiversion Concurrency Control/MVCC)保证数据一致性。这
意味着在查询数据库时,每个事务看到的只是数据的快照,其确保当前的事务不会
看到其他事务在相同记录上的修改。据此为数据库的每个事务提供事务隔离。
MVCC以避免给数据库事务显式锁定的方式,最大化减少锁争用以确保多用户环境
下的性能。在并发控制方面,使用MVCC而不是使用锁机制的最大优势是,MVCC对
查询(读)的锁与写的锁不存在冲突,并且读与写之间从不互相阻塞。

空间回收
libo=# vacuum test;
VACUUM
VACUUM命令还会收集表级别的统计信息,如记录数、占用磁盘页面数,所以在
装载数据之后对全表执行VACUUM是有必要的,这同样适用AO表


查询分析:
libo=# explain select * from t where id=1;
                                 QUERY PLAN                                
----------------------------------------------------------------------------
Gather Motion 1:1  (slice1; segments: 1)  (cost=0.00..1.01 rows=1 width=8)
   ->  Seq Scan on t  (cost=0.00..1.01 rows=1 width=8)
         Filter: id = 1
(3 rows)

libo=# vacuum t;
VACUUM
libo=# explain select * from t where id=1;
                                 QUERY PLAN                                
----------------------------------------------------------------------------
Gather Motion 1:1  (slice1; segments: 1)  (cost=0.00..3.04 rows=3 width=8)
   ->  Seq Scan on t  (cost=0.00..3.04 rows=1 width=8)
         Filter: id = 1
(3 rows)

libo=#

查询计划分析
若一个查询表现出很差的性能,查看查询计划可能有助于找到问题点。下面是
一些需要查看的东西:
  计划中是否有一个操作花费时间超长?查询计划中是否有一个操作花费
了大部分的处理时间?例如,如果一个索引扫描比预期的时间超长,也许
该索引已经处于过期状态,需要考虑重建索引。还可临时尝试使用enable_
之类的参数查看是否可以强制选择不同的计划(可能会更好的效果),这些