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

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

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

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

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

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

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

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

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

Скорость

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

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

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

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

Свойство Count в отчете Broadcast Speed ​​Report объединяет количество трансляций, которые произошли, а не количество клиентов, которые получили информацию. Например, если 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.

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