如何同时从多个线程访问MySQL
我们正在做一个MySQL的小型基准测试,我们希望了解它对数据的性能。
该测试的一部分是查看当多个并发线程对服务器执行各种查询时,服务器如何工作。
在MySQL文档(5.0)是不是多线程的客户真的清楚。我应该指出,我确实针对线程安全库(libmysqlclient_r.so
)进行了链接
我正在使用准备好的语句,并且同时执行读取(SELECT)和写入(UPDATE,INSERT,DELETE)操作。
- 我应该为每个线程打开一个连接吗?如果是这样的话:我什至怎么做..似乎
mysql_real_connect()
返回了我调用时得到的原始数据库句柄mysql_init()
) - 如果不是:我如何确保结果和方法(例如)
mysql_affected_rows
返回正确的值,而不是与其他线程的调用冲突(互斥体/锁可以工作,但感觉不对)
回答:
作为一个相当大的C应用程序的维护者,该应用程序可以从多个线程进行MySQL调用,我可以说在每个线程中简单地建立一个新连接都没有问题。我遇到的一些警告:
- 就像您说的已经在做的那样,针对链接
libmysqlclient_r
。 - 致电
mysql_library_init()
(一次,从main()
)。阅读有关在多线程环境中使用的文档,以了解为什么有必要。 - 在每个线程中
MYSQL
使用一个新结构mysql_init()
。这具有呼唤mysql_thread_init()
您的副作用。mysql_real_connect()
像往常一样,在每个线程中以及其特定于线程的MYSQL结构。 - 如果您要创建/销毁大量线程,则需要
mysql_thread_end()
在每个线程mysql_library_end()
的末尾(以及的末尾main()
)使用。无论如何,这是个好习惯。
基本上,不要共享MYSQL
结构或特定于该结构创建的任何内容(即MYSQL_STMT
s),它会按预期工作。
与为我建立连接池相比,这似乎省去了很多工作。
以上是 如何同时从多个线程访问MySQL 的全部内容, 来源链接: utcz.com/qa/422176.html