Ускорьте выполнение запросов ownCloud 10, безопасно управляя индексами.

Для ownCloud 10 начните с применения изменений схемы, предоставленных установленным ядром и приложениями, а затем проверьте, какие запросы к базе данных действительно работают медленно. Не добавляйте индексы вслепую и не предполагайте, что команда Nextcloud db:add-missing-indicesявляется поддерживаемой командой восстановления ownCloud 10: в текущем справочнике OCC для ownCloud Server 10.15 она не описана. Индексы могут ускорить чтение с совпадениями, но каждый добавленный индекс потребляет место в памяти и увеличивает нагрузку на операции вставки, обновления и удаления.

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

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

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

Прежде чем что-либо менять, учитывайте следующие особенности:

  • Предупреждение администратора или известная проблема обновления: запустите стандартную процедуру обновления ownCloud и просмотрите ее результаты. Миграция обновления — это поддерживаемый способ внесения изменений в схему, предоставляемых ownCloud или приложением.
  • Один из известных медленных запросов с неэффективным планом выполнения: попросите администратора базы данных проверить запрос и план. Целевой индекс может помочь, но предлагаемые столбцы и порядок должны соответствовать запросу и определению таблицы.
  • Медленная загрузка, блокировки или высокая конкуренция: проверьте транзакции, задержку хранилища, емкость базы данных и блокировки файлов. Сами по себе эти симптомы не доказывают отсутствие индекса.
  • Для небольших многопользовательских установок SQLite рассмотрите возможность миграции на MySQL/MariaDB или PostgreSQL. ownCloud описывает SQLite как подходящий инструмент для тестирования и небольших однопользовательских рабочих нагрузок, в то время как для многопользовательских развертываний в производственной среде следует использовать поддерживаемую серверную базу данных.

Индекс не является универсальным переключателем скорости. Увеличение количества индексов может улучшить выборочные поиски, но при этом увеличить размер базы данных и задержку записи. Результат зависит от структуры запроса, размера таблицы, распределения данных, механизма базы данных и состояния кэша.

Подготовьте безопасное окно для проведения технического обслуживания.

  1. Запишите точные версии и базу данных. Из каталога установки ownCloud запустите команду sudo -u www-data ./occ status. Запишите версию ownCloud, версии установленных приложений, тип базы данных и префикс таблиц из файла config/config.php. Замените www-dataна учетную запись веб-сервера в вашем дистрибутиве.
  2. Зафиксируйте медленную работу. Обратите внимание на затронутый экран или приложение, приблизительное время и повторяется ли задержка. Просмотрите журналы ownCloud и диагностику медленных запросов вашей базы данных. Включайте ведение журнала запросов только в соответствии с рекомендациями поставщика вашей базы данных, поскольку журналы могут содержать конфиденциальные значения SQL и быстро увеличиваться в размере.
  3. Создайте резервную копию базы данных и конфигурации. Используйте метод резервного копирования, обеспечивающий согласованность данных с базой данных, и убедитесь, что резервная копия доступна для чтения. В документации ownCloud по резервному копированию mysqldump --single-transactionв качестве примера используются базы данных, совместимые с MySQL; адаптируйте значения хоста, пользователя и базы данных к вашей конфигурации. Не добавляйте пароль к базе данных непосредственно в историю командной оболочки или список процессов.
  4. Вносите изменения в расписание ответственно. Обновление схемы или создание индекса может задействовать дисковый ввод-вывод, процессор и блокировки. При интенсивной или масштабной установке сообщите пользователям о временном окне и отслеживайте нагрузку на базу данных. Используйте режим обслуживания ownCloud только тогда, когда этого требует соответствующая процедура обновления или обслуживания; не включайте его вместо резервного копирования.

Сначала примените обновления схемы, управляемые ownCloud.

Если ожидается обновление ядра или приложений ownCloud, используйте описанный в документации процесс обновления для вашего метода установки. В обычной установке Linux команда OCC запускается от имени пользователя HTTP из корневого каталога ownCloud. При следовании инструкциям по ручному обновлению команда выглядит следующим образом:

sudo -u www-data ./occ upgrade

Не запускайте это для установки, файлы которой были обновлены лишь частично. Сначала подготовьте соответствующие файлы релиза и следуйте официальным инструкциям по обновлению для этого релиза. Для развертывания в Docker используйте документированный вызов OCC контейнера, а не путь к хосту, указывающий на другую среду PHP.

Прочитайте полный вывод команды и журналы. Успешное выполнение команды должно завершиться без сообщения о неудачной миграции; это не гарантирует исправление всех медленных запросов. Если обновление сообщает об ошибке миграции, остановите выполнение и исследуйте эту ошибку, вместо того чтобы многократно запускать команду или редактировать таблицы схемы вручную. При необходимости миграции приложения обратитесь к документации по обновлению ownCloud для конкретной версии и к сопровождающему приложения.

В справочнике ownCloud 10.15 OCC перечислены команды базы данных, такие как db:convert-type, db:convert-mysql-charset, и db:restore-default-row-format, но отсутствует команда db:add-missing-indices. Поскольку доступность команд может различаться в зависимости от версии и установленного кода, вы можете проверить свой экземпляр с помощью sudo -u www-data ./occ list dbили sudo -u www-data ./occ help db:add-missing-indices. Если последний сообщает о неизвестной команде, не копируйте команду из руководства Nextcloud в ownCloud. Проверьте документацию для вашей конкретной версии ownCloud и используйте поддерживаемый путь обновления или миграции приложения.

В каких случаях целесообразно использовать ручной указатель?

