小编Gna*_*nam的帖子

索引 VARCHAR 列是个好主意/方法吗?

我们使用的是 PostgreSQL v8.2.3。

涉及的表有:EMPLOYEEEMAILLIST

Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
Run Code Online (Sandbox Code Playgroud)

2 个表以这样的方式连接,如果 EMPLOYEE.EMAIL1 或 EMPLOYEE.EMAIL2 没有匹配的条目,则将返回这些行。

SELECT employee.email1, employee.email2,
        e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
   FROM employee
   LEFT JOIN emaillist e1 ON e1.email = employee.email1
   LEFT JOIN emaillist e2 ON e2.email = employee.email2
 WHERE e1.email IS NULL OR e2.email IS NULL
Run Code Online (Sandbox Code Playgroud)

EMAILVARCHAR(256)EMAILLIST表索引。现在,响应时间是 14 秒。

表数统计:目前EMPLOYEE有165,018条记录,EMAILLIST有1,810,228条记录,未来两个表都有望增长。

  1. 索引 VARCHAR …

postgresql performance index query

38
推荐指数
2
解决办法
4万
查看次数

数据库归档解决方案

继续我在上发布的一个问题,将高容量和高访问率的表移动到单独的数据库是个好主意吗?,我正在寻找可用于 PostgreSQL 数据库归档的不同技术/解决方案。

我能想到的几个解决方案是:

  1. 表分区
  2. 单独的表空间和/或模式
  3. 将存档的记录/表移动到不同的硬盘

任何其他建议/指针/解决方案都非常受欢迎和赞赏。

注意:我们在 CentOS5.2 上运行 PostgreSQL v9.1.3

postgresql partitioning postgresql-9.1 archive

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

如何停止/禁用 PITR 并安全地清理 WAL 段?

我们的生产服务器在 CentOS 5.2 版(最终版)上运行 PostgreSQL v8.2.3。

我们已经在我们的生产服务器中设置了 PITR。由于某些原因,设置 PITR 后,我们无法对其进行管理和维护。最终,我们的 WAL 存档驱动器(辅助驱动器)已满(100% 使用),并且要存档的其他 WAL 存档段累积在 pg_xlog/ 目录本身(可在主驱动器中使用)

PITR 设置细节

有2个驱动器:

  1. 主驱动器(pgsql/data/目录所在)为 400 GB。
  2. 辅助驱动器(WAL 档案)为 300 GB。所有 WAL 存档都写入此辅助驱动器。

现在,我们决定停止/禁用 PITR。

我的问题是,在这种情况下,如何停止/禁用 PITR 并安全地清除两个驱动器中的所有 WAL 段?

推荐/建议的方法是什么?非常感谢专家对此的建议/想法/建议。

postgresql

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

可能无法释放 TEMPORARY 表占用的磁盘空间的所有原因/可能性是什么?

我们使用的是 PostgreSQL v8.2.3。我们是一个基于 web 的应用程序,我们使用 pgpool-II v 2.0.1 纯粹是为了连接池(我们不使用 pgpool 的其他功能,如复制、负载平衡等)。

最近,在我们的生产服务器中,数据库磁盘空间出现了意外的急剧增长。在短短 2 天内,数据库大小从 6 GB 增长到 14 GB。

然后我运行以下查询来查找数据库中前 20 个最大关系的大小:

SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class
C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN
('pg_catalog') ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20;
Run Code Online (Sandbox Code Playgroud)

我在这里没有发现任何问题。甚至我可以说上述命令的“total_size”之和小于数据库本身占用的大小。我正在使用以下命令来查找数据库的大小:

select oid, datname, pg_database_size(datname) as actualsize,
pg_size_pretty(pg_database_size(datname)) as size from pg_database order by
datname;
Run Code Online (Sandbox Code Playgroud)

我也曾经使用以下命令物理检查占用的数据库大小:

du -sh /usr/local/pgsql/data/base/2663326
Run Code Online (Sandbox Code Playgroud)

然后我从位置“ /usr/local/pgsql/data/base/2663326 ”开始按降序物理列出文件大小。这里,“2663326”是我的数据库的 OID。

[root@dbserver 2663326]# …
Run Code Online (Sandbox Code Playgroud)

postgresql database-size disk-space temporary-tables

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

如何在没有转储/恢复的情况下升级 PostgreSQL 次要版本?

我们的生产服务器在 CentOS5.2 上运行 PostgreSQL v8.2.3。我们计划升级到 8.2 系列的最新版本,即v8.2.20。此外,在未来,我们计划尽快升级到最新的次要版本(当 PostgreSQL 发布时)。

最初,我们从源代码安装了 v8.2.3。PostgreSQL 安装在/usr/local/pgsql/ 中,数据目录位于/usr/local/pgsql/data

PostgreSQL版本控制政策说:

升级到次要版本不需要转储和恢复;只需停止数据库服务器,安装更新的二进制文件,然后重新启动服务器即可。

现在,在没有转储/恢复的情况下,将 PostgreSQL 升级到次要版本的最新版本所涉及的推荐方法/步骤是什么?

编辑:嗯,我应该这样问我的问题。由于文档说install the updated binaries,我的问题是是否可以按原样安装最新版本。我的数据目录/usr/local/pgsql/data/会以任何方式受到干扰吗?或者应该暂时移动这个数据目录,直到最新的安装完成。另外,有什么吗,作为管理员,我需要注意,比如备份/usr/local/pgsql/data/postgresql.conf等?

postgresql

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

将大容量和高访问量的表移动到单独的数据库是个好主意吗?

我们的应用程序是基于 Web 的应用程序(建立在多租户架构上),运行 PostgreSQL v9.1.3。我们的应用程序中大约有 450 个表,其中 2-3 个表特定于应用程序中的某个模块,与其他剩余表相比存储了大量记录,并且被应用程序用户频繁访问(读取写入操作) .

为了给出可用记录量的图片/统计数据,目前一个表中有800 万条记录,另一张表中有300 万条记录。我们预计在不久的将来这些表的交易量(同样是读取写入交易)会立即增加/流量,因为我们在这个特定模块中提出了一些令人兴奋的功能。

我的要求问题是,

  1. 因为我们预计这个特定模块的流量很大,所以我们不想让访问应用程序中其他模块的用户因为它可能导致的任何性能问题而受到影响。
  2. 分离/隔离频繁访问的表是一种让我想到的解决方案。分离/移动到不同的数据库是个好主意吗?这种方法的优缺点是什么?
  3. 欢迎和赞赏任何解决方案、评论、方法、建议。

postgresql performance postgresql-9.1

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