产生的Postgresql进程可以由spawner PHP脚本控制吗?

时间:2009-05-30 10:09:24

标签: php linux postgresql command-line ubuntu

我有一个PHP CLI脚本,它处理csv文件,将其内容插入Postgresql数据库中的表。这是在Ubuntu服务器上。我使用schedtool来控制整个脚本的亲和力。 Schedtool用于使用-e选项启动脚本本身。不幸的是,对于htop,我看到数据库线程被生成为一个完全不同的线程,并且不受关联选项的影响。

是否有可能以某种方式使数据库进程从spawner PHP脚本继承所有关联选项?


我刚刚找到了答案 - 我正在阅读一些Ruby的Postgresql示例文件:)。

我最好的选择是获取正在运行当前脚本的Postgresql线程的非常精确的PID,并使用NOTIFY - LISTEN。 正如[depesz]告诉Postgres只使用1个核心。使用schedtool我仍然可以控制它运行的核心,并使用cpulimit我可以进一步控制它。

2 个答案:

答案 0 :(得分:0)

没有

Postgres后端总是从postmaster进程中生成,所以没有办法将php脚本中的亲和力(无论是什么)选项传递给postgres后端。

另一方面 - 如果你描述了亲和力是什么,以及你想要设置/通过什么样的选项,也许有一个解决方案 - 事实上没有通用的解决方案,并不意味着那里对于某些事情来说,它不是专门的解决方案。

答案 1 :(得分:0)

Postgres不使用线程。每个连接都由单线程进程处理。因此,单个连接只能使用一个核心。虽然操作系统可能会将其移动到不同的核心,但它一次只能使用一个。

如果你坚持使用postgres,“SELECT pg_backend_pid()”将为你提供postgres过程的PID,而不会有任何NOTIFY / LISTEN的东西。虽然,一般来说,你不想尝试使用postgres过程。您可能会阻止其他更高优先级的进程。那么你认为低优先级的流程就不再那么低优先级了。

如果您只是从csv执行一堆插入操作,那么修改脚本可能无济于事。 Postgres可能正在做更多的工作,而且它可能是IO,所以再次,nicing可能不会让你受益匪浅。但是,你可以偶尔睡一会儿。插入50毫秒,睡一会儿,......