代码之家  ›  专栏  ›  技术社区  ›  bob-the-destroyer

一个连接可以获取另一个连接的详细信息吗?或者,如何获取最详细的未决交易报告?

  •  1
  • bob-the-destroyer  · 技术社区  · 14 年前

    是否有一个mysql语句提供任何其他开放连接或用户的完整详细信息?或者,对myisam表进行同样详细的状态报告。查看mysql的show table状态文档,它缺少一些非常重要的信息。

    我要做的是:远程ODBC连接1正在插入几千条记录,由于连接速度慢,可能需要一个小时。在服务器的localhost上使用php的tcp connection two正在运行对该数据使用聚合函数的select查询。在允许连接2运行这些查询之前,我希望先检查连接2,以确保这些特定表上的任何其他连接上都没有挂起的插入,这样它就可以等到所有数据都可用为止。如果表当前正在写入,我想向连接2的用户吐出一个基于挂起插入数的等待时间的近似值。理想情况下,通过表,我想返回使用查询的时间戳,即连接1开始写入时的时间戳、要完成的插入总数以及已经完成的插入总数。与插入计数不同的是,即使知道写的和留下来写的字节数,在这里也可以很好地工作。

    显然,由于连接2是通过PHP脚本进行的TCP连接,所以在该脚本中我真正能使用的只是某种查询。我想如果必须的话,因为它在本地主机上,我可以 exec() 如果唯一的方法是通过一个mysql命令行选项来输出这个信息,那么我宁愿不这样做。我想我可以简单地在这个巨大的插入任务之前和之后更新一个定制的事务日志,PHP脚本可以检查这个日志,但希望已经有了一个内置的MySQL特性,我可以利用它。

    编辑: “transaction”是一个错误的词——语言冲突。我实际上并没有使用MySQL事务。我指的是目前正在处理的任务、查询和请求。

    2 回复  |  直到 14 年前
        1
  •  1
  •   nos    14 年前

    你可以发布 SHOW FULL PROCESSLIST; 显示活动连接。

    至于其他插件,MySQL不知道还有多少个插件,它们需要多长时间。(如果您使用的是myisam表,它们不支持事务)。服务器无法知道您的PHP脚本是打算再发送10个插入,还是10000个-如果您正在执行类似的操作 insert into xxx select ... from ... -MySQL不跟踪/公开关于完成/剩余多少的信息。

    您最好自己通过其他表来处理这个问题,在这些表中,您可以更新/插入关于何时开始聚合数据、跟踪状态、何时结束等的数据。

        2
  •  0
  •   Marc B    14 年前

    如果事务是在InnoDB表上执行的,则可以使用 SHOW INNODB STATUS . 它是一个巨大的输出块,但它的一部分是每个进程/连接的事务/锁状态。