昨天我们讨论了性能和可恢复性,我意识到虚拟化环境可以给我带来多少好处 - 但由于我对性能有点怀疑,所以我在这里问。它可能是特定于 GIS 的,但是在 gis 用户那里,他们说这是特定于数据库的......;)
数据库服务器是否会因虚拟化而遭受严重的性能损失?我不了解这项技术的最后细节,但不知何故,它更像是一个“黑匣子”,需要通过硬件进行处理。磁盘访问以及 PostGIS 为我们提供的所有技巧是否会被授予?(聚类、索引等) - 碎片聚类就像没有聚类!
最大的优势是可维护性和可扩展性。如果发生严重的硬件故障,我可以在几分钟内甚至实时迁移到另一台物理机器。
谁有经验,可以给我指点关于这个主题的好的网站或文献?我记得上次 fossgis 中的一些事情以及 ESXi 和本机服务器上的一些内部基准测试,不知何故我无法确定它是否好。
Postgre JSON 类型针对大型 JSON 文档的优化情况如何?在 JSON 对象大小为多 MB 且太大而无法有效加载的情况下,我特别关注部分检索(例如获取 JSON 数组的最后 N 个项目或在 JSON dict 中查找一个特定项目的成本)在全。
背景:我正在处理一个数据集,其中每条记录都有 10,000 条注释。我不需要这些注释完全索引,但我需要快速插入记录,所以我考虑将它们存储在 JSON 字段中,而不是在映射表中创建数千个额外的行。
这与 PostgreSQL 9.3 有关。
我们有 2 个专用的数据库服务器。一个是主,另一个是它的流从。
Postgres 版本9.0.17。
我们在两台服务器上都有类似的硬件,并在 Raid 10 中使用 15krpm SAS 驱动器用于数据库集群。唯一的区别是在服务器上我们有 128 GB 内存,而在从服务器上我们有 64 GB 内存。
我们面临的问题是我们的流媒体奴隶落后了。
在流式从属设备上,我们有
postgres=# select pg_last_xlog_receive_location();
pg_last_xlog_receive_location
-------------------------------
1F7D/DD3BA000
postgres=# select pg_last_xlog_replay_location();
pg_last_xlog_replay_location
------------------------------
1F75/5BE08980
Run Code Online (Sandbox Code Playgroud)
wal received 和 replay 之间的这种差异在不断增加。
请让我知道如何解决此问题。
的输出perf top -u postgres是
98.30% postgres (.) DropRelFileNodeBuffers
0.20% postgres (.) 0x000000000008b05b
0.14% (kernel) (k) copy_user_generic_string
0.13% postgres (.) hash_seq_search
0.07% postgres (.) hash_search_with_hash_value
0.05% (kernel) (k) _spin_lock
0.05% (kernel) (k) apic_timer_interrupt
0.03% (kernel) (k) do_timer
0.03% postgres …Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS RDS Postgres 和 RDS 的逻辑复制支持
(编辑:注意,这与 PostgreSQL 10 中的逻辑复制功能不同。它是基于相同底层逻辑解码功能的 AWS RDS 功能。)
我正在复制 Postgres -> Postgres 。基本上将许多数据库合并为一个数据库。
我遇到的问题是,在一段时间内数据库中没有活动磁盘被填满时。我想控制 WAL 可以使用多少存储空间。我调整了 wal_segments 以保留。仍然磁盘正在填满。我可以设置任何参数来控制磁盘使用,而不是对表进行一些虚拟更新。当前参数是
wal_keep_segments =4
wal_max_size =128
wal_min_size 16
Run Code Online (Sandbox Code Playgroud)
穆拉利
我希望创建一个资产管理系统来跟踪资产(笔记本电脑/台式机、显示器、键盘、鼠标、包、软件键等),基本上是可以分配给员工的任何东西。我的问题是,每种类型都需要跟踪不同的属性。我们会跟踪计算机的一组不同的属性/属性,而不是监视器。我读过 EAV 模式(或大多数人所说的反模式),似乎瘟疫应该避免这种情况。创建包含所有列的单个表似乎很荒谬,并且为出现的每个新类型创建一个新表似乎不是最佳选择。我最近在 Postgres 9.4 中读到了 JSONB。存储可由应用程序处理的 JSON 对象似乎是一个不错的妥协。
这是 JSONB 的好用例吗?或者EAV有意义吗?或者制作一张巨大的桌子,或者为每种类型创建一张桌子?
我们正在处理以下情况(PG 版本为 7.4.30):不知何故,pg_database 中缺少一个数据库(psql \l 列表不再显示它)。更多,虽然您仍然可以 \c 到它,\d 表列表只显示表的一小部分。现有表上的 \d 也显示丢失的列。但是,所有表(仍然可见或不可见)都可以通过 psql 查询,结果集中的实际数据和列似乎很好。
我们备份了数据文件夹,并在过去 24 小时内尝试将情况恢复到 pg_dump 可以工作的程度。不幸的是,尽管我们在之前的类似帖子中尝试了大量建议,但我们还没有完全成功。Reindex 没有帮助,但是“VACUUM FULL FREEZE [ANALYZE]”确实释放了已用磁盘空间的 70%(14GB 到 4)。当然,数据库并没有像它应该的那样定期清空:
警告:某些数据库在超过 20 亿个事务中没有被清空详细信息:您可能已经遭受了事务环绕数据丢失。
没有冻结选项的完全真空确实使所有数据库、表和用户可见,但会重复,即 \l 然后显示数据库两次,数据库上的 \d 列出所有表两次。postgres 用户在 pg_user 等中出现两次。如果数据库未列出,pg_dump 将不起作用,如果 postgres 用户重复,则 pg_dump 将不起作用。
这对任何人来说听起来都很熟悉吗?遗憾的是,所有数据似乎都在那里,但我们无法将其恢复并还原到干净的数据库中。我们将不胜感激任何建议。
谢谢!
PS:我也在等待来自pgsql-admin邮件列表的反馈。
我必须保存几年的间隔,例如:
id intervalYears
1 2014/2015
2 2015/2016
3 2016/2017
Run Code Online (Sandbox Code Playgroud)
等等。那些年就像学术年,所以第一年必须小于第二年,但大于或等于实际年份。
那么,如何保存这种数据类型呢?我应该分开日期并添加一些cotraints吗?
postgresql ×7
replication ×2
amazon-rds ×1
aws ×1
datatypes ×1
eav ×1
json ×1
nosql ×1
postgis ×1
vmware ×1