什么时候应该清理数据库,什么时候分析?
When should one vacuum a database, and when analyze?
我只是想检查一下我对这两件事的理解是否正确。如果相关,我正在使用 Postgres 9.4。
我认为在从文件系统中回收 space 时,应该 vacuum 一个数据库,例如在删除 tables 或大量行后定期。
我认为应该在创建新索引后,或者(定期地)在 table 中添加或删除大量行后,分析 数据库,以便查询规划器可以做出很好的调用。
听起来对吗?
正确。
我要补充一点,您可以将 postgresql.conf
文件中的 default_statistics_target
参数(默认为 100)的值更改为更大的数字,之后,您应该重新启动服务器并 运行 analyze
以获得更准确的统计数据。
vacuum analyze;
收集统计数据,并且应该 运行 尽可能多地收集动态数据(尤其是批量插入)。它不会独占锁定对象。它加载系统,但值得。它不会减少 table 的大小,但会标记分散的释放空间(例如,已删除的行)以供重用。
vacuum full;
通过创建它的副本并切换到它来重组 table。此真空需要额外的 space 到 运行,但会回收所有未使用的 space 对象。因此它需要对对象进行独占锁定(其他会话应等待它完成)。应该 运行 与数据更改(删除、更新)一样频繁,以及您可以负担得起其他人等待的时间。
两者在动态数据库
上都非常important
我只是想检查一下我对这两件事的理解是否正确。如果相关,我正在使用 Postgres 9.4。
我认为在从文件系统中回收 space 时,应该 vacuum 一个数据库,例如在删除 tables 或大量行后定期。
我认为应该在创建新索引后,或者(定期地)在 table 中添加或删除大量行后,分析 数据库,以便查询规划器可以做出很好的调用。
听起来对吗?
正确。
我要补充一点,您可以将 postgresql.conf
文件中的 default_statistics_target
参数(默认为 100)的值更改为更大的数字,之后,您应该重新启动服务器并 运行 analyze
以获得更准确的统计数据。
vacuum analyze;
收集统计数据,并且应该 运行 尽可能多地收集动态数据(尤其是批量插入)。它不会独占锁定对象。它加载系统,但值得。它不会减少 table 的大小,但会标记分散的释放空间(例如,已删除的行)以供重用。
vacuum full;
通过创建它的副本并切换到它来重组 table。此真空需要额外的 space 到 运行,但会回收所有未使用的 space 对象。因此它需要对对象进行独占锁定(其他会话应等待它完成)。应该 运行 与数据更改(删除、更新)一样频繁,以及您可以负担得起其他人等待的时间。
两者在动态数据库
上都非常important