代码之家  ›  专栏  ›  技术社区  ›  Ikon

生成的PostgreSQL进程是否可以由生成者PHP脚本控制?

  •  1
  • Ikon  · 技术社区  · 16 年前

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

    是否可以让数据库进程从产卵器PHP脚本继承所有关联选项?


    我刚刚找到了答案——因为我在读一些关于ruby的PostgreSQL示例文件。

    我的最佳选择是获取运行当前脚本的PostgreSQL线程的非常精确的PID,并使用notify-listen。 正如[depesz]所说,Postgres只使用1个核心。用 schedtool 我仍然可以控制它运行的核心 cpulimit 我可以进一步控制它。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Adam    16 年前

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

    如果您坚持nicing postgres,“select pg_backend_pid()”将为您提供postgres进程的pid,而不提供任何通知/监听内容。不过,总的来说,你不想尝试对Postgres过程进行改进。您可能会导致其他更高优先级的进程阻塞。那么,你所认为的低优先级进程不再是低优先级进程了。

    如果您只是从csv中进行大量插入,那么优化脚本可能没什么帮助。Postgres可能在做更多的工作,这可能是IO,所以再一次,nicing可能不会给你带来太多。不过,你可以偶尔睡觉。插入50毫秒,休眠一段时间…

        2
  •  0
  •   user80168    16 年前

    不。

    Postgres后端总是由Postmaster进程生成的,因此无法将关联(无论是什么)选项从PHP脚本传递到Postgres后端。

    另一方面,如果你要描述什么是亲和力,以及你想要设置/传递什么样的选项,也许会有一个解决方案-事实上没有一般的解决方案,并不意味着没有针对某些事情的专门解决方案。