小编Nie*_*ian的帖子

如何针对更新(软件和硬件)的大量 I/O 优化数据库

情况 我有一个 postgresql 9.2 数据库,它一直都在大量更新。因此系统受 I/O 限制,我目前正在考虑进行另一次升级,我只需要一些关于从哪里开始改进的指导。

以下是过去 3 个月情况的图片:

在此处输入图片说明

如您所见,更新操作占磁盘利用率的大部分。这是另一张更详细的 3 小时窗口中情况的图:

在此处输入图片说明

如您所见,峰值写入速率约为 20MB/s

软件 服务器运行 ubuntu 12.04 和 postgresql 9.2。更新类型通常在由 ID 标识的单个行上进行小更新。例如UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。我已经尽可能多地删除和优化了索引,并且服务器配置(linux 内核和 postgres conf)也非常优化。

硬件 硬件是一个专用服务器,带有 32GB ECC ram、RAID 10 阵列中的 4 个 600GB 15.000 rpm SAS 磁盘,由带有 BBU 的 LSI RAID 控制器和英特尔至强 E3-1245 四核处理器控制。

问题

  • 对于这种口径(读/写)的系统,图表所看到的性能是否合理?
  • 因此,我应该专注于进行硬件升级还是深入研究软件(内核调整、confs、查询等)?
  • 如果进行硬件升级,磁盘数量是性能的关键吗?

- - - - - - - - - - - - - - - 更新 …

postgresql performance update hardware

23
推荐指数
2
解决办法
3万
查看次数

为什么我的表包含重复的主键?

令我大吃一惊(而且令人担忧)的是,我刚刚意识到我的表有数百万行,只有几行,其中主键 (ID) 是重复的!我不明白这怎么会发生,以及我将来如何防止它?

保存主键的列是,并且一直受制于 CONSTRAINT fruits_pkey PRIMARY KEY(id);

我在 ubuntu 上运行 postgreql 9.3.4。

更新

@Mat:数据类型是integer

@ypercube:是的,select count(*) from (select count(*) from fruits group by id having count(*) > 1) as t1返回41

@Craig:是的,我之前做过故障转移,我的slave实际上是9.3.3

postgresql postgresql-9.3

8
推荐指数
1
解决办法
6157
查看次数

如何在 postgresql 中验证我的所有约束?

似乎我被 postgresql 9.3.4 的发行说明中描述的第一个错误所困扰:http : //www.postgresql.org/docs/devel/static/release-9-3-4.html

我现在有例如重复的主键。对所有约束(pkeys、fkeys)进行重新检查循环的最佳方法是什么 -> 修复问题 -> 再次检查以确保我的数据正常?

更新

我决定通过删除所有约束来解决问题,然后使用以下方法重新创建它们http://blog.hagander.net/archives/131-Automatically-dropping-and-creating-constraints.html。但是我目前被困在一条错误消息上,试图重新创建一个 pkey:

ERROR:  failed to find parent tuple for heap-only tuple at (1192248,5) in table "fruits"
CONTEXT:  SQL statement "ALTER TABLE "pm"."fruits" ADD CONSTRAINT "fruits_pkey" PRIMARY KEY (id)"
Run Code Online (Sandbox Code Playgroud)

这是什么意思,我该如何解决这个问题(如果可以的话,我可以忍受删除它)?

另一个问题:如果我只是通过删除重复行来摆脱它们,然后执行 pg_dump,并从该转储中恢复数据库,那么我的数据实际上是否一切正常。它会重建数据结构 - 对吗?

postgresql foreign-key constraint primary-key postgresql-9.3

7
推荐指数
3
解决办法
7590
查看次数

针对 20 多个列的不同搜索的最佳索引策略指南

我正在运行一个汽车搜索引擎。它由 postgresql 9.3 安装支持。

现在我不确定对前端搜索进行索引优化的最佳方法/策略。

问题:

包含汽车的表包含大约 150 万行。搜索汽车的人需要不同的搜索条件。有的按品牌/型号搜索,有的按年份搜索,有的按里程搜索,有的按价格搜索,有的按特殊设备搜索,等等 - 通常他们将一大堆标准结合在一起。当然,有些,如品牌/模式和价格,比其他的使用频率更高。我们总共提供:9 个类别标准,如品牌/型号或车身类型,加上 5 个数字标准,如价格或里程数,以及 12 个布尔标准,如设备。最后,人们可以按不同的列(年份、价格、里程和我们为汽车创建的分数)对结果进行排序。默认情况下,我们按照自己生成的分数进行排序。

到目前为止我所做的:

我已经“轻松”分析了标准的使用,并创建了一些索引(10)。其中包括例如价格、里​​程和品牌/型号的组合指数。由于我们只对显示实际待售汽车的结果感兴趣,因此将索引作为销售状态列上的部分索引。

问题:

  1. 您将如何分析和确定应该对哪些列编制索引,以及如何编制?
  2. 为 20 多个列上发生的搜索优化索引时,最佳策略是什么,其中使用和组合变化很大?(只对所有内容进行索引,对某些列进行索引,进行组合索引,仅进行单列索引等)
  3. 我希望索引所有列没有意义?
  4. 我希望索引布尔列没有意义?
  5. 是否对 5 个常用列进行组合索引而不是对每个列进行单独索引更好?
  6. 按我的默认排序对所有索引进行排序是个好主意吗?
  7. 您是否有使用其他可以大大提高性能的方法(例如,强制索引保留在内存中等)的经验?

postgresql performance index index-tuning

5
推荐指数
1
解决办法
293
查看次数

流式复制日志让我很困惑

我有一个流式复制热备用设置,它似乎运行良好。我可以登录,执行选择,结果似乎与主人是最新的。但是在备用的日志中,我看到了很多这样的:

cp: cannot stat `/mnt/wal_drive/wals/0000000100004BA800000070': No such file or directory
2014-02-28 16:00:37 CET LOG:  record with zero length at 4BA8/70DD79D0
2014-02-28 16:00:37 CET LOG:  started streaming WAL from primary at 4BA8/70000000 on timeline 1
2014-02-28 16:02:59 CET FATAL:  could not receive data from WAL stream: SSL error: sslv3 alert unexpected message
Run Code Online (Sandbox Code Playgroud)

这些分别是什么意思,我应该担心它们中的任何一个吗?

附注。在 master 中,我看到了其中一些,我希望它们与 SSL 相关:

2014-02-28 16:10:33 CET LOG:  SSL renegotiation failure
2014-02-28 16:10:33 CET LOG:  SSL error: unexpected record
Run Code Online (Sandbox Code Playgroud)

我在 ubuntu 12.04 上运行 postgresql 9.3

编辑

关于 …

postgresql replication

3
推荐指数
2
解决办法
3764
查看次数

postgresql 9.2 和 9.3 之间的流式复制

有谁知道设置 postgresql 9.3 从属设备来从 postgresql 9.2 主设备进行流式复制是否有问题?

postgresql replication postgresql-9.2 postgresql-9.3

1
推荐指数
1
解决办法
3847
查看次数