Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как увеличить скорость записи в таблицу? / 11 сообщений из 11, страница 1 из 1
06.06.2019, 09:28
    #39823239
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Всем привет!

CentOS7 + MariaDB10.3.
Сервис пишет в БД сообщение при его появлении. Удивила низкая скорость записи - около 30 записей в секунду, обычный INSERT.

Провёл эксперимент.
Одна таблица, одно поле id (autoincrement).
С клиентской машины в той же сети в цикле записываю поочередно 1000 записей.
Скорость такая же около 30 записей в секунду.
Пакетная запись - это крайний вариант, ждать промежутки времени для создания пакета в моём случае плохо.

Как ускорить запись в таблицу?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
public class MariaDBTest {
    
    private static final int nEvents = 1000;
    
    private static final String url 
            = "jdbc:mariadb://192.168.0.158:3306/scjms_db";
    private static final String driver = "org.mariadb.jdbc.Driver";
    private static final String user = "root";
    private static final String password = "root";
    private static Connection connection = null;
    private static Statement statement = null;
    
    public static void main(String[] args) 
            throws SQLException, ClassNotFoundException {
        Class.forName(driver);
        connection = DriverManager.getConnection(
                url, user, password);
        statement = connection.createStatement();
        
        String sqlQuery = "insert into event_entity () values ()";
        
        long start = System.currentTimeMillis();
        for (int i = 0; i < nEvents; i++) {
            statement.execute(sqlQuery);
        }
        System.out.println("Saving of " + nEvents + " events takes " 
                        + (System.currentTimeMillis() - start));      
        
        statement.close();
        connection.close();
    }

}
...
Рейтинг: 0 / 0
06.06.2019, 09:45
    #39823256
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Molasar,

по умолчанию включен режим автокомит и каждый запрос выполняется в отдельной транзакции
надо быстрее - управляем транзакциями вручную и пишем несколько записей в одной транзакции
...
Рейтинг: 0 / 0
06.06.2019, 10:14
    #39823273
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
...
Рейтинг: 0 / 0
06.06.2019, 11:04
    #39823305
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Дегтярев ЕвгенийMolasar,

по умолчанию включен режим автокомит и каждый запрос выполняется в отдельной транзакции
надо быстрее - управляем транзакциями вручную и пишем несколько записей в одной транзакции
Я понимаю, что можно поднастроить базу, но 30 сек запись 1000 строк в таблицу с 1 полем в базу с настройками по умолчанию это норм? Или я что то не понимаю?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE t1 (c1 INT);
DELIMITER // 
CREATE PROCEDURE myinsert() begin
DECLARE i INT DEFAULT 1; 
WHILE i<1001 DO
INSERT INTO scjms_db.t1 (c1) Values (i);
SET i=i+1; 
END WHILE;
end //
CALL myinsert();


время выполнения - 30 сек.
...
Рейтинг: 0 / 0
06.06.2019, 11:43
    #39823334
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
miksoft https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
В какое значение установлен?
все настройки по умолчанию. AutoCommit enable через MySql WorkBench
...
Рейтинг: 0 / 0
06.06.2019, 13:02
    #39823400
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Локально на моей машине MariaDB по умолчанию пишет 1000 строк за 0.468 сек.
Видно проблема где-то в настройках сервера. Будем смотреть.
Это уже 3-я тема "Администрирование")))
...
Рейтинг: 0 / 0
06.06.2019, 23:56
    #39823791
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
MolasarВидно проблема где-то в настройках сервера.Я же дал вам конкретную настройку. Вы ее пробовали изменить?
MolasarС клиентской машины в той же сети в цикле записываю поочередно 1000 записей.А почему в цикле, а не все сразу?
...
Рейтинг: 0 / 0
07.06.2019, 10:07
    #39823878
Molasar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
miksoftMolasarВидно проблема где-то в настройках сервера.Я же дал вам конкретную настройку. Вы ее пробовали изменить?
MolasarС клиентской машины в той же сети в цикле записываю поочередно 1000 записей.А почему в цикле, а не все сразу?
innodb_flush_log_at_trx_commit = 1
Но менять не хочется, из-за отказоустойчивости.

В цикле поочередно - это эмуляция реальной работы. Сообщения появляются время от времени и сохранять их надо по мере появления, пакетная запись не очень подходит. Это крайний вариант.
...
Рейтинг: 0 / 0
07.06.2019, 10:25
    #39823889
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Molasar,

Тогда меняйте диск на диск с низкой задержкой, SSD NVME или Optane какой-нибудь.
...
Рейтинг: 0 / 0
07.06.2019, 11:00
    #39823900
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
Или дисковый контроллер с кэшем на запись и с батарейкой.
...
Рейтинг: 0 / 0
07.06.2019, 11:12
    #39823909
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как увеличить скорость записи в таблицу?
авторВидно проблема где-то в настройках сервера. Будем смотреть.

первоманс схема в помощ.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как увеличить скорость записи в таблицу? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]