0
我想最近加速加密系统。而在这个系统中,它会使用mysql,所以它包含了<mysql.h>
文件。mysql_query()很慢
而且我发现系统运行缓慢不是因为加密/解密,而是因为处理了一些sql语句。
它将在运行时使用内存数据库,并使用来自<mysql.h>
的mysql_query()向数据库发出一些查询。查询是非常简单的,如:
UPDATE embedded_db.generic_prefix_staleness SET stale = FALSE WHERE cache_id = 2165265089
类似上面的查询,将斥资约28.42毫秒,它太慢了,我找不到原因。 那我该如何解决它?我应该添加/修改一些配置还是做其他事情?
和临时数据库信息:
void
Connect::do_connect(const std::string &server, const std::string &user,
const std::string &passwd, uint port)
{
const char *dummy_argv[] = {
"progname",
"--skip-grant-tables",
"--skip-innodb",
"--default-storage-engine=MEMORY",
"--character-set-server=utf8",
"--language=" MYSQL_BUILD_DIR "/sql/share/"
};
assert(0 == mysql_library_init(sizeof(dummy_argv)/sizeof(*dummy_argv),
const_cast<char**>(dummy_argv), 0));
conn = mysql_init(NULL);
/* Connect via TCP, and not via Unix domain sockets */
const uint proto = MYSQL_PROTOCOL_TCP;
mysql_options(conn, MYSQL_OPT_PROTOCOL, &proto);
/* Connect to real server even if linked against embedded libmysqld */
mysql_options(conn, MYSQL_OPT_USE_REMOTE_CONNECTION, 0);
{
my_bool reconnect = 1;
/* automatically reconnect */
mysql_options(conn, MYSQL_OPT_RECONNECT, &reconnect);
}
/* Connect to database */
if (!mysql_real_connect(conn, server.c_str(), user.c_str(),
passwd.c_str(), 0, port, 0,
CLIENT_MULTI_STATEMENTS)) {
LOG(warn) << "connecting to server " << server
<< " user " << user
<< " pwd " << passwd
<< " port " << port;
LOG(warn) << "mysql_real_connect: " << mysql_error(conn);
throw std::runtime_error("cannot connect");
}
}
更新1:
我已经注意到,它使用功能mysql_library_init()
,并在它的Makefile,它使用-L$(MYBUILD)/libmysqld
,所以它使用嵌入式MySQL服务器。也许我应该编辑嵌入式MySQL服务器的一些配置?
我不认为这是真的有可能没有看到DB模式或者明知roughtly它包含了回答。但要清楚的是,cache_id列上有一个索引,对吧? – MrEricSir
有关generic_prefix_staleness的模式如下所示:'CREATE TABLE IF NOT EXISTS embedded_db.generic_prefix_staleness(cache_id BIGINT UNIQUE NOT NULL,陈旧BOOLEAN NOT NULL,ID SERIAL PRIMARY KEY)ENGINE = InnoDB;',也许这里没有索引... – user2655973