Ручной SQL-запрос — это опция администратора базы данных для решения проверенной проблемы с запросом, а не стандартная оптимизация ownCloud. Сначала определите точный медленный запрос и запустите инструмент проверки плана выполнения, например, EXPLAINдля MySQL/MariaDB или PostgreSQL. Убедитесь, что план не сканирует излишне большое количество строк и не игнорируется ли существующий индекс. Префикс таблиц ownCloud можно настроить, поэтому никогда не предполагайте, что имена таблиц начинаются с oc_.

Перед созданием индекса сравните предлагаемые столбцы с фильтрами, соединениями и порядком сортировки запроса. Порядок столбцов в составном индексе имеет значение; дублирование существующего индекса может увеличить стоимость без улучшения плана выполнения. Попросите администратора базы данных учесть особенности работы версий базы данных, поддержку создания индексов в режиме онлайн или одновременно, запас дискового пространства, влияние блокировок и процедуру отката. Эти детали зависят от используемого механизма и версии, поэтому не существует единого безопасного SQL-запроса для каждой установки ownCloud 10.

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

Сравните альтернативы на уровне базы данных

Если в плане уже используется соответствующий индекс, добавление еще одного вряд ли устранит задержку, вызванную в другом месте. Сравните эти варианты с наблюдаемым узким местом:

  • MySQL или MariaDB: распространенный вариант для развертываний, администраторы которых уже используют эти движки. Перед изменением настроек сервера проверьте объем памяти буферного пула, задержку диска, соединения и планы медленных запросов.
  • PostgreSQL: поддерживаемая альтернатива ownCloud 10, если правильно настроены PHP-коннектор к базе данных и развертывание. Планы запросов и инструменты для обслуживания индексов отличаются от MySQL, поэтому используйте рекомендации, специфичные для PostgreSQL.
  • SQLite: прост в использовании для тестирования или небольших задач с одним пользователем, но не является выбором по умолчанию для одновременной многопользовательской рабочей нагрузки в производственной среде. Настройка индексов не позволяет снять ограничения на параллельную обработку данных.

Смена движка базы данных — это проект миграции, а не быстрая корректировка индексов. ownCloud поддерживает occ db:convert-typeконвертацию; ознакомьтесь с его предварительными требованиями, сделайте резервную копию и протестируйте конвертированный экземпляр, прежде чем рекомендовать его пользователям.

Проверьте результат и остановитесь, если доказательства противоречат ему.

Повторите то же действие пользователя в сопоставимых условиях и сравните продолжительность запроса, план выполнения, количество просмотренных строк, операции ввода-вывода базы данных и нагрузку на сервер. Убедитесь, что соответствующая страница или приложение ownCloud завершаются нормально и что в журналах отсутствуют ошибки базы данных или миграции. Более быстрый результат по одному запросу не доказывает общего улучшения; сравните несколько репрезентативных запросов и учтите наличие «горячих» кэшей.

Если тот же запрос по-прежнему выполняется медленно при использовании соответствующего индекса, проверьте блокировки, хранилище, задержку сети, количество рабочих процессов PHP и ограничения ресурсов базы данных. Если план запроса или структура таблицы неясны, остановитесь перед выполнением DDL вручную и попросите администратора базы данных или представителя службы поддержки ownCloud проверить их. Надежным результатом будет схема, соответствующая установленной версии ownCloud и измеренным запросам, без неотслеживаемых изменений индексов.

Официальные ссылки

Оставить комментарий

Безопасно удалите предупреждение ownCloud Apache .htaccess.

Безопасно удалите предупреждение ownCloud Apache .htaccess.

Установите параметр AllowOverride All только для корневого каталога веб-сервера ownCloud, проверьте активный виртуальный хост Apache и безопасно перезагрузите систему, чтобы восстановить правила .htaccess.

Настройте систему корпоративного аудита ownCloud и проверьте журналы.

Включите приложение Enterprise Auditing от ownCloud, перенаправьте события admin_audit в защищенный файл журнала и убедитесь, что записываются реальные действия пользователей.

Подключите ownCloud Infinite Scale к Keycloak с помощью OIDC.

Подключите ownCloud Infinite Scale к Keycloak с помощью OIDC.

Align Keycloak, эмитент домена, веб-клиент и пользовательское приложение, как утверждается, позволяют ownCloud Infinite Scale надежно авторизовывать пользователей как в веб-, так и в мобильных приложениях.

Переместите файлы ownCloud к новому владельцу без потери прав доступа.

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

Ускорьте выполнение запросов ownCloud 10, безопасно управляя индексами.

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

Подключение SMB/CIFS-ресурса в ownCloud без использования Linux для монтирования.

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

Безопасное удаление версий файлов ownCloud с помощью команды occ.

Безопасное удаление версий файлов ownCloud с помощью команды occ.

Удалите все сохраненные версии файлов ownCloud Server Classic для одной учетной записи или всех пользователей и различайте полную очистку и истечение срока действия на основе срока хранения.

Подключение к мобильному приложению ownCloud отклонено? Проверьте URL-адрес и доступность.

Подключение к мобильному приложению ownCloud отклонено? Проверьте URL-адрес и доступность.

Чтобы отследить отказ в подключении к мобильному приложению ownCloud, проверьте URL-адрес сервера, сеть телефона, конечную точку HTTPS и журналы сервера в правильной последовательности.

Надежное выполнение фоновых задач ownCloud с помощью таймера Systemd.

Замените запуск заданий по требованию таймером systemd, который запускает поддерживаемую ownCloud команду occ system:cron каждые 15 минут.

Восстановление синхронизации ownCloud WebDAV путем поиска поврежденного маршрута.

Проследите за выполнением WebDAV-запроса через Apache, Nginx или обратный прокси-сервер, а затем подтвердите работоспособность синхронизации ownCloud с помощью аутентифицированного теста PROPFIND.