Тестирование производительности Redmine на MySQL с хранилищами RocksDB и InnoDB

Redmine на MyRocks

Введение

Facebook на базе своего хранилища RocksDB создал storage engine для MySQL - MyRocks. Работающая реализация MyRocks в виде MySQL 5.6 с патчами от Facebook передана в open source и размещается на GitHub - https://github.com/facebook/mysql-5.6. MyRocks является альтернативой InnoDB и дает несколько преимуществ:

  • Снижение объема записи
  • Лучшая компрессия
  • Уменьшения случайных чтений

Все это в сумме существенно повышает скорость транзакций на HDD и уменьшают изнашиваемость SSD, а также ускоряют репликацию.

MariaDB и Percona уже ведут работы по интеграции MyRocks в свои форки MySQL: Facebook MyRocks at MariaDB, Announcing MyRocks in Percona Server for MySQL. MariaDB объявила, что MyRocks будет доступен в release candidate 10.2 этой зимой. На Jetware в число альтернатив MySQL добавлена оригинальная реализация MyRocks от Facebook на базе MySQL 5.6.

Тестирование производительности на синтетических тестах показывает впечатляющие результаты. В зависимости от типа устройства хранения, выигрыш по скорости составляет от 20% до 10x. Результаты тестирования LinkBench можно посмотреть в публикации Yoshinori Matsunobu MyRocks: A space- and write-optimized MySQL database и в блоге Mark Callaghan, например, MyRocks: use less IO on writes to have more IO for reads. Эти тесты во многом ориентируются на большие объемы баз данных (десятки и сотни гигабайт) и мощные машины.

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

Первым мы тестируем Redmine. Мы знаем как он устроен, активно используем его в разработке и поэтому тестирование имеет для нас также практическую ценность - если результат окажется хорошим, мы переходим на MyRocks.

Условия тестирования

Программное обеспечения

Мы используем Redmine 3.3.1 с Ruby 2.3.1, в конфигурации по умолчанию, без дополнительных плагинов.

В качестве серверов баз данных используем:

Все бинарники собраны одним компилятором GCC 4.9.3, с рекомендуемыми параметрами сборки и оптимизации.

Операционная система - Ubuntu 14.04 x86_64, Linux kernel 3.13.0. Файловая система - ext4.

Наборы данных

Перед выполнением тестов база данных наполняется сгенерированными заранее проектами, пользователями и задачами. Таких вариантов тоже три:

  1. Малый набор
    • 30 пользователей
    • 3 проекта и 10 подпроектов второго уровня, в каждом проекте по 10 пользователей
    • 1000 задач с 10 комментариями каждая
  2. Большой набор
    • 1000 пользователей
    • 10 проектов первого, 100 подпроектов второго и 10 подпроектов третьего уровня, в каждом проекте по 10 пользователей
    • 10000 задач с 10 комментариями каждая
  3. Гигантский набор
    • 10000 пользователей
    • 100 проектов первого, 1000 подпроектов второго и 100 подпроектов третьего уровня, в каждом проекте по 10 пользователей
    • 100000 задач с 10 комментариями каждая

Большинство реальных случаев использования Redmine приходятся на размеры между Малым и Большим. Объемы уровня Гигантского бывают значительно реже.

Объем занятого пространства

myrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16smalllargegiant0 Mb110 Mb220 Mb330 Mb440 Mb550 Mb660 Mb770 Mb880 Mb990 Mb6.71561.168596.52330.527123.246913.16830.113122.832912.754Data set typeFile space usage
sizemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16
small6.71530.52730.113
large61.168123.246122.832
giant596.523913.168912.754

Исходные данные

Столбцы показывают объемы занятого пространства для разных баз данных и разных наборов данных (меньше - лучше)

Оборудование

  • Процессор: 4-core Xeon E31220 3.10GHz
  • Память: 16 Gb RAM, DDR3 1333
  • HDD: RAID mirror, 2 x Western Digital RE4 1 Tb

