Содержание

php — Рекомендованное максимальное число файлов в папке (чтобы не тормозило)

Вопрос задан

Изменён 9 лет 6 месяцев назад

Просмотрен 521 раз

Какое максимальное число файлов рекомендовано хранить в папке чтобы доступ к файлам не замедлялся?

Число папок на скорость не влияет как файлов?

  • php
  • linux

1

Если вас этот вопрос волнует, обычно примерно делают так: имя файла берут как md5(file_contents).»:».timestamp.’.’.extension и записывают таким образом:

  1. скажем получилось имя файла 71725897ea80276ea3bbee6b63283a45:1379598536.jpg
  2. создаем директории out_dir/7/1/7 (по первым трем значениям md5)
  3. записываем файл как out_dir/7/1/7/725897ea80276ea3bbee6b63283a45:1379598536.
    jpg
  4. в базу пишем 725897ea80276ea3bbee6b63283a45:1379598536.jpg
  5. при обращении к файлу рассчитываем имя директории так-же как в пункте 2.

md5 можно заменить на случайную строку в случае больших файлов, timestamp можно преобразовать так-же в строку.

2

@maxiimkoo, если файл уже был открыт в системе (linux 2.6 (а м.б. и более ранние версии)), то его inode вполне может находиться в кэше (вместе с деревом имен каталогов к нему). В этом случае время доступа от количества файлов в каталоге слабо зависит.

Насколько помню, для представления структур файловой системы в ОЗУ в основном используются rb-tree (логарифмическое время поиска) и хэширование (время почти не зависит от размера таблицы).

А вот при первом open…

Каталог это же фактически файл на диске, содержащий имена объектов (максимальная длина имени 255 байт) и ссылки на их inode, он тоже может быть фрагментирован, а вот движение головок по диску операция ужасно медленная.

На практике я бы не рекомендовал хранить больше нескольких сотен файлов (каталогов) в одном каталоге.

С другой стороны (помню Ваш предыдущий вопрос с 7 млн. файлов), глубина иерархии каталогов естественным образом ограничена максимальной длиной полного имени файла (1024 байта вместе с разделителями).

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

linux — Хранение большого количества изображений в одной директории на сайте

Разбивать однозначно стоит, если кол-во файлов превысит 5-7 тысяч.

При 10к файлов в одной папке файловой системе уже обычно «стает плохо» — открытие файла отрабатывает дольше, растет нагрузка на диск. При 10к файлов в папке просто удалить все файлы уже было накладно (то есть, просто rm * уже просто так не работает — баш пытается развернуть * в список имен, этот список собрается долго, но потом он оказывается слишком длинным и баш не может выполнить команду. Правда где то в 2011-2012 это чуточку пофикисили, но все равно тяжело). У меня был опыт с подобным и несколько попыток переписать «правильно».

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

Сколько же теоретически можно вместить?

  • ntfs. Теоретический предел 2 в 32. Реальный — порядка 100k. Но пишут, что все тупит сильно. Также в msdn написано, что GetTempFileName не будет работать, если в каталоге с временными файлами больше 65535 файлов.
  • ext3. тут все сложно, максимальное кол-во файлов нужно смотреть.
  • ext4 — также, как и у ntfs, 4миллиарда.

Можно ещё почитать другой вопрос на SO — Максимальное количество файлов в папке Linux и Windows

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

Но есть лучше способ, проверенный и используемый многими. Перед помещением файла в «хранилище», для файла считается md5/sha1. Теперь, на основании этого хеша формируется «путь для хранения». Я применял такой — первые два символа определяют папку, в котрой создается папка, имя которой совпадает с следующими двумя символами.

А сам файл храниться внутри папки. Пример. Допустим есть файл «test.jpg» и md5 сумма от его содержимого такая «b3e6b7290309113a2d2b392bf1e2084e». Само хранилище находиться в /srv/archiv. Значит этот файл будет храниться по такому пути

/srv/archiv/b3/e6/b7290309113a2d2b392bf1e2084e_test.jpg

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

