如何加速 C++ MySQL 连接器?
How to speed up C++ MySQL connector?
我正在使用 C++ MySQL 连接器。
sql::Connection * db = nullptr;
try {
db = get_driver_instance()->connect("tcp://localhost:3306", "admin", "admin");
db->setSchema("test_db");
}
catch(exception &e) {
return 1;
}
MySQL 连接器动态链接到应用程序。
LDFLAGS = -L/usr/local/mysql-connector-c++/lib64
LDLIBS = -lmysqlcppconn
CXXFLAGS = -Wall -Wextra -g -std=c++11 -O3
当我 运行 我的应用程序需要大约 13 033 µs
并且大约 10 000 µs
只是与 MySQL 的连接。我也试过使用静态库编译它,但没有帮助。
有什么办法可以加快数据库连接速度吗?
how to say to server: give me pointer to DB connection
MySQL 进程之间不能共享连接。如果您的 C++ 进程在处理 http 请求时启动,则它必须在那时打开一个新的 MySQL 连接。
更典型的是,high-performance 网络应用程序不会为每个 http 请求创建一个新进程。您正在使用 1990's-era CGI 协议设计代码并期望高性能,您应该更改架构。
例如,FastCGI 实现应该使用单个进程处理许多 http 请求。这样你就可以使用一个连接池,它提供 MySQL 连接到请求处理程序,而不需要每次都重新打开连接。
要加速单个 MySQL 连接,请考虑:
- 至少升级到 MySQL 5.7,以利用改进的连接速度。我以为我读到 8.0 进一步提高了这个速度,但我现在找不到相关的参考资料。
- 使用 UNIX 域套接字接口,它比 TCP/IP 连接速度更快。将客户端连接到 MySQL 服务器时,应该像使用“localhost”一样简单。
- 如果您确实使用 TCP/IP,则设置选项
skip_name_resolve
。
https://dev.mysql.com/doc/refman/8.0/en/host-cache.html 说:
If you have a very slow DNS and many hosts, you might be able to improve performance either by enabling skip_name_resolve
to disable DNS lookups, or by increasing the value of host_cache_size
to make the host cache larger.
我正在使用 C++ MySQL 连接器。
sql::Connection * db = nullptr;
try {
db = get_driver_instance()->connect("tcp://localhost:3306", "admin", "admin");
db->setSchema("test_db");
}
catch(exception &e) {
return 1;
}
MySQL 连接器动态链接到应用程序。
LDFLAGS = -L/usr/local/mysql-connector-c++/lib64
LDLIBS = -lmysqlcppconn
CXXFLAGS = -Wall -Wextra -g -std=c++11 -O3
当我 运行 我的应用程序需要大约 13 033 µs
并且大约 10 000 µs
只是与 MySQL 的连接。我也试过使用静态库编译它,但没有帮助。
有什么办法可以加快数据库连接速度吗?
how to say to server: give me pointer to DB connection
MySQL 进程之间不能共享连接。如果您的 C++ 进程在处理 http 请求时启动,则它必须在那时打开一个新的 MySQL 连接。
更典型的是,high-performance 网络应用程序不会为每个 http 请求创建一个新进程。您正在使用 1990's-era CGI 协议设计代码并期望高性能,您应该更改架构。
例如,FastCGI 实现应该使用单个进程处理许多 http 请求。这样你就可以使用一个连接池,它提供 MySQL 连接到请求处理程序,而不需要每次都重新打开连接。
要加速单个 MySQL 连接,请考虑:
- 至少升级到 MySQL 5.7,以利用改进的连接速度。我以为我读到 8.0 进一步提高了这个速度,但我现在找不到相关的参考资料。
- 使用 UNIX 域套接字接口,它比 TCP/IP 连接速度更快。将客户端连接到 MySQL 服务器时,应该像使用“localhost”一样简单。
- 如果您确实使用 TCP/IP,则设置选项
skip_name_resolve
。
https://dev.mysql.com/doc/refman/8.0/en/host-cache.html 说:
If you have a very slow DNS and many hosts, you might be able to improve performance either by enabling
skip_name_resolve
to disable DNS lookups, or by increasing the value ofhost_cache_size
to make the host cache larger.