Виртуальная машина

Мы имитируем работу Redmine в условиях, близких работе у облачного провайдера или на офисном сервере. Для этого мы выделяем не весь физический сервер, а размещаем его в виртуальной машине с гораздо меньшим количеством ресурсов и имитируем различную нагрузку на дисковую систему со стороны соседей. В качестве платформы виртуализации используется Xen 4.6, в dom0 - Linux kernel 3.16.7. Устройство хранения разбивается с помощью LVM, обычное linear, без thin provision и снэпшотов. Том размещается посередине HDD.

Использовались три конфигурации виртуальных машин:

  1. 1 Gb RAM, 4 CPU, HDD 16 Gb
  2. 2 Gb RAM, 4 CPU, HDD 16 Gb
  3. 8 Gb RAM, 4 CPU, HDD 16 Gb

Тестируемые операции

Мы проверяем скорость работы наиболее часто используемых в Redmine операций - создание задач, добавление комментариев к задачам, изменение статуса и ответственного лица задачи. Из этих операций мы создали два теста, два рабочих цикла задачи:

  • Создание задачи

    Создание задачи в проекте одним участником проекта, назначение ее на другого участника проекта и добавление в нее 10 комментариев от лица других участников проекта.

  • Обработка 10 задач

    Получение пользователем 10 назначенных на него задач, переведение их всех в In Progress, и затем поочередное переведение задачи в Resolved и назначение ее на создателя задачи.

Тесты проводятся на 1, 2 и 4 параллельных процессах Redmine.

Сторонняя нагрузка на диск

Нагрузка создается с помощью утилиты fio, которая читает и пишет 50/50 случайные блоки в оставшуюся часть диска. Мы имитировали несколько уровней нагрузки на диск, которые характерны для типовых случаев работы виртуальных машин - у провайдеров публичных облаков и VPS, или при запуске на собственном сервере нескольких виртуальных машин под VMWare, Hyper-V, KVM или XenServer.

Для имитации неполной загрузки мы запускаем fio с ограничением IOPS с помощью ключа --rate_iops и замеряем утилизацию диска. При 100% однопоточной нагрузке это около 80 IOPS. Утилизация 25% создается нагрузкой 14 IOPS. Большая нагрузка имитируется увеличением числа потоков ключем --iodepth.

В зависимости от количества соседних виртуальных машин, характера их работы и пиков нагрузки, загруженность диска может серьезно отличаться как у облачных провайдеров и VPS, так и на собственном сервере. Поэтому мы проводили тестирование при отсутствии сторонней нагрузки, при незначительной однопоточной нагрузке (14 IOPS, 25%), так и при и полных сторонних нагрузках в 1, 2 и 4 потока.

Измеряемые значения

Мы измеряем полное время выполнения каждой операции Redmine на большом числе операций и сравниваем среднее время выполнения. Первые 10% результатов игнорируются - на них мы разогреваем систему. Последние 10% результатов игнорируются для того, чтобы исключить хвостовое искажение из-за разного времени завершения параллельных процессов.

Измерения проводятся в разных комбинациях условий:

  • для разных конфигураций виртуальных машин и разных наборов данных
  • для разного числа параллельных процессов Redmine (основная нагрузка) и разных сторонних нагрузок на диск

Время выполнения замеряется для всех трех баз - MyRocks MySQL, MySQL и MariaDB. Мы также вычисляем разницу в скорости MyRocks MySQL по отношению к MySQL и MariaDB. Собранные данные представлены в виде графиков.

Результаты тестирования

Малый набор данных и малая виртуальная машина

  • Виртуальная машина: 1 Gb RAM, 4 CPU, HDD 16 Gb
  • Набор данных: 30 пользователей, 13 проектов и подпроектов, 1000 задач

Графики времени выполнения операций

1) создание задачи; 2) обработка 10 задач