Плюсы этого способа.

  • равномерное распределение файлов по каталогам (обеспечивается хэш функцией).
  • легко разнести файлы по серверам. К примеру, первые два символа могут определять имя сервера в кластере (а сами кластера подмонтированы внутрь).
  • легко выявляются дубликаты — у них будет одинаковый хэш.
  • если допустить, что файловая система легко держит 1000 файлов в папке, то вся система сможет удерживать около 65миллионов файлов (256*256*1000). Если брать минимальные файлы (по 4к), то это как минимум 250 гигабайт (плюс накладные расходы файловой системы, обычно это 10-20 процентов от размера).
  • использование в паре с этим способом ещё и базы данных сильно расширяет возможности.

Минусы:

  • хэширование не бесплатно.
  • теоретически может оказаться, что у двух разных файлов может оказаться одинаковый хэш.
  • сложно удалить «старые файлы», но find может помочь.

Есть пример реализации на php — хабр.

На посмотреть:

  • Хранение и доставка контента, Олег Илларионов (ВКонтакте)
  • Организация хранения данных, Кортунов

Как подсчитать количество файлов в каталоге в Linux

Учебники

В этом руководстве для начинающих мы покажем вам, как считать файлы в каталоге в Linux.

Для этого руководства вам потребуется доступ к терминалу (откройте его с помощью CTRL + ALT + T) или доступ к серверу по SSH. Этот учебник будет включать только инструкции для CLI. Если вы хотите подсчитать файлы в каталоге через GUI (графический интерфейс пользователя), просто щелкните правой кнопкой мыши каталог и выберите «Свойства».

Вы получите окно со статистикой об этом каталоге, включая количество файлов.

Подсчет файлов в каталоге с помощью команды wc

Самая простая и наиболее широко используемая команда Linux для подсчета файлов в каталоге:

 ls -1 | wc -l 

Краткое объяснение этой команды:

  • «ls» используется для вывода списка файлов в текущем каталоге. Это сокращение от « л я с т»
  • -1 означает, что не учитывается первая строка, которую вы получаете от команды «ls -l», которая представляет собой просто строку заголовка с суммой всех файлов
  • | используется для передачи вывода предыдущей команды команде после |
  • wc — это команда, используемая для поиска « w ord c count», подсчета количества строк и других целей подсчета

Пример использования этой команды:

 root@x77:/etc/opt/random# touch {1..26}notes.txt
root@x77:/etc/opt/random# ls
10notes. txt 15notes.txt 1notes.txt 24notes.txt 4notes.txt 9notes.txt
11notes.txt 16notes.txt 20notes.txt 25notes.txt 5notes.txt
12notes.txt 17notes.txt 21notes.txt 26notes.txt 6notes.txt
13notes.txt 18notes.txt 22notes.txt 2notes.txt 7notes.txt
14notes.txt 19примечания.txt 23notes.txt 3notes.txt 8notes.txt
root@x77:/etc/opt/random# ls -1 | туалет -л
26 

Сначала мы создали 26 файлов .txt в ранее пустом каталоге /etc/opt/random. Затем мы просто использовали простую команду «ls» для вывода всех имен файлов в текущем каталоге, и, наконец, мы запускаем «ls -1 | wc -l», чтобы подсчитать количество файлов в каталоге, что в данном случае вернуло результат «26».

Подсчет файлов в каталоге с помощью команды egrep

Аналогичной командой, которая выводит результат, аналогичный предыдущей команде wc, является команда egrep. Эта команда выведет количество файлов в текущем каталоге. Команда: 9-‘

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

Рекурсивный подсчет файлов в каталоге с помощью команды find

Если вы хотите подсчитать количество файлов в определенном каталоге И все остальные файлы в каталогах, которые находятся в этом родительском каталоге, вы можете использовать команду find:

 найти имя_каталога -тип f | wc -l 

Итак, например, если:

  • В /etc/opt/random было 26 файлов
  • /etc/opt/random/new содержит 10 файлов
  • /etc/opt/random/old было 5 файлов

