管理数据库

为了查看存在的数据库

select datname from pg_database;

创建表空间

ceate tablespace fastspace location '/mnt/ada1/postgresql/data';

一旦表空间被创建,可以被很多数据库使用。

查看所有表空间

select spcname from pg_tablespace;

vacuuming基础

vacuum命令要处理每个表为了下面的原因

1为了恢复或重用被更新或被删除行的磁盘空间

2更新被查询计划器使用的数据统计信息

3更新可视化映射,加速index-only scans

4阻止由于事务id wraparound,或multixact id wraparound的老数据丢失

有2个类型的vacuum:标准vacuum和vacuum full。vacuum full可以回收更多的磁盘空间,但是运行的更慢。标准的vaccum可以并行运行。vacuum full要求在表上的排他锁。因此不能并行。一般的,管理员应该使用标准vacuum,避免使用vacuum full。

恢复磁盘空间

在postgresql中,update或delete行不会马上移除旧版本的行。这个方法为了获取mvcc的好处是很必要的。当行仍然潜在的对别的事务使用的时候,行的版本必须可用,不能被删除。但是最终,过时的或是删除的行是不会被任何的事务使用了,它占用的空间一定要回收重用,为了避免磁盘无限制的增长,要使用vacuum。

标准的vacuum移除表和索引中的死行版本来让新行继续使用,但是,它不会讲空间返回给操作系统,除非是在表的最后一个或多个页都空闲了,并且获取排他锁很容易。相反的,vacuum full通过写没有死空间的表到一个全新的表版本中,这个最小化了表,但是可能会花费很长的时间。同时为了拷贝新的表,需要额外的空间。

更新统计信息

PostgreSQL也是为了产生好的额执行计划要依赖表的统计信息。这些统计信息通过analyze命令收集,可以单独使用,也可以作为vacuum的选项使用,当表的内容改变非常大的时候会自动执行analyze命令。analyze使用随机采样,而不是对每一个行。所以是个快速的操作。

更新可视化映射

vacuum对每个表维护了一个可视化映射来跟踪包含对别的活动事务可见的数组的页,这有2个原因,第一个,vacuum可以再下次运行的时候跳过这些页,因为没有什么可以清楚了,第二,PostgreSQL可以只查询索引就返回数据,不用去涉及底层的表。因为PostgreSQL索引不包含数组可视化信息,一个普通的索引扫描对于每个匹配的索引条目获取对的数组,来检查是否对当前事务可视。一个index-only scan,最开始检查可视映射,如果他知道页上的所有数组都可视,那么heap获取可以被跳过。在大数据集上可以防止磁盘访问。可视化映射比堆小很多,所以即使堆很大的时候,它也能被缓存。

防止事务id包裹失败

PostgreSQL的mvcc事务依赖与能对比事务id号,一个行的版本有事务号大于当前事务id的是未来版本,不能改被当前版本看到,但是因为id有大小限制。

autovacuum进程

PostgreSQL有个叫autovacuum的特征,能够自动执行vacuum和analyze命令,当被启用的时候,autovacuum检查有大量插入,更新和删除的表。在默认的情况下,autovacuuming被启用了,相关的参数也都配置合适了。

autovacumm守护进程其实包含了很多的进程,有一个持续的守护进程叫 autovacuum launcher,控制着为所有数据库启动autovacuum worker进程,launcher将会按时间分发任务,尝试在每个数据库上每autovacuum_naptime秒启动一个worker 因此,如果有n个数据库,一个新的worker将会每autovacuum_naptime/n秒启动,log_autovacuum_min_duration可以用来监控autovacuum活动

日志文件维护

通常将日志文件放到一个地方,而不是放到/dev/null是一个好主意,一个方法是发送server标准输出到一个日志旋转程序,有一个内置的日志旋转工具,可以通过设置配置参数来使用,logging_collector设置成true.另外你可能喜欢选择外部的日志旋转程序,例如使用rotatelogs工具,为了使用这个,可以按下面的方式

pg_ctl start |rotatelogs /var/log/pgsql_log 86400

另外的一个方式是发送日志到syslog,让syslog处理文件rotation,为了做这个,设置参数log_destination为syslog。然后当你想强制写一个新日志文件的时候,发送一个sighup信号给syslog。在很多系统上sysLog不是很可靠,尤其是有大量日志信息的时候。它会截断或删除信息。

pgbadger是一个外部工程来精确的分析日志,check_postgres提供了nagios告警,当日志文件中出现重要的信息的时候。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值