我很惊讶这个还没有发布.你知道博士后有什么有趣的技巧吗?模糊的配置选项和zoom /性能技巧尤其受欢迎.

我相信我们可以击败相应的MySQL thread条 comments 中的9条:)

推荐答案

由于Postgres比MySQL理智得多,所以没有那么多"诀窍"可供报告;-)

manual有一些很好的performance条建议.

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

  • 确保已打开自动真空吸尘器
  • 确保您已经判断了postgres.conf(有效缓存大小、共享缓冲区、工作内存.有很多选项可供调整).
  • 使用pgpool或pgbouncer将"真正的"数据库连接保持在最低限度
  • 了解EXPLAIN和解释分析的工作原理.学会阅读输出.
  • 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相关问答推荐

MongoDB事务,回调API方法

在Prisma中建立关系

MongoDB 中的 OVER PARTITION 类似功能

如何让 Google Drive Electron 表格像 MySQL 数据库一样工作吗?

add_index 到数据模型 - Ruby on Rails 教程

数据库设计:文件路径的首选字段长度

Android Room持久性库@Update不起作用

SQL Select 用字符串替换整数

多少个外键才算太多?

在 Oracle 的 Check 语句中使用子查询

每个请求可以多次查询 MongoDB 吗?

Django:如何以线程安全的方式执行 get_or_create()?

如何删除 SQLite 中具有多个 where 参数的行?

从 Java 创建 MySQL 数据库

在 SQL Server 2008 中区分两个表架构的最简单方法是什么?

Django:检测数据库后端

我应该在哪里存储外键?

将 NULL 插入 MySQL 时间戳

做或不做:将图像存储在数据库中

Guice、JDBC 和管理数据库连接