[Перевод] Третий шаг к повышению производительности Firebird

d5f658f29db535ca6f7ae25afa251bf4.jpg

Данная статья является третьей частью перевода руководства по повышению производительности Firebird за авторством А.Ковязина и Э.Грегорио от 23.05.2024 (и потому продолжается сквозная нумерация пунктов), а так же текстовой расшифровкой соответствующего видео.

3.1. CrystalDiskMark (для Windows)

Одной из наиболее частых причин замедления работы базы данных Firebird является недостаточная скорость работы диска. На нем СУБД Firebird хранит и извлекает данные, поэтому его производительность имеет критическое значение. Давайте проверим, насколько быстро ваш диск взаимодействует с базой данных Firebird.

Для оценки производительности дисков существует множество различных инструментов, которые измеряют скорость чтения и записи данных в мегабайтах в секунду (МБ/с) или в операциях ввода-вывода в секунду (IOPS). Один из самых популярных таких инструментов — программа CrystalDiskMark, которую можно скачать по ссылке: https://crystalmark.info/.

На основе нашего опыта, CrystalDiskMark предоставляет достаточно точную оценку скорости работы диска и может стать хорошей отправной точкой для анализа производительности. Ниже представлен пример вывода результатов тестирования программы CrystalDiskMark в текстовом формате:

------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
 MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
 KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):  2334.517 MB/s [   2226.4 IOPS] <  3588.90 us>
  SEQ    1MiB (Q=  1, T= 1):  1799.226 MB/s [   1715.9 IOPS] <   582.13 us>
  RND    4KiB (Q= 32, T= 1):   411.333 MB/s [ 100423.1 IOPS] <   318.20 us>
  RND    4KiB (Q=  1, T= 1):    25.074 MB/s [   6121.6 IOPS] <   163.02 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   999.476 MB/s [    953.2 IOPS] <  8341.94 us>
  SEQ    1MiB (Q=  1, T= 1):  1543.671 MB/s [   1472.2 IOPS] <   675.37 us>
  RND    4KiB (Q= 32, T= 1):    83.297 MB/s [  20336.2 IOPS] <  1564.70 us>
  RND    4KiB (Q=  1, T= 1):    70.380 MB/s [  17182.6 IOPS] <    57.63 us>

