Начало » Использование СУБД » Firebird, HQbird, InterBase » IRequest против IStatement (по скорости)
IRequest против IStatement [сообщение #4014] |
Tue, 09 January 2024 20:12 |
SD
Сообщений: 411 Зарегистрирован: August 2022
|
Senior Member |
|
|
Был у меня такой код:
// Just insert the record
if (!data->stmt)
{
std::string query("INSERT INTO \"");
query += table.name;
query += "\" (";
query += table.fields;
query += ") VALUES (?";
for (unsigned i = 1; i < metadata->getCount(data->status("Get fields count")); i++)
{
query += ",?";
}
query += ')';
data->stmt.reset(data->tgtAtt->prepare(data->status("Prepare insert statement"), data->tgtTra.get(), query.size(), query.c_str(), SQL_DIALECT_V6, Firebird::IStatement::PREPARE_PREFETCH_NONE));
}
data->stmt->execute(data->status("Execute insert statement"), data->tgtTra.get(), metadata, dataBuffer.get(), nullptr, nullptr);
Поменял я его на вот такой.
if (!data->req)
{
data->req.reset(data->tgtAtt->compileRequest(data->status("Prepare insert statement"), blr->size(), blr->data()));
data->req->startAndSend(data->status("Execute insert statement"), data->tgtTra.get(), 0, 0, dataLength, dataBuffer.get());
}
else
{
data->req->send(data->status("Execute insert statement"), 0, 0, dataLength, dataBuffer.get());
}
Вся прочая обвеска осталась той же. Результат - работает на четверть быстрее. Что может в DSQL быть тормозом? Разбор MessageMetadata?..
|
|
|
|
|
|
Re: IRequest против IStatement [сообщение #4018 является ответом на сообщение #4015] |
Wed, 10 January 2024 01:37 |
SD
Сообщений: 411 Зарегистрирован: August 2022
|
Senior Member |
|
|
sim_84 писал(а) Tue, 09 January 2024 18:34Что конкретно ты меришь?
Полное время переливки существующей БД в новую. Это сеть 100 мегабит. Бутылочное горлышко сервера - ЦПУ. Параллельные подключения ускоряют общий процесс, но это отдельный вопрос.
Вместо IBatch я бы скорее задействовал IReplicator - он удобнее и скорее всего быстрее, но требуется поддержка тройки.
[Обновления: Wed, 10 January 2024 01:38] Известить модератора
|
|
|
|
Re: IRequest против IStatement [сообщение #4646 является ответом на сообщение #4100] |
Tue, 12 March 2024 01:37 |
SD
Сообщений: 411 Зарегистрирован: August 2022
|
Senior Member |
|
|
Сделал для эксперимента использование IReplicator. Вставка идёт в три раза быстрее, чем с помощью BLR.
IBatch, пожалуй, пробовать уже не буду.
|
|
|
Переход к форуму:
Текущее время: Sun Nov 24 04:04:11 GMT+3 2024
Общее время, затраченное на создание страницы: 0.01200 секунд
|