1gb-4cpu small createmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.030.060.090.120.150.180.210.240.2701.12.23.34.45.56.67.78.89.9Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.0180.0220.0221.2371.233
1/25%0.0180.0250.0261.3781.398
1/x10.0190.0230.0231.2611.248
1/x20.0190.0330.0341.8021.828
1/x40.0180.0380.0382.0542.071
2/00.020.0240.0241.1961.199
2/25%0.0190.0260.0271.3621.388
2/x10.020.0250.0251.2551.27
2/x20.020.0380.0371.8851.819
2/x40.020.0440.0432.1882.154
4/00.0220.0490.0312.2031.385
4/25%0.0240.080.083.4073.384
4/x10.0240.1330.1225.4895.049
4/x20.0230.1580.166.7776.845
4/x40.0230.2270.2269.7139.651
1gb-4cpu small imitatemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.250.50.7511.251.51.7522.2500.91.82.73.64.55.46.37.28.1Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.2450.2830.2891.1551.18
1/25%0.250.3040.3031.2121.209
1/x10.2630.2920.2931.1121.115
1/x20.2520.3870.3971.5321.573
1/x40.2510.4270.4451.7021.774
2/00.2640.3110.3051.1781.156
2/25%0.2630.3080.3311.1741.259
2/x10.2660.3070.3071.1531.153
2/x20.2680.420.3991.5681.489
2/x40.2730.4780.4691.7541.72
4/00.2950.4840.3381.6391.145
4/25%0.3110.6590.7082.1182.274
4/x10.3131.0330.9933.33.173
4/x20.3271.3441.3114.114.009
4/x40.3082.1492.2456.9847.295

Исходные данные

Столбцы показывают время выполнения операции (меньше — лучше). Линии показывают во сколько раз сервер MySQL или MariaDB был медленнее сервера MyRocks MySQL.

Минимальная нагрузка - один процесс Redmine и отсутствует сторонняя нагрузка. Максимальная нагрузка - 4 процесса Redmine и 4 полных потока сторонней нагрузки на диск.

Мы видим, что время создания задачи для MyRocks при увеличении нагрузки до максимума меняется незначительно, и возрастает от 0.018 сек до 0.023 сек, на 23%. Для MySQL и MariaDB минимальное время создания задачи составляет 0.022 сек и возрастает в десять раз до 0.23 сек при максимальной нагрузке. При минимальной нагрузке MySQL и MariaDB оказываются медленнее на 24%, чем MyRocks; при максимальной нагрузке они оказываются медленнее в 9.5 раз.

Время обработки задач для MyRocks вырастает от 0.245 сек при минимальной нагрузке до 0.327 сек при максимальной, на 33%. Для MySQL и MariaDB минимальное время обработки задач возрастает примерно в 7 раз - с 0.283 сек при минимальной нагрузке до 2.245 сек при максимальной.

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

Большой набор данных и средняя виртуальная машина

  • Виртуальная машина: 2 Gb RAM, 4 CPU, HDD 16 Gb
  • Набор данных: 1000 пользователей, 120 проектов и подпроектов, 10000 задач

Графики времени выполнения операций

1) создание задачи; 2) обработка 10 задач

