Mysql_query () медленно

Я хочу ускорить систему шифрования в последнее время. И в этой системе он будет использовать MySQL, поэтому он включает в себя <mysql.h> файл.

И я обнаружил, что система работает медленно не из-за шифрования / дешифрования, а из-за некоторого оператора SQL.

Он будет использовать базу данных памяти во время выполнения и выдаст некоторый запрос к базе данных, используя mysql_query () из <mysql.h>, Запрос очень прост, например:

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. Может мне стоит отредактировать какой-нибудь конфиг для Embedded MySQL Server?

0

Решение

Он использует встроенный сервер, поэтому нам нужно добавить некоторые настройки в my.cnf лайк:

[embedded]
innodb_flush_log_at_trx_commit = 0
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector