aspdeepak Asked: 2024-05-13 17:54:41 +0800 CST2024-05-13 17:54:41 +0800 CST 2024-05-13 17:54:41 +0800 CST 限制 postgres 数据库实例中特定用户或数据库的 CPU、内存 772 目前,我们在单个 postgres 实例中托管多个数据库。 我们希望限制该数据库实例中特定数据库/用户的 CPU 使用率。 是否可以在 postgres 中进行这些资源管理操作? postgresql 2 个回答 Voted Best Answer Laurenz Albe 2024-05-13T18:18:19+08:002024-05-13T18:18:19+08:00 不,那是不可能的。您的数据库必须位于不同的计算机上或不同的容器中。 Craig 2024-05-13T19:25:04+08:002024-05-13T19:25:04+08:00 您可以由用户限制work_mem、hash_mem_multiplier和一些其他设置。文档在这里和这里。这不会限制总体内存或 CPU,但可能有助于调整总体服务器和用户效率。 例如,如果有一组生产服务运行对更多数据进行排序的查询或运行更复杂/并行的查询(如报告编写器服务),则可能降低 work_mem/hash_mem_multiplier 作为服务器参数并增加该用户可能会允许更多PostgreSQL 在相同的内存范围内更有效地运行。work_mem 形式的内存不会“浪费”在不需要的用户身上。或者,对于时间敏感度较高的用户,他们可以获得更多资源,以满足需要的需求,而时间敏感度较低的用户可能必须使用外部排序/哈希。 或者也许内存不是问题,但 CPU 是问题,因此您可以相应地调整设置。 其中一些也可以在会话级别进行更改。例如,在需要更高资源设置的查询之前,然后再设置回来。但我发现,当用户知道可以调整“有时走得更快”设置时,就会始终使用该设置,无论该设置是否可能会伤害其他人。这里要小心。 为用户或会话更改这些需要调整、监视、维护等。它不会限制提供给用户的 CPU 或内存。但它可能允许您通过以 work_mem 的形式为某些用户提供更多内存,同时保留整体内存来解决问题。更进一步的是,每个用户都有单独的配置,这使得维护变得困难,因为用户往往会随着时间的推移而改变模式,并且数据肯定会随着时间的推移而变化。 这种机制对我来说很有效,在我对“有问题的”服务进行基准测试/调整/监控设置后,服务器中的每个查询都可以更快地工作。
不,那是不可能的。您的数据库必须位于不同的计算机上或不同的容器中。
您可以由用户限制
work_mem
、hash_mem_multiplier
和一些其他设置。文档在这里和这里。这不会限制总体内存或 CPU,但可能有助于调整总体服务器和用户效率。例如,如果有一组生产服务运行对更多数据进行排序的查询或运行更复杂/并行的查询(如报告编写器服务),则可能降低 work_mem/hash_mem_multiplier 作为服务器参数并增加该用户可能会允许更多PostgreSQL 在相同的内存范围内更有效地运行。work_mem 形式的内存不会“浪费”在不需要的用户身上。或者,对于时间敏感度较高的用户,他们可以获得更多资源,以满足需要的需求,而时间敏感度较低的用户可能必须使用外部排序/哈希。
或者也许内存不是问题,但 CPU 是问题,因此您可以相应地调整设置。
其中一些也可以在会话级别进行更改。例如,在需要更高资源设置的查询之前,然后再设置回来。但我发现,当用户知道可以调整“有时走得更快”设置时,就会始终使用该设置,无论该设置是否可能会伤害其他人。这里要小心。
为用户或会话更改这些需要调整、监视、维护等。它不会限制提供给用户的 CPU 或内存。但它可能允许您通过以 work_mem 的形式为某些用户提供更多内存,同时保留整体内存来解决问题。更进一步的是,每个用户都有单独的配置,这使得维护变得困难,因为用户往往会随着时间的推移而改变模式,并且数据肯定会随着时间的推移而变化。
这种机制对我来说很有效,在我对“有问题的”服务进行基准测试/调整/监控设置后,服务器中的每个查询都可以更快地工作。