database - PostgreSQL 的隐藏特性

标签 database postgresql rdbms postgresql-9.3

<分区>

我很惊讶这还没有发布。您知道 Postgres 中任何有趣的技巧吗?晦涩的配置选项和缩放/性能技巧特别受欢迎。

我相信我们可以击败相应 MySQL thread 上的 9 条评论:)

最佳答案

因为 postgres 比 MySQL 更理智,所以没有那么多“技巧”可以报告;-)

manual有一些不错的performance提示。

其他一些与性能相关的事情要记住:

  • 确保 autovacuum 已打开
  • 确保您已经检查了您的 postgres.conf(有效缓存大小、共享缓冲区、工作内存……那里有很多选项需要调整)。
  • 使用 pgpool 或 pgbouncer将您的“真实”数据库连接保持在最低限度
  • 了解如何 EXPLAIN EXPLAIN ANALYZE 有效。学习阅读输出。
  • CLUSTER根据索引对磁盘上的数据进行排序。可以显着提高大型(大部分)只读表的性能。集群是一次性操作:当随后更新表时,更改不会集群。

这里有一些我发现有用的东西,它们本身与配置或性能无关。

查看当前发生的情况:

select * from pg_stat_activity;

搜索杂项函数:

select * from pg_proc WHERE proname ~* '^pg_.*'

查找数据库的大小:

select pg_database_size('postgres');
select pg_size_pretty(pg_database_size('postgres'));

查找所有数据库的大小:

select datname, pg_size_pretty(pg_database_size(datname)) as size
  from pg_database;

查找表和索引的大小:

select pg_size_pretty(pg_relation_size('public.customer'));

或者,列出所有表和索引(可能更容易查看):

select schemaname, relname,
    pg_size_pretty(pg_relation_size(schemaname || '.' || relname)) as size
  from (select schemaname, relname, 'table' as type
          from pg_stat_user_tables
        union all
        select schemaname, relname, 'index' as type
          from pg_stat_user_indexes) x;

哦,你还可以嵌套事务,回滚部分事务++

test=# begin;
BEGIN
test=# select count(*) from customer where name='test';
 count 
-------
     0
(1 row)
test=# insert into customer (name) values ('test');
INSERT 0 1
test=# savepoint foo;
SAVEPOINT
test=# update customer set name='john';
UPDATE 3
test=# rollback to savepoint foo;
ROLLBACK
test=# commit;
COMMIT
test=# select count(*) from customer where name='test';
 count 
-------
     1
(1 row)

关于database - PostgreSQL 的隐藏特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/761327/

相关文章:

java - 数据库在等待空闲可用连接时超时

php - 将 .sql 文件导入到服务器上的数据库中

performance - PostgreSQL-管理用户的联系人-单向或双向关系更好吗?

database - 功能到关系的映射比对象到关系更容易吗?

sql - Average 函数在关系数据库中如何工作?

java - 在 Java 应用程序中打开和返回数据库连接的最佳方式?

sql - sybase更新越来越慢

postgresql - 每个 heroku postgres 计划是否可以有多个数据库?

node.js - 如何在 Postgres/node 中正确转义原始 SQL 查询 (plainto_tsquery)

sql - 循环数据库关系。好,坏,异常(exception)?