SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Новая статья: Параллельное чтение данных в СУБД Firebird
Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4202] Wed, 24 January 2024 13:40 Переход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Компания IBase/IBSurgeon опубликовала новую статью  Параллельное чтение данных в СУБД Firebird
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4208 является ответом на сообщение #4202] Wed, 24 January 2024 14:58 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 77
Зарегистрирован: July 2022
Member
IMHO, в тесте Intel Core i3 8100 опечатка, --parallel=2 должно быть при втором запуске.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4209 является ответом на сообщение #4208] Wed, 24 January 2024 15:09 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
ggreggory, спасибо обновил у себя. Скажу Алексею чтобы на сайте поправил
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4219 является ответом на сообщение #4209] Wed, 24 January 2024 15:59 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Я тут тоже экспериментирую с одним data pump-ом и получил несколько другие результаты. Попробуйте построить график времени, затрачиваемого на вызов fetch(). Лично у меня наблюдается очень ярко выраженный провал в момент исчерпания клиентского буфера prefetch. Причём этот провал настолько велик, что полностью сжирает эффект многопоточности.

И ещё использование embedded режима, где этот буфер отсутствует как класс, тоже сильно меняет картину.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4223 является ответом на сообщение #4219] Wed, 24 January 2024 16:05 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Ну если бы он сжирал полностью эффект многопоточности, то результаты были бы иными.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4233 является ответом на сообщение #4223] Thu, 25 January 2024 01:49 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Это у меня он сжирает. Поэтому у меня один читающий поток неспособен стать бутылочным горлышком. Я проверял до 63-х пишущих потоков, ожидания их практически нет.

У вас другое приложение: чистый экспорт. Узкие места расположены чуть иначе. Но, думается мне, если посылать префетч-пакет чуть раньше, то и ваш случай можно ускорить.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4235 является ответом на сообщение #4233] Thu, 25 January 2024 09:27 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
У меня нет железа с 64-ядрами. Проверял на 12-ядерном компе, и как ожидается 6-ядер работали в сервере и 6 - в моём приложении.

И ещё:



  • запись почти всегда медленней чтения
  • на записи в одну таблицу пишущие потоки будут драться за страницу данных. В этом плане Влад делал улучшения и насколько я знаю они доступны только с 5-ки
  • даже в 5-ке запись для записи в одну таблицу количество потоков надо ограничивать разумной величиной (например 8-потоков)

[Обновления: Thu, 25 January 2024 09:48]

Известить модератора

Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4247 является ответом на сообщение #4235] Thu, 25 January 2024 16:20 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Если у тебя клиентский поток жрёт целое ядро - что-то в нём не так. У меня приложение даже не неразумном количестве потоков использует считанные проценты ЦПУ, весь процессор сжирает собственно Firebird.

Делал Влад, но не в 5-ке. Заблокированные страницы данных начали пропускаться при поиске места для вставки ещё в двойке.

Не надо. Благодаря оптимизации, описанной выше, эти потоки просто разлягутся по разным страницам данных. Проверяется легко: в результате статистика таблицы показывает количество страниц с заполнением 0-10% в количестве примерно равном количеству вставляющих подключений. Как я уже говорил, у меня скорость вставки с увеличением потоков растёт вплоть до момента как сервер упрётся в процессор.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4249 является ответом на сообщение #4247] Thu, 25 January 2024 16:49 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
Цитата:
У меня приложение даже не неразумном количестве потоков использует считанные проценты ЦПУ, весь процессор сжирает собственно Firebird.
Это потому, что у тебя приложение большую часть времени проводит в ожидании. И если на чтении там префетч играет роль, то запись каждой записи придётся ждать.

Цитата:
Заблокированные страницы данных начали пропускаться при поиске места для вставки ещё в двойке.
В двойке ещё экстентов не было. В куда она там будет запись вставлять, если заблокированная страница пропущена? В тройке поверю.

в 5-ке была оптимизация именно для batch режима вставки. Появится Влад может поточнее сказать что именно.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4251 является ответом на сообщение #4249] Fri, 26 January 2024 01:38 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
sim_84 писал(а) Thu, 25 January 2024 14:49