Profile: Default
   Test: 64 GiB (x5) [C: 89% (828/931GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec
   Date: 2022/11/29 17:32:33
     OS: Windows 11  [10.0 Build 22621] (x64)

Тем не менее, этого недостаточно, чтобы гарантировать, что диск действительно быстрый для Firebird, потому что тест очень синтетический.

3.2. Тест простой вставки, обновления и удаления

Для измерения производительности диска СУБД Firebird, компания IBSurgeon разработала специальный скрипт. Этот скрипт выполняет следующие действия:

  1. Создает новую базу данных.

  2. Вставляет 1 миллион записей в эту базу данных.

  3. Затем обновляет все эти записи.

  4. После этого удаляет все данные.

Этот скрипт работает через стандартный инструмент isql.exe, используя реальную конфигурацию Firebird. По своей сути, этот тест является однопоточным, что позволяет оценить производительность Firebird при выполнении «пиковых» операций по обработке данных. В результате выполнения теста создается база данных объемом 3,6 ГБ.

Результаты тестирования отображаются в виде количества миллисекунд, затраченных на выполнение следующих операций:

  • Вставка 1 миллиона записей (Insert 1 Mln);

  • Обновление 1 миллиона записей (Update 1 Mln);

  • Удаление 1 миллиона записей (Delete 1 Mln).

Также отдельно учитывается время, необходимое для завершения транзакций (коммит). Для удобства восприятия результатов они представляются в формате:

  • Количество вставок в секунду;

  • Количество обновлений в секунду;

  • Количество удалений в секунду.

С момента разработки данный скрипт был запущен на сотнях различных серверов. Многие пользователи из сообщества Firebird выполнили тестирование на своих системах и предоставили свои результаты. Это позволило создать таблицу и диаграмму, которые наглядно демонстрируют производительность Firebird на различных платформах.

3.3. Как запустить простой тест вставки-обновления-удаления

3.3.1. Тестирование скорости с использованием HQbird

Для проведения теста скорости диска можно воспользоваться инструментом HQbird. Чтобы начать тестирование, выполните следующие шаги:

  1. Откройте веб-консоль HQbird: Войдите в интерфейс веб-консоли инструмента.

  2. Найдите значок «Speed Test»: На правой стороне интерфейса найдите иконку с надписью «Speed Test».

  3. Выбор директории для тестирования: В появившемся выпадающем меню выберите путь к базе данных, где вы хотите запустить тест скорости.

  4. Запуск теста: Нажмите кнопку «Start», чтобы инициировать процесс тестирования.

Теперь остается только дождаться завершения процесса.

Результаты теста

Примерно через 5–10 минут (в зависимости от объема данных) будут готовы результаты тестирования скорости. Вы сможете увидеть их в соответствующем разделе веб-интерфейса HQbird.

Итоговый результат

Тест скорости будет отображен в виде подробных показателей производительности диска, что позволит вам оценить текущую скорость работы системы хранения данных.

3.3.2. Тест скорости на сервере с Firebird любой версии

Шаг 1: Подготовка к запуску теста

Чтобы начать тестирование производительности на любом сервере Firebird, вам необходимо получить соответствующий скрипт для выполнения тестов. Для этого перейдите по ссылке.

На этой странице вы найдете скрипт, который предназначен для тестирования операций вставки (INSERT), обновления (UPDATE) и удаления (DELETE) данных в базе данных Firebird.

Шаг 2: Сохранение скрипта

Скопируйте весь код, представленный на указанной выше веб-странице, и сохраните его в отдельный файл. Вы можете выбрать любое имя файла, но рекомендуется использовать расширение .sql, так как это поможет вашему редактору кода распознать тип содержимого.

Шаг 3: Запуск теста

После сохранения скрипта в файл, вы готовы к выполнению теста. Следуйте инструкциям, приведенным в документе, чтобы настроить параметры подключения к вашей базе данных Firebird и запустить скрипт. Это позволит вам провести тесты производительности и оценить скорость работы вашего сервера при выполнении различных операций с данными.

Этот процесс поможет вам эффективно протестировать производительность вашего сервера Firebird и выявить возможные узкие места в работе базы данных.

 /opt/script1.sql or c:\temp\script1.sql.

После этого необходимо изменить путь в первой строке скрипта, который указывает на создаваемую тестовую базу данных. Этот путь должен указывать на тот же диск, на котором находится основная база данных.

create database "localhost::inserttest4.fdb"
user ‘SYSDBA’ password ‘masterkey’ page_size 16384;

или, для Linux

create database "localhost://inserttest4.fdb"
user ‘SYSDBA’ password ‘masterkey’ page_size 16384;

Избегайте ситуации, когда тестируемый диск загружен длительной операцией, например резервным копированием больших объемов данных, или просто имеет пиковое количество пользователей. Лучший вариант — запустить скрипт в эксклюзивном режиме без пользователей.

Запустите скрипт из командной строки с помощью следующей команды:

/opt/firebird/bin/isql -i /opt/script1.sql

или

"C\:Program Files\Firebird\Firebird_4_0\isql.exe" -i .\script1.sql

Вывод будет на экране (ниже показана только первая часть для INSERT):

C:\HQbird\Firebird30> isql -i c:\Temp\test1.sql
Use CONNECT or CREATE DATABASE to specify a database
INSERTED_ROWS 1000000
ELAP_MS 58890
Current memory = 702384256
Delta memory = 3215392
Max memory = 704756112
Elapsed time= 58.894 sec
Buffers = 40960
Reads = 9
Writes = 88015
Fetches = 25332353
Current memory = 702342416
Delta memory = -41840
Max memory = 704756112
Elapsed time= 4.846 sec
Buffers = 40960
Reads = 1
Writes = 40254
Fetches = 2

3.3.3. Как интерпретировать результаты

Обратите внимание, что вам нужно сложить время выполнения операции с временем фиксации. После этого следует разделить число 1000000 на полученную сумму времени.

Для примера выше,

INSERT SPEED = 1000000 / (58.984+4.846) = 15666 inserts /seconds

Результаты операций в секунду

Например, такие показатели как:

  • 6000 вставок в секунду,

  • 5200 обновлений в секунду,

  • 7300 удалений в секунду

можно сравнивать с данными таблицы или графика измерений производительности.

Таблица с результатами

Для получения подробных данных о результатах тестов, вы можете обратиться к таблице, которая доступна по следующей ссылке.

Анализ результатов

Если ваши результаты находятся выше средней линии графика или таблицы, это указывает на то, что производительность диска находится в пределах нормы. Следовательно, причины замедления работы системы скорее всего связаны не с аппаратным обеспечением, а с другими факторами.

Проверка времени фиксации

Также стоит обратить внимание на время фиксации (commit) транзакций. Если вы замечаете, что более 20% общего времени тестирования приходится на процесс фиксации, это может свидетельствовать о проблемах с кэшированием записей.

3.4 Проблемы с SSD-дисками

Возможные причины медленной работы диска:

  1. Неправильная файловая система диска, на котором расположена база данных Firebird.

    Использование неподходящей файловой системы может привести к снижению производительности операций ввода-вывода с диском. Не рекомендуется использовать для Windows файловые системы FAT32 и exFAT, а для Linux XFS, ZFS и btrfs. Для Windows рекомендуется использовать ntfs и refs, а для Linux ext4

  2. Отсутствие блока резервного питания (BBU) для RAID-массива (или разряженная батарея).

    Если блок резервного питания отсутствует или его аккумулятор разряжен, это может значительно замедлить работу RAID-массива, так как операции записи будут выполняться без использования кэш-памяти.

  3. Отсутствие подходящего драйвера (или драйвер отключён производителем, чтобы предотвратить использование диска потребительского класса в серверной операционной системе).

    Неподходящий или отсутствующий драйвер может ограничить производительность диска, особенно если он предназначен для работы в условиях высокой нагрузки, характерных для серверов.

  4. Ограничения IOPS для виртуальной машины (например, в Azure очень низкие ограничения IOPS для виртуальных машин общего назначения).

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

  5. Активный процесс резервного копирования или другая обработка (копирование, перегруппировка и т.д.) больших объёмов данных на диске.

    Параллельные процессы, такие как создание резервных копий или другие интенсивные операции с данными, могут загружать диск и снижать его общую производительность.

    Фоновое копирование виртуальных машин, например CBT.

  6. Проблемы с самим диском: наличие плохих блоков, перегрев и т.п.

    Физические неисправности диска, появление битых секторов или перегрев, могут приводить к значительному падению скорости чтения/записи.

    Рекомендуется всегда проверять состояние диска через технологию самодиагностики S.M. A.R.T., которая предоставляет информацию о состоянии накопителя

Ссылка на видеоверсию на Youtube:  https://youtu.be/SDUd-zctEE0

Ссылка на Rutube:  https://rutube.ru/video/ac4d286b7466c16c64570bf4b54aeb4f/

Ссылка на Платформу:  https://plvideo.ru/watch? v=bZLBXyuGD5lY

Официальный канал на Substack:  https://firebirdfoundation.substack.com/ — подписывайтесь что бы получать информацию из первых рук.

Сообщество в ВК

Чат в Телеграме

© Habrahabr.ru