Выполнение этой команды:

 find /etc/opt/random -type f | wc -l 

Вернет результат «41». Что составляет 26+10+5.

«-type f» используется только для подсчета файлов.

Если вы хотите подсчитать файлы в текущем каталоге (в котором вы находитесь), просто замените имя каталога на точку, например:

 найти . -тип f | wc -l 

Подсчет файлов и каталогов с помощью команды дерева

Команда дерева может быть не установлена ​​по умолчанию в вашем дистрибутиве. Вы можете установить его, запустив

  • «apt install tree» для Ubuntu/Debian
  • .
  • «Дерево установки dnf» для CentOS/Fedora

Основной синтаксис команды:

 tree directoryName 

Возвращает список всех файлов и каталогов в каталоге с их иерархией.

Итак, если вы запустите команду дерева для случайного каталога из наших примеров:

 дерево /etc/opt/random 

Вы получите следующий результат:

 /etc/opt/random
├── 10notes.txt
├── 11notes.txt
├── 12notes.txt
├── 13notes.txt
├── 14notes.txt
├── 15notes.txt
├── 16notes.txt
├── 17notes.txt
├── 18notes.txt
├── 19notes.txt
├── 1notes.txt
├── 20notes.txt
├── 21notes.txt
├── 22notes.txt
├── 23notes.txt
├── 24notes.txt
├── 25notes.txt
├── 26notes.txt
├── 2notes.txt
├── 3notes.txt
├── 4notes.txt
├── 5notes.txt
├── 6notes.txt
├── 7notes.txt
├── 8notes.txt
├── 9примечания.txt
├── новый
│   ├── 10notes2.txt
│   ├── 1notes2.txt
│   ├── 2notes2. txt
│   ├── 3notes2.txt
│   ├── 4notes2.txt
│   ├── 5notes2.txt
│   ├── 6notes2.txt
│   ├── 7notes2.txt
│   ├── 8notes2.txt
│   └── 9notes2.txt
└── старый
├── 1notes3.txt
├── 2notes3.txt
├── 3notes3.txt
├── 4notes3.txt
└── 5notes3.txt

2 каталога, 41 файл 

Последняя строка вывода этой команды будет количеством каталогов и файлов в этом каталоге.

У команды дерева есть дополнительные параметры, которые вы можете использовать, например:

  • дерево -h для отображения размера
  • tree -a для отображения и подсчета всех файлов, включая скрытые
  • tree -d для отображения и подсчета только каталогов.
  • дерево — помощь, чтобы получить больше объяснений и помочь с командой дерева

Подсчет большого количества файлов в каталоге

Если у вас есть каталог с тысячами файлов, например более 100000 файлов, выполнение стандартного «ls -1 | команда wc -l». Чтобы сделать это быстрее (и чтобы команда выполняла меньше работы), вам нужно использовать:

 лс -ф | wc -l 

По умолчанию ls сортирует каталоги и файлы. Это может занять некоторое время, если у вас тысячи файлов. Если вы используете опцию -f, вы отключите сортировку. Эта команда также подсчитает скрытые файлы.

Подсчет и отображение количества файлов во всех каталогах

Если вы хотите подсчитать и отобразить количество файлов во всех (под)каталогах в текущем каталоге, используйте эту команду:

 du -a | sed '/.*\.\/.*\/.*/!d' | вырезать -d/ -f2 | сортировать | уникальный -c 

Если вы запустите эту команду в папке /etc/opt/random из наших предыдущих примеров, вы получите следующий результат:

 10 новых
5 old 

Заключение по поиску и подсчету файлов в каталоге в Linux

Это лишь несколько примеров некоторых команд, которые вы можете использовать в Linux (любом дистрибутиве) для подсчета файлов в каталоге. Есть больше команд, которые вы можете использовать, и есть больше примеров и вариантов использования, но они покроют большинство ваших потребностей, особенно если вы новичок.

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

АВТОР
Станки Linux

Официальная учетная запись Linux Stans.

66 сообщений

