Профилируйте свою базу данных

Измерьте производительность вашей Firebase Realtime Database с помощью инструмента профилирования базы данных, встроенного в Firebase CLI . Инструмент профилирования регистрирует все действия в базе данных за заданный период времени, а затем генерирует подробный отчёт. Используйте подробный отчёт для диагностики проблем с производительностью базы данных, выявления проблемных областей и сокращения количества неиндексированных запросов.

Создайте профиль

  1. Прежде чем начать профилирование Firebase Realtime Database , убедитесь, что вы используете последнюю версию Firebase CLI и инициализировали её для базы данных и проекта, которые вы хотите профилировать. Обратите внимание, что для профилирования вы должны быть редактором или владельцем этого проекта.

  2. Начните профилирование вашей базы данных с помощью следующей команды:

    firebase database:profile
    Профилировщик отображает сообщение о состоянии по мере того, как он записывает операции из вашей базы данных и создает профиль.

  3. Нажмите Enter , чтобы завершить профиль и отобразить результаты.

Интерпретируйте ваши результаты

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

Скорость

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

Отчет о скорости включает в себя следующие свойства:

  • Путь: Путь в базе данных, где были выполнены операции. Если дочерних узлов больше 25, инструмент профилирования сворачивает их в родительский путь и добавляет подстановочный маркер $wildcard . В отчёте может отображаться корневой каталог базы данных, обозначенный косой чертой / .
  • Количество: Количество операций, выполненных на заданном пути.
  • Средняя скорость выполнения: среднее время, необходимое серверу для выполнения бизнес-логики, необходимой для обработки конкретного типа операции на данном пути. Измеряемый здесь интервал времени начинается после периода, определяемого «Средним временем ожидания», описанным ниже.
  • Среднее время ожидания: среднее время, которое запросы проводят в очереди перед выполнением. Эта задержка характерна для всех запросов, инициированных клиентом. Общая задержка запроса на стороне сервера примерно равна сумме времени ожидания запроса и скорости его выполнения.
  • Отказано в доступе: количество операций по указанному пути, которые были заблокированы правилами базы данных Firebase в вашей базе данных.
Отчет о скорости по типу операции
Скорость выполнения чтения Время ответа сервера на клиентские запросы на чтение данных из базы данных. Время выполнения чтения обычно зависит от объёма считываемых данных, но даже некоторые небольшие операции чтения могут задерживаться из-за предварительной выборки из кэша.
Скорость выполнения записи Время ответа сервера на клиентские запросы на запись данных в базу данных. Время выполнения записи зависит от объёма записываемых данных.
Скорость выполнения соединения Время ответа сервера при запросах на установление соединения с клиентами базы данных. Задержка запросов на подключение в основном обусловлена серверными операциями в оперативной памяти, связанными с управлением соединениями.
Скорость выполнения трансляции

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

Свойство «Количество» в отчёте «Скорость вещания» суммирует количество выполненных трансляций, а не количество клиентов, получивших информацию. Например, если 10 клиентов прослушивали заданный маршрут, и сервер передал обновление всем 10 клиентам, счётчик трансляций будет отражать только 1 передачу, несмотря на то, что данные получили 10 клиентов.

Свойство «Отказано в доступе» не включается в отчет о скорости вещания.

Пропускная способность

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

Отчет о пропускной способности включает в себя следующие свойства:

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

  • Всего: общее количество исходящих или входящих байтов, использованных во всех операциях на заданном пути.

  • Количество: Количество операций, выполненных на заданном пути.

  • Среднее: среднее количество загруженных или отправленных байтов по операциям на заданном пути (байтов/запись или байтов/чтение).

Отчет о пропускной способности
Загружено байтов Данные, потребленные посредством операций чтения и трансляции, отправляются через клиентские SDK и REST API.
Загружено байтов Данные, потребляемые через запросы на запись, поступающие на сервер базы данных. Удаления отображаются как записи с 0 байтами под входящим потоком.

Неиндексированные запросы

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

Отчет «Неиндексированные запросы» отображает следующие свойства:

  • Путь: Путь в вашей базе данных, где произошли неиндексированные запросы.
  • Индекс: правило, которое следует добавить для решения проблем с неиндексированными запросами. Подробнее об индексировании см. в статье «Индексирование данных» .
  • Количество: Количество неиндексированных запросов, произошедших по указанному пути.

Расширенное профилирование

Чтобы увидеть все операции, которые обрабатывает ваша база данных, используйте флаг --raw при профилировании базы данных следующим образом:

firebase database:profile --raw

Необработанные выходные данные также включают информацию о клиенте для каждой операции, такую как строки userAgent и IP-адреса. Подробнее о различных операциях, профилируемых в вашей Firebase Realtime Database читайте в статье «Типы операций Firebase Realtime Database .

Инструмент профилирования: не является инструментом выставления счетов

Не используйте инструмент профилирования для оценки стоимости пропускной способности. Инструмент профилирования предназначен для получения общей картины производительности вашей базы данных, для мониторинга операций и устранения неполадок, а не для оценки стоимости. Он не учитывает сетевой трафик, а лишь фиксирует приблизительный объём данных приложения, отправленных в ответах.

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

  • Накладные расходы протокола: для установления и поддержания сеанса между сервером и клиентами требуется дополнительный трафик. В зависимости от используемого протокола, этот трафик может включать в себя: накладные расходы протокола реального времени Firebase Realtime Database, накладные расходы WebSocket и накладные расходы HTTP-заголовков. При каждом установлении соединения эти накладные расходы в сочетании с накладными расходами на SSL-шифрование увеличивают стоимость соединения. Хотя обычно это незначительная часть пропускной способности, она может быть существенной, если объём ваших данных невелик или вы часто используете короткие соединения.
  • Накладные расходы на SSL-шифрование: накладные расходы на SSL-шифрование, необходимые для обеспечения безопасности соединений, связаны с определенными расходами. В среднем эти расходы составляют около 3,5 КБ для начального согласования и около 40 КБ для заголовков записей TLS в каждом исходящем сообщении. Для большинства приложений это небольшая доля вашего счета. Однако эта доля может стать значительной, если в вашем конкретном случае требуется много SSL-согласований. Например, устройства, не поддерживающие билеты сеанса TLS, могут потребовать большого количества SSL-согласований.

Узнайте больше о том, как понимать и оценивать ваш счет .