十七. 服务器配置与数据库监控
17.1 服务器配置
1、服务器配置的文件
在数据库集群中,有3个配置文件,分别是:postgresql.conf,pg_hba.conf和pg_ident.conf。其中postgresql.conf为服务器主要的配置文件,pg_hba.conf是客户端认证配置文件,pg_ident.conf用来配置哪些操作系统用户可以映射为数据库用户。
2、连接与认证
3、资源消耗
服务器的运行会消耗一定的资源,通过设置服务器的参数,可以提示服务器的性能。包括内存、自由空间映射、内核资源使用、基于开销的清理延迟和后端写进程。
自由空间映射用于跟踪数据库中未使用空间的位置。不在映射表里面的自由空间是不能重复使用的,通过合理地设置,可以提高磁盘的利用率。
在VACUUM和ANALYZE命令执行过程中,系统维护一个内部的记数器,跟踪所执行的各种I/O操作的开销。
在PostgreSQL中,有一个独立的服务器进程,叫做后端写进程,它唯一的功能就是发出写“脏”共享缓冲区的命令。这么做的目的是让持有用户查询的服务器进程应该很少或者几乎不等待写动作的发生,因为后端写进程会做这件事情。这样的安排同样也减少了检查点造成的性能下降。
4、预写式日志
预写式日志的设置主要包括对预写式日志的基本设置、检查点设置和归档设置等。
5、查询规划
在PostgreSQL中,查询优化器选择查询规划时,有时候并不是最优的方法。数据库管理员可以通过设置配置参数,强制优化器选择一个更好的查询规划。
6、错误报告和日志
数据库管理员也许想知道错误报告和日志记录在什么地方,什么时间开始记录的和记录了什么等等。
7、运行时统计
在PostgreSQL中,如果启用了统计搜集,那么生成的数据可以通过pg_stat和pg_statio系统视图查看服务器的统计信息。
8、自动清理
数据库管理员可以通过设置自动清理的缺省行为,从而提高工作效率。
9、客户端连接缺省
数据库管理员可以设置客户端连接时的语句行为、区域和格式化等。
10、锁管理
在数据库系统运行的过程中,会产生各种各样的锁。管理员可以通过设置锁管理的相关参数,从而提高服务器的高可用性。
11、版本和平台兼容性
PostgreSQL有很多版本,管理员可以设置各个版本之间兼容性。另外,PostgreSQL可以在不同的平台上安装,管理员可以设置各个平台之间兼容性。
17.2 监控数据库的活动
1、配置统计收集器
PostgreSQL的统计收集器是一个支持收集和汇报服务器活跃性信息的子系统。目前,这个收集器可以给出对表和索引的访问计数,包括磁盘块的数量和独立行的项。PostgreSQL 还可以判断当前其它服务器进程正在执行的命令是什么。这个特性独立于统计收集器子系统,可以单独地被启用或禁用。
因为统计收集给查询处理增加了一些开销,所以可以启用或禁用统计收集。这是由配置参数控制的,通常在postgresql.conf 里设置。
2、查看收集到的统计信息
PostgreSQL提供了预定义的视图用于显示统计收集的结果。
在使用统计观察当前系统活跃性的时候,必须意识到这些信息并不是实时更新的。每个独立的服务器进程只是在准备进入空闲状态的时候才向收集器传送新的块和行访问计数;因此正在处理的查询或者事务并不影响显示出来的总数。
另外一个需要着重指出的是,在请求服务器进程显示任何这些统计信息的时候,它首先抓取收集器进程发出的最新报 告,然后就拿这些数据作为所有统计视图和函数的快照,直到它当前的事务结束。因此统计信息在当前事务的持续期间内不会改变。
另外,可以使用底层的统计函数制作自定义的视图。这些底层统计访问函数和标准视图里使用的是一样的。
17.3 监控磁盘的使用
1、监控磁盘的使用量
-
使用磁盘空间函数
-
使用VACUUM信息
VACUUM命令回收已删除行占据的存储空间。在PostgreSQL的操作中,那些已经被删除或者更新过的行,并没有从它们所属的表中物理删除,这些数据在完成VACUUM之前它们仍然存在。因此有必要周期地运行VACUUM,特别是在经常更新的表上。VACUUM命令可以选择分析一个特定的数据表,如果没有指定数据表,VACUUM处理当前数据库里每个表。具体语法格式如下。VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
2、磁盘满导致的失效
一个数据库管理员最重要的磁盘监控任务就是确保磁盘不会写满。磁盘写满可能不会导致数据的丢失,但它肯定会导致系统进一步使用的问题。如果WAL文件也在同一个磁盘上(缺省配置就是这样),则会发生数据库服务器恐慌,并且停止运行。如果不能通过删除其它东西来释放磁盘空间,那么可以通过使用表空间把一些数据库文件移动到其它文件系统上去。
PostgreSQL 里的表空间允许数据库管理员在文件系统里定义那些代表数据库对象的文件存放位置。一旦创建了表空间,那么就可以在创建数据库对象的时候引用它。
通过使用表空间,管理员可以控制一个PostgreSQL安装的磁盘布局。