2012-11-28 22 views
0

我在一台装有MySQL的Linux机器上同时运行100个PHP脚本。 我正在使用PDO,ATTR_PERSISTENT参数设置为false。进程通常执行一些SQL命令并休眠30秒。使用PDO对象运行多个PHP进程的最佳实践?

采用顶级进程列表看,我看到了很多的mysqld进程,每次取的内存大量空间。

我明白这个问题可以通过重新设计来解决,用队列和\或共享连接,但是我正在寻找一个临时的解决办法,直到我准备好了一个更好的设置。

什么是处理这种设置的最佳补救措施? 我应该在进程休眠时销毁并重新创建每个PDO对象吗? 我是否在PDO或MySQL中丢失了一些基本的配置选项?

回答

0

在PDO和睡眠方面,如果你不重新使用该连接计划,早,你可以杀了它。原因在于,虽然它正在休眠(无效),但MySQL上的工作线程仍然存在。

如果你是不是会浪费睡眠过程,我建议去持久连接,并在PHP进程之间分享它。然而,这却打开了一堆新的蠕虫:僵局。

关闭连接,最好的办法是消灭PDO对象 - 即$yourPDOOBject = null

+0

我该如何去分享连接,避免死锁? –

+0

只需将PDO :: ATTR_PERSISTENT参数设置为true即可。从那里,假设您使用完全相同的凭证进行连接,则PDO将为连接共享执行其余的操作。对于死锁,您需要了解MySQL如何锁定行/表,具体取决于正在运行的内容。为您的表格使用的引擎查找“MySQL锁定”,因为它们以不同的方式执行。 –

相关问题