Postgres vs MySQL:命令不同步;
Postgress vs MySQL: Commands out of sync;
MySQL 场景:
当我使用多个线程在 MySQL 中执行 "SELECT" 查询时,我收到以下消息:"Commands out of sync; you can't run this command now",我发现这是由于必须等待 "consume" 结果的限制进行另一个查询。
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 "locks" 线程集成,直到已经获得结果,为此原因我需要在后台(新线程)运行 并解析包含从 MySQL
获得的结果的 "promise"
重要:
我正在保存几个 "connections" [示例:10],并且每个 SQL 调用函数都会选择一个连接。
这是:
1.一个包含10个已建立连接的连接池,Ex:
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);
}
2。当每秒执行 > = 100 SELECT 查询时出现问题,我相信即使连接平衡每秒 100 个连接也是一个很高的数字并且连接 "ex: conns.at (50)" 正在处理中并且没有被消耗
我的问题:
A. PostgreSQL 也有这个限制吗?或者在PostgreSQL中也有这样的限制?
乙。建议使用 SQL 命令的服务器每秒进行大型 SQL 查询而无需 "open new connections",即:
在 conns.at (0) 连接中,我可以执行(通过 2 个并发线程)SELECT 命令。
补充:
1.我什至可以在池中创建更大数量的连接,但是当我模拟每秒查询数大于预设连接数时,我会得到错误:"Commands out of sync",唯一的解决办法我发现是互斥量,这对性能不利
我发现 PostgreSQL 非常适合这个(队列/队列),以一种非常有效的方式,不像 MySQL 我需要调用“_free_result”,在 PostgreSQL 中,我可以 运行 在同一个连接上多次查询而没有收到错误:"Commands out of sync ".
注意:我使用 libpqxx(用于在 C 中连接/查询 PostgreSQL 服务器的库)进行了测试,它真的很神奇,没有让我头疼。
注意:我不知道是允许多线程执行还是每个连接在服务器端同步执行,我只知道postgresql没有这个错误。
MySQL 场景:
当我使用多个线程在 MySQL 中执行 "SELECT" 查询时,我收到以下消息:"Commands out of sync; you can't run this command now",我发现这是由于必须等待 "consume" 结果的限制进行另一个查询。
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 "locks" 线程集成,直到已经获得结果,为此原因我需要在后台(新线程)运行 并解析包含从 MySQL
重要:
我正在保存几个 "connections" [示例:10],并且每个 SQL 调用函数都会选择一个连接。
这是:
1.一个包含10个已建立连接的连接池,Ex:
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);
}
2。当每秒执行 > = 100 SELECT 查询时出现问题,我相信即使连接平衡每秒 100 个连接也是一个很高的数字并且连接 "ex: conns.at (50)" 正在处理中并且没有被消耗
我的问题:
A. PostgreSQL 也有这个限制吗?或者在PostgreSQL中也有这样的限制?
乙。建议使用 SQL 命令的服务器每秒进行大型 SQL 查询而无需 "open new connections",即: 在 conns.at (0) 连接中,我可以执行(通过 2 个并发线程)SELECT 命令。
补充:
1.我什至可以在池中创建更大数量的连接,但是当我模拟每秒查询数大于预设连接数时,我会得到错误:"Commands out of sync",唯一的解决办法我发现是互斥量,这对性能不利
我发现 PostgreSQL 非常适合这个(队列/队列),以一种非常有效的方式,不像 MySQL 我需要调用“_free_result”,在 PostgreSQL 中,我可以 运行 在同一个连接上多次查询而没有收到错误:"Commands out of sync ".
注意:我使用 libpqxx(用于在 C 中连接/查询 PostgreSQL 服务器的库)进行了测试,它真的很神奇,没有让我头疼。
注意:我不知道是允许多线程执行还是每个连接在服务器端同步执行,我只知道postgresql没有这个错误。