Оцените производительность вашей Firebase Realtime Database с помощью инструмента профилирования базы данных, встроенного в Firebase CLI . Инструмент профилирования регистрирует всю активность в вашей базе данных за определенный период времени, а затем генерирует подробный отчет. Используйте подробный отчет для устранения проблем с производительностью вашей базы данных, выявления проблемных областей и сокращения количества неиндексированных запросов.
Создать профиль
Прежде чем начать профилирование вашей Firebase Realtime Database , убедитесь, что вы используете последнюю версию Firebase CLI и инициализировали её для базы данных и проекта, которые хотите профилировать. Обратите внимание, что для профилирования вы должны быть редактором или владельцем этого проекта.
Начните профилирование вашей базы данных с помощью следующей команды:
Профайлер отображает сообщение о состоянии по мере записи операций из вашей базы данных и построения профиля.firebase database:profile
Нажмите Enter , чтобы завершить заполнение профиля и отобразить результаты.
Интерпретируйте полученные результаты
Инструмент профилирования собирает данные о работе вашей базы данных и отображает результаты в трех основных категориях: скорость , пропускная способность и неиндексированные запросы .
Скорость
Отчет о скорости измеряет время отклика сервера (в миллисекундах) для каждого типа операций. Однако скорость, измеренная в отчете о скорости, может не соответствовать скорости, которую ощущают конечные пользователи. Различные факторы, включая состояние сети, могут увеличивать задержку на стороне клиента.
Отчет о скорости включает следующие характеристики:
- Путь: путь в вашей базе данных, где были выполнены операции. Если дочерних узлов более 25, инструмент профилирования объединяет их в путь к родительскому узлу и добавляет символ
$wildcard. В отчете вы можете увидеть корневой каталог вашей базы данных, обозначенный косой чертой/. - Count: Количество операций, выполненных по заданному пути.
- Средняя скорость выполнения: среднее время, необходимое серверу для выполнения бизнес-логики, необходимой для обработки конкретного типа операции на данном пути. Измеряемый здесь временной интервал начинается после интервала, измеренного с помощью параметра «Среднее время ожидания», описанного ниже.
- Среднее время ожидания: среднее время, которое запросы проводят в очереди до выполнения. Эта задержка характерна для всех запросов, инициированных клиентом. Общая задержка запроса на стороне сервера приблизительно равна сумме времени ожидания запроса и скорости его выполнения.
- Отказано в доступе: количество операций по указанному пути, заблокированных правилами базы данных Firebase .
| Отчет о скорости по типу операции | |
|---|---|
| Скорость выполнения чтения | Время ответа сервера на запросы клиентов на чтение данных из базы данных. Время выполнения чтения обычно зависит от объема считываемых данных, но даже при небольших объемах чтения может наблюдаться задержка из-за предварительной выборки данных из кэша. |
| Скорость выполнения записи | Время ответа сервера на запросы клиентов о записи данных в базу данных. Время выполнения записи зависит от объема записываемых данных. | Скорость выполнения подключения | Время ответа сервера на запросы на установление соединения с клиентами базы данных. Задержка запросов на соединение в основном обусловлена серверными операциями по управлению соединением, выполняемыми в оперативной памяти. |
| Скорость выполнения трансляции | Время, необходимое серверу для рассылки данных клиентам, прослушивающим указанный путь для получения обновлений в режиме реального времени. Свойство Count в отчете о скорости широковещательной рассылки суммирует количество произошедших широковещательных рассылок, а не количество клиентов, получивших информацию. Например, если 10 клиентов прослушивали определенный маршрут, и сервер отправил широковещательное сообщение всем 10 клиентам, счетчик широковещательных рассылок будет отражать только 1 рассылку, даже если данные получили 10 клиентов. Свойство «Доступ запрещен» не включено в отчет «Скорость трансляции». |
Пропускная способность
Отчет о пропускной способности предоставляет информацию о том, сколько данных потребляет ваша база данных при входящих и исходящих операциях. Однако не следует использовать отчет о пропускной способности для оценки стоимости услуг, поскольку он не включает пропускную способность, используемую для других операций, таких как профилирование базы данных. Отчет о пропускной способности приблизительно оценивает размер полезной нагрузки данных, потребляемых операциями чтения, записи и широковещательной рассылки в вашу базу данных и из нее. Это инструмент для измерения производительности, а не для прогнозирования стоимости услуг.
Отчет о пропускной способности включает следующие характеристики:
Путь: путь в вашей базе данных, где были выполнены операции. Если дочерних узлов более 25, инструмент профилирования объединяет их в один родительский путь.
Итого: Общее количество исходящих или входящих байтов, использованных во всех операциях по заданному пути.
Count: Количество операций, выполненных по заданному пути.
Среднее значение: среднее количество загруженных или выгруженных байтов по всем операциям на данном пути (байтов/запись или байтов/чтение).
| Отчет о пропускной способности | |
|---|---|
| Загруженные байты | Данные, получаемые в ходе операций чтения и широковещательной рассылки, отправляются через клиентские SDK и REST API. |
| Загруженные байты | Данные обрабатываются посредством запросов на запись, поступающих на сервер базы данных. Удаления отображаются как записи с нулевым объемом входящих данных. |
Неиндексированные запросы
Неиндексированные запросы могут быть ресурсоемкими, поскольку клиенты загружают все данные из определенного места, а затем выполняют над ними запросы. Это потребляет больше пропускной способности, чем необходимо. Для оптимизации производительности базы данных обрабатывайте как можно больше неиндексированных запросов.
В отчете «Неиндексированные запросы» отображаются следующие свойства:
- Путь: путь в вашей базе данных, где были выполнены неиндексированные запросы.
- Индекс: Правило, которое следует добавить для обработки запросов, не проиндексированных в индексе. Подробнее об индексировании см. в разделе «Индексируйте свои данные» .
- Count: Количество неиндексированных запросов, выполненных по указанному пути.
Расширенное профилирование
Чтобы увидеть все операции, обрабатываемые вашей базой данных, используйте флаг --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-соединения.
Узнайте больше о том, как понять и рассчитать свой счет за электроэнергию .