我们的是一个基于 Web 的应用程序(建立在多租户架构上)运行 PostgreSQL v9.1.3。我们的应用程序中大约有 450 个表,其中 2-3 个表,特定于应用程序中的一个模块,与其他剩余表相比存储了大量记录,并且被应用程序用户频繁访问(读取和写入操作) .
为了提供有关可用记录量的图片/统计信息,目前一张表中有800万条记录,另一张表中有300 万条记录。我们预计在不久的将来这些表的交易量(同样是读写交易)会立即增加/流量,因为我们在这个特定模块中提出了一些令人兴奋的功能。
我的问题是,
- 因为我们期望这个特定模块的流量很大,所以我们不想让访问应用程序中其他模块的用户因为它可能导致的任何性能问题而受到影响。
- 分离/隔离频繁访问的表是我想到的一种解决方案。分离/移动到不同的数据库是个好主意吗?这种方法的优点和缺点是什么?
- 欢迎和赞赏任何解决方案、评论、方法、建议。
如果将表移动到不同的硬盘,您将获得更多关于性能的信息。只要“繁忙”表和其余表位于同一磁盘上,将该表移动到不同的“文件”(通过将其移动到不同的数据库)就不会改变(I/O)性能.
将 I/O 负载分配到不同的硬盘(和不同的硬盘控制器)很可能会为剩余数据提供更好的性能,因为它不受在繁忙表上完成的 I/O 的影响。
要将表移动到不同的硬盘,您需要创建一个新的表空间(当然位于该磁盘上),然后将该表移动到该表空间。
我认为在这种情况下,您最好优化 I/O,并尝试确保服务器中有大量 RAM,而不是将表移动到另一个表空间。如果表被更频繁地访问并且有足够的内存,它们很可能大部分都保存在内存中,并且 WAL 是唯一在提交时刷新到磁盘的文件。
更多的内存将发挥最大的作用。经常访问的页面将更有可能在队列中,因此磁盘 I/O 将减少。那是最重要的。
创建额外的表空间还会产生其他问题。如果这些在其他 RAID 阵列上,您将在两个阵列之间分配总吞吐量,因此一切都会变慢。另一方面,如果您添加 RAM,首先会减少磁盘 I/O。