2gb-4cpu large createmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.0070.0140.0210.0280.0350.0420.0490.0560.06300.30.60.91.21.51.82.12.42.7Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.0180.0240.0241.3011.307
1/25%0.0180.0260.0261.431.408
1/x10.0180.0250.0251.3321.34
1/x20.0190.0360.0361.9551.916
1/x40.0190.0410.0412.2172.185
2/00.020.0260.0261.321.33
2/25%0.0190.0270.0281.4131.432
2/x10.020.0270.0291.3331.444
2/x20.020.0390.041.9532.028
2/x40.020.0480.0472.4582.414
4/00.0220.030.0291.3971.334
4/25%0.0240.0310.031.2521.223
4/x10.0220.0320.0311.4271.39
4/x20.0220.0460.0452.0682.001
4/x40.0230.0560.0542.4192.343
2gb-4cpu large imitatemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.070.140.210.280.350.420.490.560.630.91.051.21.351.51.651.81.952.12.25Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.2480.2960.2941.1911.185
1/25%0.250.3170.3121.2711.251
1/x10.2550.3430.3241.3461.271
1/x20.2540.4580.4271.8031.681
1/x40.2570.50.4781.9461.861
2/00.2650.3190.3211.2051.212
2/25%0.2650.3380.3391.2771.281
2/x10.2670.340.3361.2731.259
2/x20.270.4750.4791.7571.77
2/x40.2730.5590.5372.051.969
4/00.3280.3660.3621.1171.104
4/25%0.3240.3720.3671.151.135
4/x10.3290.3640.3921.1051.191
4/x20.310.5110.5061.6481.631
4/x40.3310.5950.5811.7991.757

Исходные данные

Столбцы показывают время выполнения операции (меньше — лучше). Линии показывают во сколько раз сервер MySQL или MariaDB был медленнее сервера MyRocks MySQL.

Минимальная нагрузка - один процесс Redmine и отсутствует сторонняя нагрузка. Максимальная нагрузка - 4 процесса Redmine и 4 полных потока сторонней нагрузки на диск.

В данной конфигурации ресурсы виртуальной машины лучше соответствуют объему данных и нагрузке. Для MyRocks время создания задачи остается прежним - от 0.018 сек до 0.023 сек, вырастая на 23%. Для MySQL и MariaDB минимальное время становится чуть больше - 0.023 сек и вырастает только в два раза - до 0.056 сек при максимальной нагрузке. Они оказываются медленнее, чем MyRocks, на 30% при минимальной нагрузке, и в 2.3 раза при максимальной.

Для обработки задач ситуация похожая. Время выполнения у MyRocks при увеличении нагрузки слабо растет от 0.248 сек до 0.331 сек. Для MySQL и MariaDB минимальное время уже на 10% больше, чем для Малого набора данных и составляет 0.296 сек. При максимуме нагрузки время увеличивается почти в два раза - до 0.595 сек. MySQL и MariaDB оказываются медленнее, чем MyRocks, на 18% при минимальной нагрузке и на 80% при максимальной.

Гигантский набор данных и большая виртуальная машина

  • Виртуальная машина: 8 Gb RAM, 4 CPU, HDD 16 Gb
  • Набор данных: 10000 пользователей, 1200 проектов и подпроектов, 100000 задач

Графики времени выполнения операций

1) создание задачи; 2) обработка 10 задач

8gb-4cpu giant createmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.010.020.030.040.050.060.070.080.0900.40.81.21.622.42.83.23.6Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.020.0260.0291.3011.434
1/25%0.0210.0280.0311.3741.511
1/x10.0210.0360.0381.7341.862
1/x20.0210.0510.0532.4662.585
1/x40.0210.0590.0592.8082.797
2/00.0220.0290.0311.3441.413
2/25%0.0210.0290.0311.3721.468
2/x10.0220.0390.0451.7842.035
2/x20.0220.0590.0622.6892.844
2/x40.0220.0680.0743.0313.308
4/00.0270.0330.0361.2421.348
4/25%0.0270.0340.0371.2611.381
4/x10.0260.0430.0461.6761.793
4/x20.0280.0690.0722.4952.612
4/x40.0270.0860.0883.1753.253
8gb-4cpu giant imitatemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower1/01/25%1/x11/x21/x42/02/25%2/x12/x22/x44/04/25%4/x14/x24/x400.150.30.450.60.750.91.051.21.3500.511.522.533.544.5Parallel jobs / external disk loadMean operation time, secondsRelative slowdown, times
parallel/loadmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16mysqld-5.6.31 slowermariadb-mysqld-10.1.16 slower
1/00.2550.3130.3091.2291.213
1/25%0.2510.3350.331.3321.314
1/x10.2560.4530.4441.7691.733
1/x20.2580.6240.5572.4222.164
1/x40.260.6750.6212.5952.384
2/00.2670.3380.3351.2661.255
2/25%0.2690.3810.3761.4141.397
2/x10.2740.5730.6012.0922.194
2/x20.2660.7540.7812.8332.931
2/x40.2720.8810.8563.2453.154
4/00.3130.3870.3811.2361.218
4/25%0.3280.4370.4941.3311.506
4/x10.3410.7120.7682.0872.251
4/x20.3381.0411.0683.0843.164
4/x40.331.2591.2423.8123.758

