Производительность AWS Neptune
Я работаю над переносом данных из нашей базы данных, которая является базой данных магазина rdf, в AWS Neptune, и у меня возникают некоторые проблемы с производительностью.
у меня есть db.r4.large
Экземпляр Нептуна и экземпляр ec2 на том же виртуальном частном процессоре, что и Нептун.
По сути, я пытаюсь загрузить данные в Нептун, используя следующий http-запрос: <myinstance>:8182/sparql
,
На самом деле, я отправляю http-запрос от моего экземпляра ec2, и кажется, что обработка Neptune идет медленно. Кроме того, кажется, что обработка Нептуна не параллельна.
Ниже приведены мои тесты и результаты:
Я отправил следующий запрос Нептуну:
time curl -X POST -d @/tmp/my_file_32m.txt http://myneptune-poc.c0zm6uyrnnwp.us-east-1.neptune.amazonaws.com:8182/sparql
/tmp/my_file_32m.txt
содержит команды вставки sparql и время для этого запроса34.037s
в то время как Нептун утверждает, что это заняло21.846 s
:{ "type": "Commit", "totalElapsedMillis": 21846 }
real 0m34.037s
user 0m0.044s
sys 0m0.062s
tcpdump
Можно четко доказать, что ответ от Нептуна был получен с задержкой в 34 секунды.Когда я отправил данные 100 м, это заняло более 1 минуты.
Когда я отправил один и тот же файл 32 м параллельно, время было кратно 2:
time xargs -I % -P 8 curl -vX POST -d @/tmp/my_file_32m.txt "http://myneptune-poc.c0zm6uyrnnwp.us-east-1.neptune.amazonaws.com:8182/sparql" < <(printf '%s\n' {1..2})<
{ "type": "Commit", "totalElapsedMillis": 29797 } { "type": "Commit", "totalElapsedMillis": 30362 }
real 0m57.752s
user 0m0.137s
sys 0m0.101s
Я взял
tcpdump
и ясно видеть изwireshark
что запрос был отправлен параллельно, но есть задержка ~1 мин до возвращения Нептуна200 OK
для обоих запросов.На самом деле, кажется, что обработка Нептуна не параллельна.
запрос был отправлен вовремя 12 и
200 ok
для обоих запросов было отправлено время 69, что составляет ровно 57 секунд задержки.Я пытался увеличить размер экземпляра Нептуна до
db.r4.xlarge
а также дляdb.r4.2xlarge
ДБ, но я получил ту же производительность.- Я пытался отправить сжатые данные в
gzip
формат, чтобы улучшить время, но кажется, что Нептун не поддерживает его (проверка вwireshark
запрос был отправлен правильно).
Я хотел бы услышать ваше мнение о моих тестах и результатах:
- почему производительность медленно для одного запроса http?
- почему обработка Нептуна не параллельна?
1 ответ
Вы сравниваете вывод time
(время приема-передачи на стороне клиента) с сообщением сервера totalEllapsedMillis
, Первый включает в себя время передачи в вашей сети, где в качестве второго используется только время, которое БД потребовалось для вычисления запроса с момента, когда он принял запрос. Есть ли у вас какие-либо показатели времени, необходимого для передачи файла размером 100 МБ?
Нептун обрабатывает запросы параллельно (на самом деле количество параллелизма зависит от типа вашего экземпляра). Если ваши запросы действительно малы по сравнению с тем временем, которое они проводят в сети, тогда они могут выглядеть как результаты, выполненные один за другим. Я хотел бы увидеть более детальную информацию о ваших экспериментах, чтобы увидеть, есть ли проблема с вашей настройкой.
Для начала, какова задержка сети между вашим клиентом и конечной точкой БД? (т.е. сколько времени у вас занимает, например, чтобы сделать запрос к /status API)