Postgresql 如何限制客户修改对生产系统的影响
我们的商店已经为十几个客户端安装开发了一些WEB/SMS/DB解决方案。这些应用程序有一些实时性能要求,并且足以正常运行。问题在于,客户机(生产服务器的所有者)使用相同的服务器/数据库进行定制,这会导致我们创建和部署的应用程序的性能出现问题 客户定制的几个示例:Postgresql 如何限制客户修改对生产系统的影响,postgresql,open-source,production-environment,resource-management,Postgresql,Open Source,Production Environment,Resource Management,我们的商店已经为十几个客户端安装开发了一些WEB/SMS/DB解决方案。这些应用程序有一些实时性能要求,并且足以正常运行。问题在于,客户机(生产服务器的所有者)使用相同的服务器/数据库进行定制,这会导致我们创建和部署的应用程序的性能出现问题 客户定制的几个示例: 为转换为查询中其他数据类型的列添加包含许多文本数据类型的大型表 没有主键、索引或FK约束 在脚本的循环中使用id=x的表中的count(*)的外部脚本,以确定以后如何在同一脚本中构造更多查询。(计划员不能优化批量操作,也不能一次完成所
- 为转换为查询中其他数据类型的列添加包含许多文本数据类型的大型表
- 没有主键、索引或FK约束
- 在脚本的循环中使用id=x的表中的
count(*)的外部脚本,以确定以后如何在同一脚本中构造更多查询。(计划员不能优化批量操作,也不能一次完成所有操作)
- 服务器上的所有新代码文件都由root创建/拥有,具有0777权限
我们使用在Linux Distos上运行的PG 8.3。客户端更喜欢php,但shell脚本、perl、python和plpgsql都以这样或那样的形式在系统上使用。这个问题是在第一个客户端被授予对第一台计算机的完全访问权大约两分钟后开始的,此后一直没有消失。任何时候,只要有人的首要任务是迅速完成面向业务的工作,他们就会草率行事,把每个人的事情都搞砸。这就是工作原理,因为正确的设计和实现比廉价的黑客更难。你不可能解决这个问题,你所能做的只是想办法让客户更容易与你合作,而不是与你作对。如果你做得对,它将看起来像是极好的服务,而不是唠叨 首先,数据库方面。现在有了一种在PostgreSQL中控制查询资源的方法。主要的困难是像“nice”这样的工具控制CPU的使用,但是如果数据库不适合RAM,很可能是I/O的使用导致了你的死亡。请参见此处总结的问题 现在,如果事实上客户机消耗的是CPU,那么可以使用两种技术来改善这种情况:
- 安装一个更改进程优先级(,)的C函数,并确保无论何时运行它都会首先被调用(可能会将其放入psql配置文件中,还有其他方法)李>
- 编写一个脚本,查找由其用户ID生成的postmaster进程,并对其进行renice,使其经常在cron中运行或作为守护进程运行