Исходные данные

Столбцы показывают время выполнения операции (меньше — лучше). Линии показывают во сколько раз сервер MySQL или MariaDB был медленнее сервера MyRocks MySQL.

Минимальная нагрузка - один процесс Redmine и отсутствует сторонняя нагрузка. Максимальная нагрузка - 4 процесса Redmine и 4 полных потока сторонней нагрузки на диск.

Десятикратное увеличение объема данных немного увеличило время создания задачи для всех баз: 0.020 сек для MyRocks, 0.026-0.029 для MySQL и MariaDB. Увеличение нагрузки замедляет MyRocks на 35% до 0.027 сек. Для MySQL и MariaDB рост нагрузки сказывается на скорости больше - при максимальной нагрузке время увеличивается в 3 раза - до 0.088 сек, и они оказываются медленнее, чем MyRocks, в 3.2 раза.

При обработке задач время выполнения MyRocks увеличивается на 32%, от 0.255 до 0.33 сек. У MySQL и MariaDB время увеличивается в 4 раза - с 0.309 до 1.242 сек. И они отстают от MyRocks в 3.8 раз.

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

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

Объем памяти

Для работы Redmine объем 1 Gb является минимальным рекомендуемым. Для эффективного кэширования данных в page cache размер памяти уже недостаточен, поэтому скорость работы очень чуствительна к нагрузке на диск. Задержки возникают уже на SELECT-запросах, так как для них приходится считывать данные с диска. Меньший объем хранимых данных у RocksDB привел к более эффективному кэшированию чтения, чем для InnoDB. Поэтому даже при большой нагрузке скорость операций у MyRocks изменилась совсем незначительно.

При увеличении памяти до 2 Gb основные используемые данные уже вмещаются в page cache и серверу БД уже не нужно постоянно их считывать с диска. В этом случае диск является узким горлышком только при изменениях в базе. Транзакции записываются на диск без writeback cache и интенсивная дисковая нагрузка увеличивает время ожидания завершения записи.

Организация хранения данных в RocksDB, способствующая линейной записи, и уменьшенный объем записываемых данных, уменьшают количество операций записи. Поэтому мы наблюдаем, что даже при высокой дисковой нагрузке, скорость выполнения транзакций в RocksDB лишь немного уменьшается и значительно превышает скорость при использовании InnoDB.

Скорость RocksDB vs InnoDB

Исходя из принципа работы RocksDB, мы ожидали ускорения при выполнении транзакций. На синтетических тестах производительности разработчики получали 10-кратный прирост скорости в работе СУБД. Для приложений, таких как Redmine, время выполнения операции состоит из времени выполнения Ruby-скрипта и времени выполнения запроса в БД. Разумеется, замена storage engine на RocksDB никак не увеличит скорость работы Ruby, и эта составляющая остается неизменной. Но и с учетом этого прирост в скорости за счет ускорения БД оказался впечатляющим.

Здесь мы приводим краевые результаты тестирования для виртуальной машины 2 Gb и Большого набора данных, и для виртуальной машины 8 Gb и Гигантского набора данных. Мы не учитываем здесь тестирование на высокой нагрузке для виртуальной машины 1 Gb, так как это случай экстремальной нехватки ресурсов.

Графики времени выполнения операций

1) создание задачи; 2) обработка 10 задач

createmyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.161/0/2gb-4cpu/large1/0/8gb-4cpu/giant4/x4/2gb-4cpu/large4/x4/8gb-4cpu/giant00.0250.050.0750.10.0180.020.0230.0270.0240.0260.0560.0860.0240.0290.0540.088Parallel jobs / External disk load / Virtual machine / Data set typeMean operation time, seconds
parallel/load/key/sizemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.16
1/0/2gb-4cpu/large0.0180.0240.024
1/0/8gb-4cpu/giant0.020.0260.029
4/x4/2gb-4cpu/large0.0230.0560.054
4/x4/8gb-4cpu/giant0.0270.0860.088
imitatemyrocks-mysqld-5.6mysqld-5.6.31mariadb-mysqld-10.1.161/0/2gb-4cpu/large1/0/8gb-4cpu/giant4/x4/2gb-4cpu/large4/x4/8gb-4cpu/giant00.40.81.21.60.2480.2550.3310.330.2960.3130.5951.2590.2940.3090.5811.242Parallel jobs / External disk load / Virtual machine / Data set typeMean operation time, seconds

Столбцы показывают время выполнения операции (меньше — лучше)

Минимальная (1 процесс Redmine без сторонней дисковой нагрузки) и максимальная нагрузка (4 процесса Redmine и 4 потока полной сторонней нагрузки на диск)

При низкой нагрузке Redmine на MyRocks оказался на 15%-25%, быстрее, чем на MySQL и MariaDB. Размер хранимых данных мало влияет на эту скорость и у RocksDB, и у InnoDB - увеличение числа задач Redmine в 10 раз увеличило время выполнения примерно на 10%.

При высокой нагрузке (увеличении числа параллельных процессов и повышении сторонней дисковой нагрузки) поведение полностью меняется. Отрыв MyRocks стал больше - от 2-кратного до почти 4-кратного. Размер хранимых данных также стал существенно влиять на скорость - 10-кратное увеличение числа задач Redmine заметно (в 1.5-2 раза) замедлило скорость выполнения на серверах с InnoDB, и менее заметно замедлило выполнение на RocksDB (0-15%).

Одновременное увеличение объема данных и высокая нагрузка замедлили работу Redmine с MyRocks в 1.5 раза, в то время как Redmine на MySQL и MariaDB стал медленнее в 4 раза.

Стабильность работы

При тестировании мы обнаружили нюанс поведения одного из SQL-запросов Redmine при поиске с учетом parent issues. Из-за него некоторые виды поиска оказывались медленнее в MyRocks. Но это небольшое упущение со стороны Redmine - parent_id не имел в таблице индекс. Также мы столкнулись с небольшим багом, приводящим к расходу CPU после некоторых конфликтных транзакций в MyRocks.

Мы не сталкивались с другими проблемами. По словам разработчиков, Facebook использует MyRocks в production уже давно.

Вы можете использовать MyRocks уже сейчас или дождаться более широкого тестирования после появления MyRocks в MariaDB release candidate 10.2 или в Percona Server for MySQL.

MyRocks размещена в репозитории программ Jetware как одна из альтернатив mysqld и доступна в конструкторах стеков PHP (LAMP, LEMP), Ruby (RAMP, REMP) или в конструкторах приложений, например, Redmine.

Несколько недель назад мы перевели свой внутренний Redmine-сервер на MyRocks и успешно в нем работаем.

Заключение

  1. Redmine с RocksDB оказался быстрее, чем с InnoDB - от 20% при минимальной нагрузке до 3 раз при максимальной.
  2. Увеличение объема данных и нагрузки, замедлившее Redmine с InnoDB в 4 раза, всего лишь в 1.5 раза замедлило Redmine с RocksDB.

P.S. Тестирование MyRocks с другими приложениями

В данном тесте мы проверили производительность MyRocks для приложения Redmine. В следующих тестах мы собираемся проверить производительность MyRocks с PHP-приложениями. Скорее всего, первым будет Drupal.

Published
2017-01-12