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

当我连接了4000多个数据库时,为什么Perl会使系统变得非常慢?

  •  -1
  • abubacker  · 技术社区  · 14 年前

    我正在编写一个代码,用Perl脚本查找数据库的速度。

    我的目的是在每个fork(将充当4000个不同的客户机)和sleep之后建立4000个数据库连接,并在收到信号时发出update命令。 但是系统本身变得非常慢,几乎挂起连接本身,甚至我不能用我的终端发送信号。

    我使用的是DBI模块,我的系统中有4GB RAM,Postgres8.3在另一台机器上运行。

    4 回复  |  直到 14 年前
        1
  •  4
  •   PP.    14 年前

    我见过 pgpool 在生产系统中使用,Postgres连接的数量不能限制在合理的范围内。您可能希望自己研究如何使用它来减轻开发人员对糟糕的应用程序设计的影响。

    从本质上讲,pgpool充当Postgres的代理。它对大量连接的查询进行多路复用,以一个更小(且可管理)的数字连接到后端数据库。

        2
  •  5
  •   Dave Sherohman    14 年前

    我不完全清楚你是说你想a)打开4000个连接,fork,再打开4000个连接,等等;b)fork 4000次,每个进程打开一个连接,但是4000个数据库连接或4000个进程都是相当严重的资源消耗。我一点也不惊讶它会让你的系统变慢——不管使用什么语言,我都希望这是最终的结果。

    通过创建所有这些流程和/或连接,您实际上试图实现什么?有一种更好的方法可以做到这一点,而不是资源密集型的。

        3
  •  2
  •   Kuberchaun    14 年前

    这就是相对论,说的是许多联系,同时有,但不是闻所未闻的任何手段。数据库服务器上有多少内存?每个连接都需要资源,如果您没有数据库服务器设置来处理该数量的连接,那么无论您使用何种语言进行连接,它都会很慢。

    一个简单的类比是,如果你有一辆丰田普锐斯(以前我会说福特平托)拉着一辆重80000磅的半拖车(很多州的法定重量)。它会像你看到的那样,一瞬间把那辆小普锐斯烧掉。要做到正确,你需要给自己买一个大的钻机,然后把它挂在拖车上,以移动这个重量。

        4
  •  1
  •   hpavc    14 年前

    忽略做4000个连接分叉的智慧,您应该用类似于 Devel::NYTProf .

    我也可以在Gearman中设置持久性工作人员,并执行我的Gearman客户请求。持久性和您的计划按需分叉。