我正在做一个通过多线程同时将数据插入MySQL表的实验。
这是C ++中的部分代码。
bool query_thread(const char* cmd, MYSQL* con) {
if( !query( cmd, con ) ) {
return 0;
}
return 1;
}
int main() {
........
if(mysql_query(m_con, "CREATE TABLE tb1 (model INT(32), handle INT(32))") != 0) {
return 0;
}
thread thread1(query_thread, "INSERT INTO tb1 VALUES (1,1)", m_con);
thread thread2(query_thread, "INSERT INTO tb1 VALUES (2,2)", m_con);
thread thread3(query_thread, "INSERT INTO tb1 VALUES (3,3)", m_con);
thread1.join();
thread2.join();
thread3.join();
}
但是发出了MySQL错误消息。
错误cmd:插入tb1值(1,1)
查询期间与MySQL服务器的连接丢失
分段错误
我的问题如下。
答案 0 :(得分:2)
每个线程必须具有:
但是,这不会使插入速度更快。简而言之,innodb日志(日志)本质上是串行的,这限制了服务器的总插入率。阅读mysql性能博客(percona / mariadb)了解详细信息。当然,有一些参数需要调整,并且最近似乎有所进步。