如何加速 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.