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

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

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

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

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

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

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

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

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

Скорость

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

firebase database:profile --raw

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

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

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

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

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

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