AFAICT 当您从任何客户端向 MySQL 发送查询时,它总是阻塞并等待服务器响应成功或失败。
当执行缓慢的操作(例如在大型表上添加新索引)时,这可能是一个问题,因为它会使客户端处于空闲状态,等待很长时间才能响应。
就我而言,我特别想从 AWS Lambda 函数发送请求。
我在这里找到了一些关于如何分离客户端进程并将客户端进程置于后台的提示https://stackoverflow.com/a/41371255/202168mysql
,还有一些建议,如果客户端关闭连接,MySQL服务器可能会取消请求。但启动客户端的主机mysql
仍然必须保持运行。
感觉这还不是全部?
PostgreSQLCREATE INDEX CONCURRENTLY
为此目的,即查询快速返回并且索引构建在服务器上继续。
我知道MySQL不支持CREATE INDEX CONCURRENTLY
但感觉很奇怪,没有非阻塞的客户端方法?(好吧......有“异步”或“非阻塞”客户端,但它们仍然必须保持相同的连接打开)
我想做的是这样的:
- 发送
ALTER TABLE ... ADD KEY
查询 - 获取查询的服务器端进程 ID
- 注销 mysql 客户端(并结束我的 Lambda 执行)
- 继续
ADD KEY
在服务器上运行 - 从新进程中,定期轮询 DDL 查询的进程 ID,看看它是完成还是失败
有什么办法可以实现这一点吗?
相关或替代问题:如果我在发送查询后断开客户端连接,是否会ADD KEY
继续运行直至完成/失败而不是被取消?
服务器是AWS RDS上的MySQL 8.0.35,InnoDB表。