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

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

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

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

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

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

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

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

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

Скорость

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

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

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

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

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

Свойство Permission Denied не включено в отчет о скорости широковещания.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

firebase database:profile --raw

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

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

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

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

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

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