使用libmysqlclient库时,遇到的问题和性能分析总结
需要8.0.16之后版本才支持异步
一、测试情况
-
测试环境
虚拟机:Ubuntu16.04
CPU:4核
内存:8G
数据库表数据量:3万条
libmysqlclient:8.0.25
-
测试量
执行1万次,比如idwei 1 ~ 30000, 则将id=1 ~ 10000的数据进行更新或查询
-
测试写入结论
对比mysqlclient异步操作、mysqlclient同步操作、odbc方式
1.InnoDB引擎:
MySQLclient异步:681ms
MySQLclient同步:1778ms
ODBC:1681ms
2.MySIAM引擎:
MySQLclient异步:4633ms
MySQLclient同步:5202ms
ODBC:5267ms
3.InnoDB引擎:每次commit
MySQLclient异步:3367ms
MySQLclient同步:8308ms
ODBC:2365ms
-
读取测试结论
- mysqlclient异步操作(1线程、4连接):200ms
二、使用时的坑
-
写入时问题和解决方案
- 连接1写入数据,连接2读取,当还没完全写入,连接2就读新写入的数据,则一直读取不到,如果写入等待一会再去读就能取到
- 连接1写入,连接1立马读取,也能读取到
- 改为自动提交(mysql_autocommit(mysql,true)),则连接1写入数据,连接2立马读取,也能读取到
- 连接1写入,连接2执行mysql_reload接口或者操作sql语句:FLUSH PRIVILEGES 之后连接2也能读取到