В двойке ещё экстентов не было. В куда она там будет запись вставлять, если заблокированная страница пропущена?
В следующую незаблокированную или новую страницу. Поиск места идёт линейно по всем страницам таблицы, не помеченным как "полная". К экстентам это не имеет никакого отношения.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4252 является ответом на сообщение #4249] Fri, 26 January 2024 11:43 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 358
Зарегистрирован: August 2022
Senior Member
sim_84 писал(а) Thu, 25 January 2024 15:49
в 5-ке была оптимизация именно для batch режима вставки.
Она позволяет каждому коннекту, заливающему данные, работать со "своей" DP
Без этого параллельная вставка в одну и ту же таблицу очень плохо масштабируется.
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4261 является ответом на сообщение #4252] Fri, 26 January 2024 16:19 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Это какой-то новый механизм сверх старого?
// Make few tries to lock consecutive data pages without waiting. In highly
// concurrent environment with shared page cache it could be faster than wait
// in OS for first candidate page.
int tries = (dbb->dbb_config->getServerMode() == MODE_SUPER) ? 8 : 0;
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4262 является ответом на сообщение #4261] Fri, 26 January 2024 16:31 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 358
Зарегистрирован: August 2022
Senior Member
SD писал(а) Fri, 26 January 2024 15:19
Это какой-то новый механизм сверх старого?
Да
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4265 является ответом на сообщение #4262] Sat, 27 January 2024 15:48 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Не начинает старый механизм после этого только мешать?
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4266 является ответом на сообщение #4265] Sat, 27 January 2024 17:52 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 358
Зарегистрирован: August 2022
Senior Member
SD писал(а) Sat, 27 January 2024 14:48
Не начинает старый механизм после этого только мешать?
Нет
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4294 является ответом на сообщение #4247] Tue, 30 January 2024 15:36 Переход к предыдущему сообщениюПереход к следующему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 98
Зарегистрирован: June 2022
Member
SD писал(а) Thu, 25 January 2024 16:20
Если у тебя клиентский поток жрёт целое ядро...
то это так же может означать (если этот поток еще и с диском работает), что дисковый ввод-вывод настолько быстр, что работа потока упирается именно в это самое ядро.
У нас есть тест insert/update/delete на 1 млн записей, скриптом. Так вот на этом тесте нет разницы между дисками sata3 860 evo и nvme 970 evo. Хотя 860й тупо ограничен шиной sata3 в 600мб сек, а nvme ограничен своей шиной в 3гиг в секунду.
А потому что 1 ядро "не успевает".
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4295 является ответом на сообщение #4294] Tue, 30 January 2024 15:54 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 412
Зарегистрирован: August 2022
Senior Member
Скриптом... (Где тут смайлик убиться фейспалмом?)
Я тут в своей теме рассказываю, что препарированный DSQL на четверть медленнее препарированного BLR, а вы ещё сверху затраты на собственно препарирование прибавляете каждой записи. Так и до big data можно скатиться...
Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4297 является ответом на сообщение #4295] Tue, 30 January 2024 16:31 Переход к предыдущему сообщениюПереход к следующему сообщению
sim_84 в настоящее время не в онлайне  sim_84
Сообщений: 330
Зарегистрирован: June 2022
Senior Member
SD писал(а) Tue, 30 January 2024 15:54
Скриптом... (Где тут смайлик убиться фейспалмом?)
Я тут в своей теме рассказываю, что препарированный DSQL на четверть медленнее препарированного BLR, а вы ещё сверху затраты на собственно препарирование прибавляете каждой записи. Так и до big data можно скатиться...
А Batch API быстрее обоих

Re: Новая статья: Параллельное чтение данных в СУБД Firebird [сообщение #4472 является ответом на сообщение #4295] Wed, 14 February 2024 14:30 Переход к предыдущему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 98
Зарегистрирован: June 2022
Member
ну не скриптом, а процедурой, конечно. Я имел в виду что сам тест это скрипт. Что-ж мы, нелюди, в скрипт миллион инсертов вставлять...
Предыдущая тема: Fb 5.0.1.1329 очень медленный подсчет записей
Следующая тема: ANN: Практический подход к миграции на Firebird 5
Переход к форуму:
  


Текущее время: Wed Dec 04 12:14:49 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01205 секунд