是否有Mysql语句提供任何其他开放连接或用户的完整详细信息?或者,具体为myisam表格提供同样详细的状态报告。看看Mysql的SHOW TABLE STATUS文档,它遗漏了一些非常重要的信息。
我正在尝试做的事情:远程odbc连接正在插入数千条记录,由于连接速度慢,可能需要长达一个小时。 Tcp连接二,在服务器的localhost上使用PHP,正在运行对该数据具有聚合函数的select查询。在允许连接2运行这些查询之前,我想首先检查连接2以确保在这些特定表上的任何其他连接上没有挂起的插入,因此它可以等到所有数据都可用。如果当前正在写表,我想向连接用户吐两个近似根据待处理插入的数量等待多长时间。理想情况下,通过表格,我想使用查询来获取连接开始写入时的时间戳,剩下要完成的总插入,以及已完成的总插入。而不是插入计数,即使知道写入和留下写入的字节数也可以在这里正常工作。
显然,因为连接2是通过PHP脚本的tcp连接,所以我在该脚本中真正可以使用的是某种查询。我想如果必须,因为它在localhost上,我可以exec()
如果唯一的方法是通过mysql命令行选项输出这个信息,但我宁愿不。我想我可以简单地在PHP脚本可以检查的大量插入任务之前和之后更新定制的事务日志,但希望我已经可以利用内置的Mysql功能。
编辑:“交易”是错误的词 - 语言冲突。我实际上并没有使用Mysql事务。我的意思是当前待处理的任务,查询和请求。
答案 0 :(得分:1)
您可以发出SHOW FULL PROCESSLIST;
来显示有效连接。
至于其余部分,mysql不知道剩下多少个插件,以及它们需要多长时间。 (如果你使用MyISAM表,他们不支持交易)。服务器无法知道您的PHP脚本是否打算再发送10个插件,或10000 - 如果您正在执行类似insert into xxx select ... from ...
的操作 - mysql不会跟踪/公开有关多少/多个已完成的信息/离开了。
最好通过其他表更新/插入有关何时开始聚合数据,跟踪状态,何时完成等数据的处理。
答案 1 :(得分:0)
如果正在InnoDB表上执行交易,您可以使用SHOW INNODB STATUS
获取完整的交易详情。这是一个巨大的输出,但其中一部分是每个进程/连接的事务/锁定状态。