【问题标题】:Stored procedure called parellel returning results sequentially称为并行的存储过程按顺序返回结果
【发布时间】:2013-02-14 06:08:44
【问题描述】:

我们在MYSQL中写了存储过程

如果从一个线程调用存储过程,则需要 2.5 秒才能返回结果

如果从 3 个线程调用存储过程,则返回结果大约需要 8.5 秒。每个线程都花费几乎相同的时间。

我们正在使用 MyISM,如果我们需要对并行执行的过程进行任何设置,请告诉我。我们只在存储过程中检索(选择)没有更新/插入完成

【问题讨论】:

  • 即使是同时请求也会切换上下文/进程。从数据库中提取数据也是如此。多 1 秒是上下文切换的开销。
  • 当 MySQL 空闲并且所有现有线程都忙于处理从 MySQL 提取的一些数据时使用更多线程。
  • 执行 3 个线程时,每个线程需要 8.5 秒。 -> 总计 8.5 * 3
  • 您的意思是线程需要 25.5 秒,而顺序调用只需 7.5 秒?那更糟糕..!

标签: mysql database stored-procedures


【解决方案1】:

增加从 MySQL 中提取数据的线程数不一定会增加吞吐量。您在多个线程中执行相同的查询,这增加了上下文切换的开销。

要利用线程,您需要利用空闲时间(真正的空闲时间),例如输入/输出/网络延迟。 示例:

  • 线程从 MySQL 中提取一些数据并开始处理,例如通过接口发送通知。如果该接口是同步的,则线程被卡住。
  • 让更多线程为您完成这项工作,即从 DB(Idle) 中提取数据并进行处理。

没有这种延迟/空闲线程只会产生 IMO 开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 2015-06-03
    • 2013-06-21
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多