我以前从未见过这个问题。我遇到了问题,许多 PostgreSQL 进程被卡住了,所以我用 -KILL 杀死了它们...
当我尝试重新启动时,它说它无法重新启动,但守护进程继续运行并使用少量处理器进行大量 I/O。它是否正在尝试修复数据库?
我根本没有得到任何日志。我认为有一种方法可以增加日志输出......我会研究一下。此时,连接到服务器的套接字没有被创建,但服务器没有退出或发出任何错误/消息,所以我不知道发生了什么!?
如果有人有线索,我会很高兴听到。
我被要求为大量数据提供最佳 RDBMS 的建议。最大的表将包含 2TB 的数据。我自己最大的表只有400GB(mysql,性能很好)。
各个行将很短,没有 blob/等,只是一个查找表。
现在的 PostgreSQL 是否比 MySQL 性能更好?我可以向拥有这种数量级表的 DBA 询问他们的经验吗?Oracle 也可以考虑。可用的硬件可能是一个标准的 linux box,大约有 64G ram。
为了重新加载配置文件,我们向 postmaster 发送 SIGHUP 信号,然后将其传递给所有连接的后端。这就是为什么有些人将重新加载服务器称为“叹息”的原因。
由于重新加载配置文件是通过发送 SIGHUP 信号来实现的,因此我们可以使用 kill 命令为单个后端重新加载配置文件。
首先,使用 pg_stat_activity 找出后端的 pid。然后,从操作系统提示符处发出以下命令:
Run Code Online (Sandbox Code Playgroud)kill -SIGHUP pid
我看不懂粗体字。因为我们有很多后端 PID,如果我们杀死一个 PID,它如何从重新加载配置文件(postgresql.conf)中获取更改?
我正在管理一个包含几百万条记录的表,这些记录被实时插入。我的应用程序的一部分需要显示最后插入的 N 行,所以一开始我只是查询:
select id, logdate, content from measurements order by logdate DESC limit 500;
Run Code Online (Sandbox Code Playgroud)
几天后,我发现设置id为(对于此示例)更快10000000000 - extract(epoch from logdate),并将其用作PRIMARY KEY,所以
select id, date, content from measurements limit 500;
Run Code Online (Sandbox Code Playgroud)
自然会按 排序id,因此会产生最新的记录。
随着表的增长,它变得难以管理,所以我求助于分区。我按照文档说的那样做了:
CREATE TABLE measurement_y2007m11 (
CHECK ( logdate >= DATE '2007-11-01' AND logdate < DATE '2007-12-01' )
) INHERITS (measurement);
CREATE TABLE measurement_y2007m12 (
CHECK ( logdate >= DATE '2007-12-01' AND logdate < DATE '2008-01-01' )
) INHERITS (measurement); …Run Code Online (Sandbox Code Playgroud) 我们的软件产品目前在 Windows 7 上发布,使用 Postgres 8.3 作为其数据库。在一个繁忙的站点上,可能有 24 个自动化系统每分钟生成 100 行(x100 列),3-10 个人类客户查看大约 1000 行的子集——所有这些都是一次检索,增量更新每分钟左右查询 pk + 时间戳并检索相关的新行。有一些辅助表,但此表具有主要活动。
作为有限的多主系统的第一步(以帮助地理上分离的团队),我们实施了到 9.3 的升级。性能不是第一要务,因此并未真正对其进行分析。随着发布时间的到来,管理层决定暂时放弃 9.3,理由是担心可能会降低性能和缺乏测试资源。我确信性能问题很荒谬,所以我做了一些 PgBench 测试。
使用 9.3 的 pgbench,我交替连接到本地 8.3 和 9.3 安装(不同的端口号)。我已经在这个谷歌驱动器电子表格中捕获了我的结果,但总结是通常 8.3 击败 9.3。9.3 仅在原始插入性能方面获胜。
我们对 postgresql.conf 文件进行了一些自定义,我通常将其保留在 8.3 到 9.3 之间,我将列出非默认设置
max_connections = 1000
shared_buffers = 320MB
temp_buffers = 80MB
max_prepared_transactions = 50 #8.3 only, 9.3 left at 0 (not sure why)
max_fsm_pages = 204800 #8.3 only, 9.3 doesn't have setting
autovacuum_max_workers = 30
Run Code Online (Sandbox Code Playgroud)
那么,这只是进步的代价,还是我应该在 9.3 …
postgresql performance windows postgresql-8.3 postgresql-9.3
我无法使用 PostgreSQL 网站文章 23.3.3 中提到的 PITR 步骤将数据库恢复到以前的时间。使用在线备份恢复 ( http://www.postgresql.org/docs/8.1/static/backup-online.html#RECOVERY-TARGET-XID )
以下是我遵循的步骤:
我对位于数据文件夹中的 postgresql.conf 文件进行了以下更改:
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "C:\\archivedir\\%f"'
Run Code Online (Sandbox Code Playgroud)
我在 C 盘上创建了一个名为“archivedir”的文件夹
我对 recovery.conf 文件进行了以下更改:
recovery_target_time = '2014-02-05 11:45:00 CST'
primary_conninfo = 'host=localhost port=5433 user=owner password=xxxxx'
restore_command = 'copy "C:\\archivedir\\%f" "%p"'
Run Code Online (Sandbox Code Playgroud)停止了 postgresql 的服务和已删除的文件夹内容 pg_xlog
Recovery.conf 改为 recovery.done我通过删除表并尝试将数据库恢复到较早的状态进行了多次检查。有什么我想念的吗?
我想比较结果集中的日期
例子:
SELECT * FROM tbl WHERE foo=bar
Run Code Online (Sandbox Code Playgroud)
输出
id, datetime, name
1, 2014-01-01 18:13:45, test 1
2, 2014-01-01 19:01:32, test 2
3, 2014-01-01 20:34:44, test 3
4, 2014-01-03 04:45:22, test 4
Run Code Online (Sandbox Code Playgroud)
我希望能够区分每条记录之间的时间差异是小于还是大于前一条记录的 24 小时。
例子:
1, 2014-01-01 18:13:45, test 1 <-- first record since the previous record
2, 2014-01-01 19:01:32, test 2 <-- second record was less than 24 hours since the previous record
3, 2014-01-01 20:34:44, test 3 <-- third record was less than 24 hours since the …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中执行了两种类型的查询:
DELETE FROM tbl1 WHERE user_id = 1;
INSERT INTO tbl1 VALUES (...), (...), ...;
Run Code Online (Sandbox Code Playgroud)
和
UPDATE tbl2 WHERE id = 1 SET ...;
DELETE FROM tbl3 WHERE tbl2_id = 1;
INSERT INTO tbl3 VALUES (...), (...), ...;
DELETE FROM tbl4 WHERE tbl2_id = 1;
INSERT INTO tbl4 VALUES (...), (...), ...;
Run Code Online (Sandbox Code Playgroud)
我使用的 ORM 自动将事务隔离级别设置为REPEATABLE READ,我想知道它是否是最佳性能的正确选择。我的目标是只执行全部或不执行(来自上面的 2 个事务),我不关心任何读取...
那么在我的情况下哪种隔离级别最适合最佳性能?
我有一个emp表,其中包含架构和一些初始值,如下所示:
emp_id | name | last_name | role_id
--------+------+-----------+---------
1 | hell | bell | 1
2 | well | tell | 2
(2 rows)
Run Code Online (Sandbox Code Playgroud)
以及另一个role表,该emp表已在 上引用role_id。下面是role表格:
role_id | role_name
---------+-----------
1 | tech
2 | op
3 | dev
(3 rows)
Run Code Online (Sandbox Code Playgroud)
我只是在玩,写了下面的查询,我认为这没有多大意义。
SELECT emp.name, role.role_name, emp.emp_id
FROM emp
INNER JOIN role
ON emp.role_id = (
SELECT role_id from role WHERE role_name = 'tech'
);
Run Code Online (Sandbox Code Playgroud)
它工作并返回了这个结果:
name | role_name | …Run Code Online (Sandbox Code Playgroud) 我一直在试图弄清楚如何配置一个具有 64GB 内存(远大于数据库)的 PostgreSQL 实例,以及我是否应该选择更多内核或更快的内核。(假设通行证总数在 15- 20% 的差异)
一些额外的细节:最密集的 READ 将是通过大量 UNION 的 JSONB。本例中的操作系统是 CentOS 6。
postgresql ×10
performance ×2
aggregate ×1
blob ×1
date ×1
index ×1
mysql ×1
oracle ×1
partitioning ×1
union ×1
windows ×1