【发布时间】:2026-01-31 05:25:02
【问题描述】:
MySQL 场景:
当我在 MySQL 中使用多个线程执行“SELECT”查询时,我收到以下消息:“Commands out of sync; you can't run this command now”,我发现这是由于必须等待的限制“使用”结果以进行另一个查询。 C++ 示例:
void DataProcAsyncWorker::Execute()
{
std::thread (&DataProcAsyncWorker::Run, this).join();
}
void DataProcAsyncWorker :: Run () {
sql::PreparedStatement * prep_stmt = c->con->prepareStatement(query);
...
}
重要:
我无法帮助每个查询(SELECT,INSERT,ETC)使用多个线程,因为我正在构建的与 NodeJS 集成的模块“锁定”线程,直到已经获得结果,因此我需要运行后台(新线程)并解析包含从 MySQL 获得的结果的“承诺”
重要:
我正在保存几个“连接”[示例:10],并且每次 SQL 调用该函数都会选择一个连接。这是: 1. 一个包含 10 个已建立连接的连接池,例如:
for (int i = 0; i <10; i ++) {
Com * c = new Com;
c->id = i;
c->con = openConnection ();
c->con->setSchema("gateway");
conns.push_back(c);
}
执行时出现问题> = 每秒 100 次 SELECT 查询,我相信即使连接平衡,每秒 100 个连接也是一个很高的数字,并且连接“ex: conns.at(10)”在过程并没有被消耗
我的问题:
PostgreSQL 也有这个限制吗?还是在PostgreSQL中也有这样的限制?
注意:
在关于 MySQL 的 PHP Docs 中,使用 mysqli_query 后需要 mysqli_free_result 命令,如果没有,我会收到“Commands out of sync”错误,与 PostgreSQL 文档相比,使用 pg_query 后 pg_free_result 命令是完全可选的。
也就是说,有人使用 PostgreSQL 已经遇到过与“命令不同步”相关的问题,也许这个错误还有别的名字? 或者 PostgreSQL 是否能够自动处理这个问题,因为这个原因 free_result 被服务器不可见地调用而不会导致我这个错误?
【问题讨论】:
-
这可能更像是一个客户端库(用于 Postgres 的 libpq)和 C++ 主题,然后是一个数据库主题。
-
@a_horse_with_no_name,您好,上面的C++代码只是一个例子,问题出现在任何多线程语言或连接未被消费,例如:PHP、Java、C#或C++ 等我的问题:“PostgreSQL 也有这个限制吗?”,我想问一下 PostgreSQL 服务器上是否存在“不同步”错误或仅在 MySQL 服务器上。
标签: mysql postgresql transactions concurrency c++