Ограничение на количество файлов в папке в локальном хранилище (PostgreSQL) — сервер

Действия по воспроизведению

  1. Создать локальное хранилище
  2. Перейти к папке с 100000 загруженными (WebDav) файлами.

Ожидаемое поведение

Файлы отображаются как обычно

Фактическое поведение

Этот каталог недоступен. Загрузка занимает много времени, а затем в конце раздел страницы, который должен показывать содержимое папки, пуст.

Конфигурация сервера

Операционная система : CentOS Linux, выпуск 7.9.2009 (ядро)

Веб-сервер: Версия сервера: Apache/2. 4.6 (CentOS)

База данных: PostgreSQL 11.15 на x86_64-pc-linux-gnu

Версия PHP: PHP 7.4.28 (cli) 9 версия

80 собственная. Облако 1:09180 .1 (стабильная) (Сообщество 10.9.1.2)

Обновлено из старой ownCloud или новой установки: обновлено

Откуда вы установили ownCloud: https://download.owncloud.org/community/owncloud- 10.9.1.tar.bz2

Статус подписи (ownCloud 9.0 и выше): Ошибок не обнаружено.

Содержимое config/config.php:
{
«базовый»: {
«лицензионный ключ»: « REMOVED SENSITIVE VALUE »,
«дата»: «Среда, 13 апреля 4:22 41:32 +0000»,
«версия ownCloud»: «10.9.1.2»,
«строка версии ownCloud»: «10.9.1»,
«редакция ownCloud»: «Community»,
«серверная ОС»: «Linux «,
«версия ОС сервера»: «Linux 5.4.159-x86_64-jb1 #1 SMP, пятница, 12 ноября, 15:34:29 CET 2021 x86_64»,
«сервер SAPI»: «apache2handler»,
«версия веб-сервера»: «Apache»,
«имя хоста»: «»,
«зарегистрированный пользователь»: «admin»
},
«статистика»: {
« пользователи»: {
«База данных»: {
«количество»: 8,
«просмотрено»: 7,
«зарегистрировано (30 дней)»: 2
}
},
«группы»: {
«OC\ Группа\База данных»: 6
}
},
«config»: {
«instanceid»: «ocwtsm6sdzrn»,
«passwordsalt»: « REMOVED SENSITIVE VALUE »,
«secret»: «902 MOV10 REV102 ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ «,
«trusted_domains»: [
» REMOVED SENSITIVE VALUE »
],
«datadirectory»: «/var/owncloud/data»,
«overwrite. cli.url»: «

REMO ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ «,
«dbtype»: «pgsql»,
«версия»: «10.9.1.2»,
«dbname»: «owncloud_db»,
«dbhost»: «localhost: 5432»,
«dbtableprefix» : «oc_»,
«dbuser»: « УДАЛЕННОЕ ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ »,
«dbpassword»: « УДАЛЕННОЕ ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ »,
«allow_user_to_change_mail_address»: «»,
«logtimezone»: «Европа/Берлин»,
«apps_paths»: [
{
«путь»: « УДАЛЕННОЕ ЗНАЧЕНИЕ », «909019» : «/apps»,
«доступно для записи»: false
},
{
«путь»: « REMOVED SENSITIVE VALUE »,
«url»: «/apps-external»,
«доступно для записи»: true
}
],
«установлено»: true,
«integrity.ignore.missing.app.signature»: [
«mynewtheme»
],
«enable_previews»: ложь,
«обслуживание»: ложь,
«loglevel»: 2,
«filelocking.enabled»: правда,
«memcache. local»: «\OC\Memcache\Redis»,
« memcache.locking»: «\OC\Memcache\Redis»,
«redis»: {
«host»: «/var/run/redis/redis.sock»,
«port»: 0,
«timeout»: 0,
«пароль»: « REMOVED SENSITIVE VALUE »,
«dbindex»: 0
}
},
«проверка целостности»: {
«прохождение»: правда,
«включено»1: правда,
«включено»19, «90 результат”: []
},
«ядро»: {
«installedat»: «1640098456.2592»,
«public_webdav»: «dav/appinfo/v1/publicwebdav.php»,
«public_files»: «files_sharing/public.php»,
« first_install_version»: «10.9.0.3»,
«lastupdatedat»: «1649859903»,
«lastupdateResult»: «[]»,
«backgroundjobs_mode»: «cron»,
«поставщик»: «owncloud»,
«lastcron» : «1649860201»
},.

Список активированных приложений:

  • комментарии:
    • Версия: 0.3.0
  • отчет о конфигурации:
    • Версия: 0.2.0
  • дав:
    • Версия: 0. 7.0
  • федеративный файлообменник:
    • Версия: 0.5.0
  • федерация:
    • Версия: 0.1.0
  • файлов:
    • Версия: 1.5.2
  • файлы_внешние:
    • Версия: 0.8.0
  • files_mediaviewer:
    • Версия: 1.0.5
  • обмен файлами:
    • Версия: 0.14.0
  • файлов_корзина:
    • Версия: 0.9.1
  • файлов_версий:
    • Версия: 1.3.0
  • первый запуск мастера:
    • Версия: 1.2.0
  • рынок:
    • Версия: 0.6.2
  • моя новая тема:
    • Версия: 1.0.0
  • уведомлений:
    • Версия: 0.5.4
  • предоставление_апи:
    • Версия: 0.5.0
  • системные теги:
    • Версия: 0.3.0
  • уведомление об обновлении:
    • Версия: 0.2. 1

Используете ли вы внешнее хранилище, если да, то какое: нет

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

Используете ли вы внешний пользовательский сервер, если да, то какой: нет

Конфигурация клиента

Браузер: Firefox 99.0 (64-разрядная версия)

Операционная система: Windows 10

Журналы

Журнал ошибок веб-сервера
Журнал ownCloud (data/owncloud.log)

{«reqId»: «Ylbk3TsAoQ-T3RTgDeN@DwAAAAU», «уровень»: 4, «время»: «2022-04-13T17:03:31+02:00», «remoteAddr»: «62.245.140.240», «пользователь»: «admin», «приложение»: «webdav», «метод»: «PROPFIND», «url»: «/remote.php/dav/files/admin/ «,»message»:»Исключение: Исключение произошло при выполнении ‘SELECT «object_id» КАК «id», COUNT(«object_id») КАК «count», «object_id» КАК «id», COUNT(«object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT(«object_id») КАК «count», «object_id» КАК «id», COUNT(«object_id») КАК «count», «object_id» КАК «id», COUNT(«object_id») КАК «count», » object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id»,

… (много строк одного стиля) …

COUNT(«object_id») AS «count», «object_id» AS «id», COUNT(«object_id») AS «count», «object_id» AS «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК « count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT («object_id») КАК «count», «object_id» КАК «id», COUNT(«object_id») КАК «count» FROM «oc_comments» c WHERE («object_type» = ?) AND («object_id» IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) И («object_id» НЕ В (ВЫБЕРИТЕ «object_id» ИЗ «oc_comments_read_markers» crm ГДЕ (crm. «user_id» = ?) И (crm. «marke r_datetime» >= c.»creation_timestamp») И (c.»object_id» = crm.»object_id»))) ГРУППИРОВАТЬ ПО «object_id»‘ с параметрами [«files», 185554, 185555, 185556, 28284, 185557, 185558 , 185559, 185560, 185561, 185562, 185563, 185564, 185565, 185566, 28285, 185567, 185568, 185569, 185570, 185571, 185572, 185573, 185574, 185575, 185576, 28286, 185577, 185578, 185579, 185580, 185581, 185582 , 185583, 185584, 185585, 185586, 28287, 185587, 185588, 185589, 185590, 185591, 185592, 185593, 185594, 185595, 185596, 28288, 12565, 185597, 185598, 185599, 185600, 185601, 185602, 185603, 185604 , 185605, 185606, 28289, 185607, 185608, 185609, 185610, 185611, 185612, 185613, 185614, 185615, 185616, 28290, 185617, 185618, 185619, 185620, 185621, 185622, 185623, 185624, 185625, 185626, 28291, 185627, 185628, 185629, 185630, 185631, 185632, 185633, 185634, 185635, 185636, 28292, 185637, 185638, 185639, 185640, 185641, 185642, 185643, «admin»]:\n\nSQLSTATE[54000]: Превышено ограничение программы: 7 \\DBAL\\Exception\\DriverException», «Сообщение»: «Произошло исключение при выполнении ‘SELECT \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \» count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\» ) AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\ «object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\» , СЧЁТ(\»object_i d\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \» идентификатор\»,

… (много строк одного стиля) …

COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\» ) AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\ «object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\» , COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \ «id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id \» AS \»id\», COUNT(\»object_id\») AS \»count\», \»object_id\» AS \»id\», COUNT(\»object_id\») AS \»count\» , \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \ «счетчик\», \»идентификатор_объекта\» КАК \»идентификатор\», СЧЁТ(\»идентификатор_объекта\») КАК \»количество\», \»идентификатор_объекта\» КАК \»идентификатор\», СЧЁТ(\»идентификатор_объекта\») ») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \ «object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count \», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»count\», \»object_id\» КАК \»id\», COUNT(\»object_id\») КАК \»количество\» ОТ \»oc_comments\» c ГДЕ (\»object_type\» = ?) И (\»object_id\» В (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) И (\»object_id\» НЕ В (ВЫБЕРИТЕ \»object_id\» ИЗ \»oc_comments_read_markers\» crm ГДЕ (crm. \»user_id\» = ?) И (crm.\»marker_datetime\» >= c.\»creation_timestamp\») И (c.\»object_id\» = crm.\ «object_id\»))) GROUP BY \»object_id\»‘ с параметрами [\»files\», 185554, 185555, 185556, 28284, 185557, 185558, 185559, 185560, 185561, 185562, 185563, 185564, 185565, 185566, 28285, 185567, 185568, 185569, 185570, 185571, 185572, 185573, 185574, 185575, 185576, 28286, 185577, 185578, 185579, 185580, 185581, 185582 , 185583, 185584, 185585, 185586, 28287, 185587, 185588, 185589, 185590, 185591, 185592, 185593, 185594, 185595, 185596, 28288, 12565, 185597, 185598, 185599, 185600, 185601, 185602, 185603, 185604 , 185605, 185606, 28289, 185607, 185608, 185609, 185610, 185611, 185612, 185613, 185614, 185615, 185616, 28290, 185617, 185618, 185619, 185620, 185621, 185622, 185623, 185624, 185625, 185626, 28291, 185627, 185628, 185629, 185630, 185631, 185632, 185633, 185634, 185635, 185636, 28292, 185637, 185638, 185639, 185640, 185641, 185642, 185643, \»admin\»]:\n\nSQLSTATE[54000]: Превышен лимит программы: 7 0,»Trace»:»#0 \/var\/www\/html\/ УДАЛЕННОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/ DBALException. php(182): Doctrine\\DBAL\\Driver\\AbstractPostgreSQLDriver->convertException()\n#1 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/DBALException.php(159): Doctrine\\DBAL\\DBALException::wrapException()\ n#2 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Connection.php(2225) : Doctrine\\DBAL\\DBALException::driverExceptionDuringQuery()\n#3 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib \/Doctrine\/DBAL\/Connection.php(1312): Doctrine\\DBAL\\Connection->handleExceptionDuringQuery()\n#4 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/DB\/Connection.php(191): Doctrine\\DBAL\\Connection->executeQuery()\n#5 \/var\/www\/html \/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Query\/QueryBuilder. php(212): OC\\DB\\Connection- >executeQuery()\n#6 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/DB\/QueryBuilder\/QueryBuilder.php(142): Doctrine\\ DBAL\\Query\\QueryBuilder->execute()\n#7 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/Comments\/Manager.php(411): OC\\DB\\QueryBuilder\\QueryBuilder->execute()\n#8 \/var\/www \/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/lib\/Connector\/Sabre\/CommentPropertiesPlugin.php(114): OC\\Comments\\Manager->getNumberOfUnreadCommentsForNodes()\n #9 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/event\/lib\/WildcardEmitterTrait.php(89): OCA\\DAV\\ Connector\\Sabre\\CommentPropertiesPlugin->handleGetProperties()\n#10 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server.php(1052): Sabre\\DAV\\Server->emit()\n#11 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server. php(984): Sabre\\DAV\ \Server->getPropertiesByNode()\n#12 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server .php(1662): Sabre\\DAV\\Server->getPropertiesIteratorForPath()\n#13 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server.php(1642): Sabre\\DAV\\Server->writeMultiStatus()\n#14 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/http\/lib\/Sapi.php(83): Sabre\\DAV\\Server- >Sabre\\DAV\\{закрытие}(*** конфиденциальные параметры заменены )\n#15 \/var\/www\/html\/ REMOVED SENSITIVE VALUE \/lib\/composer\/ sabre\/dav\/lib\/DAV\/Server.php(490): Sabre\\HTTP\\Sapi::sendResponse()\n#16 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server.php(253): Sabre\\DAV\\Server->invokeMethod()\n#17 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/lib\/Server. php(345): Sabre\\DAV\\Server->start()\n # 18 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/appinfo\/v2\/remote.php(31): OCA\\DAV\\Server-> exec()\n#19 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/remote.php(165): require_once(‘\/var\/www\/html\/w… ‘)\n#20 {main}»,»Файл»:»\/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Driver\/AbstractPostgreSQLDriver.php»,»Line»:102}»}
{«reqId «:»Ylbk3TsAoQ-T3RTgDeN@DwAAAAU»,»уровень»:4,»время»:»2022-04-13T17:03:31+02:00″,»remoteAddr»:» REMOVED SENSITIVE VALUE «, «пользователь»: «admin», «приложение»: «webdav», «метод»: «PROPFIND», «url»: «/remote.php/dav/files/admin/», «сообщение»: «Вызвано: {«Исключение»:»Doctrine\\DBAL\\Driver\\PDO\\Exception»,»Сообщение»:»SQLSTATE[54000]: Превышен лимит программы: 7 FEHLER: Targetlisten k\u00f6nnen h\u00f6chstens 1664 Eintr\u00e4ge haben », «Код»: «54000», «Трассировка»: «#0 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Driver\/PDOStatement. php(119): Doctrine\\DBAL\\Driver\\PDO \\Exception::new()\n#1 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/ DBAL\/Connection.php(1303): Doctrine\\DBAL\\Driver\\PDOStatement->execute()\n#2 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib \/private\/DB\/Connection.php(191): Doctrine\\DBAL\\Connection->executeQuery()\n#3 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Query\/QueryBuilder.php(212): OC\\DB\\Connection->executeQuery ()\n#4 \/var\/www\/html\/ REMOVED SENSITIVE VALUE \/lib\/private\/DB\/QueryBuilder\/QueryBuilder.php(142): Doctrine\\DBAL\ \Query\\QueryBuilder->execute()\n#5 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/Comments\/Manager.php(411): OC\\DB\\QueryBuilder\\QueryBuilder->execute()\n#6 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/lib\/Connector\/Sabre\/CommentPropertiesPlugin. php(114): OC\\Comments\\Manager->getNumberOfUnreadCommentsForNodes()\n#7 \/var \/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/event\/lib\/WildcardEmitterTrait.php(89): OCA\\DAV\\Connector\\Sabre\ \CommentPropertiesPlugin->handleGetProperties()\n#8 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server .php(1052): Sabre\\DAV\\Server->emit()\n#9\/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server.php(984): Sabre\\DAV\ \Server->getPropertiesByNode()\n#10 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server .php(1662): Sabre\\DAV\\Server->getPropertiesIteratorForPath()\n#11 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\ /dav\/lib\/DAV\/Server.php(1642): Sabre\\DAV\\Server->writeMultiStatus()\n#12 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/http\/lib\/Sapi. php(83): Sabre\\DAV\\Server->Sabre\\DAV\\{close}(
важные параметры заменены )\n#13 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/ Server.php(490): Sabre\\HTTP\\Sapi::sendResponse()\n#14 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre \/dav\/lib\/DAV\/Server.php(253): Sabre\\DAV\\Server->invokeMethod()\n#15 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/lib\/Server.php(345): Sabre\\DAV\\Server->start()\n#16 \/var\/www\/html \/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/appinfo\/v2\/remote.php(31): OCA\\DAV\\Server->exec()\n#17 \/var\ /www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/remote.php(165): require_once(‘\/var\/www\/html\/w…’)\n#18 {main}», «Файл»: «\/var\/www\/html\/ REMOVED SENSITIVE VALUE \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Driver\/PDO \/Exception. php»,»Строка»:18}»}
{«reqId»: «Ylbk3TsAoQ-T3RTgDeN@DwAAAAU», «уровень»: 4, «время»: «2022-04-13T17:03:31+02:00», «remoteAddr»: « УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ », «пользователь»: «admin», «приложение»: «webdav», «метод»: «PROPFIND», «url»: «/remote.php/dav/files/admin/», «сообщение»: «Вызвано: {«Исключение»: «PDOException», «Сообщение»: «SQLSTATE [54000]: превышен лимит программы: 7 FEHLER: Targetlisten k\u00f6nnen h\u00f6chstens 1664 Eintr>4ge haben», «Код»: «54000 «,»Trace»:»#0 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Driver\/PDOStatement.php(117): PDOStatement->execute()\n#1 \/var\/ www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Connection.php(1303): Doctrine\\DBAL\\Driver \\PDOStatement->execute()\n#2 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/DB\/Connection. php(191): Doctrine\ \DBAL\\Connection->executeQuery()\n#3 \/var\/www\/html\/ УДАЛЕНО КОНФИДЕНЦИАЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/doctrine\/dbal\/lib\/Doctrine\/DBAL\/Query\/QueryBuilder.php(212): OC\\DB\\Connection->executeQuery ()\n#4 \/var\/www\/html\/ REMOVED SENSITIVE VALUE \/lib\/private\/DB\/QueryBuilder\/QueryBuilder.php(142): Doctrine\\DBAL\ \Query\\QueryBuilder->execute()\n#5 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/private\/Comments\/Manager.php(411): OC\\DB\\QueryBuilder\\QueryBuilder->execute()\n#6 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/apps\/dav\/lib\/Connector\/Sabre\/CommentPropertiesPlugin.php(114): OC\\Comments\\Manager->getNumberOfUnreadCommentsForNodes()\n#7 \/var \/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/event\/lib\/WildcardEmitterTrait.php(89): OCA\\DAV\\Connector\\Sabre\ \CommentPropertiesPlugin->handleGetProperties()\n#8 \/var\/www\/html\/ REMOVED SENSITIVE VALUE \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server . php(1052): Sabre\\DAV\\Server->emit()\n#9\/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server.php(984): Sabre\\DAV\ \Server->getPropertiesByNode()\n#10 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\/Server .php(1662): Sabre\\DAV\\Server->getPropertiesIteratorForPath()\n#11 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\ /dav\/lib\/DAV\/Server.php(1642): Sabre\\DAV\\Server->writeMultiStatus()\n#12 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/http\/lib\/Sapi.php(83): Sabre\\DAV\\Server->Sabre\\DAV\\{close}(
заменены важные параметры ***)\n#13 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/sabre\/dav\/lib\/DAV\ /Server.php(490): Sabre\\HTTP\\Sapi::sendResponse()\n#14 \/var\/www\/html\/ УДАЛЕНО ЧУВСТВИТЕЛЬНОЕ ЗНАЧЕНИЕ \/lib\/composer\/ sabre\/dav\/lib\/DAV\/Server.