akpaevj / OneSTools.EventLog

Библиотеки и готовые инструменты для чтения и экспорта журнала регистрации 1С в ClickHouse и ElasticSearch
MIT License
129 stars 46 forks source link

Сбой при разборе большого ЖР #26

Closed gep2005 closed 3 years ago

gep2005 commented 3 years ago

В процессе импорта большого ЖР (~70Гб) периодически вываливается ошибка:

dbug: OneSTools.EventLog.Exporter.Core.ClickHouse.ClickHouseStorage[0]
      10000 items were being written to MajorWMS_el
fail: OneSTools.EventLog.Exporter.Core.ClickHouse.ClickHouseStorage[0]
      Failed to write data to MajorWMS_el
      ClickHouse.Client.ClickHouseServerException (0x000000F1): Code: 241, e.displayText() = DB::Exception: Memory limit (total) exceeded: would use 888.61 MiB (attempt to allocate chunk of 4218086 bytes), maximum: 886.85 MiB (version 21.7.4.18 (official build))

         at ClickHouse.Client.ADO.ClickHouseConnection.HandleError(HttpResponseMessage response, String query)
         at ClickHouse.Client.ADO.ClickHouseConnection.PostStreamAsync(String sql, Stream data, Boolean isCompressed, CancellationToken token)
         at ClickHouse.Client.Copy.ClickHouseBulkCopy.PushBatch(ICollection`1 rows, ClickHouseType[] columnTypes, String[] columnNames, CancellationToken token)
         at ClickHouse.Client.Copy.ClickHouseBulkCopy.WriteToServerAsync(IEnumerable`1 rows, IReadOnlyCollection`1 columns, CancellationToken token)
         at OneSTools.EventLog.Exporter.Core.ClickHouse.ClickHouseStorage.WriteEventLogDataAsync(List`1 entities, CancellationToken cancellationToken)

Перезапуск (Ctrl+C и запуск) исправляют ситуацию и загрузка сообщений продолжается. Проблема касается EventLogExporter. Менеджер еще не смотрел.

akpaevj commented 3 years ago

CH при записи аллоцирует память под всю порцию. Похоже, что в вашем случае размер выделяемой памяти превышает допустимый в настройках. Проверьте потребление памяти на сервере и поиграйтесь с настройками отсюда: https://clickhouse.tech/docs/ru/operations/settings/query-complexity/

akpaevj commented 3 years ago

Как вариант - можно попробовать уменьшить выгружаемую порцию до 5000

gep2005 commented 3 years ago

Как вариант - можно попробовать уменьшить выгружаемую порцию до 5000

Этот вариант проще. Поэтому проверил его - не помогло. Буду изучать настройки КХ. Спасибо!

akpaevj commented 3 years ago

Как вариант - можно попробовать уменьшить выгружаемую порцию до 5000

Этот вариант проще. Поэтому проверил его - не помогло. Буду изучать настройки КХ. Спасибо!

Вообще, странно что-то так мало памяти выделено. Если КХ болтается в виртуалке - попробуйте выделить по-больше системе.

gep2005 commented 3 years ago

Прошло немного времени и я все же решил проблему. Вы правы - было выделено мало памяти. В моем случае докер был установлен в виде ВМ VirtualBox и всей этой машине было выделено 1Гб ОЗУ. Т.к. на сервере памяти много - выделил 8Гб и проблема ушла. Думаю так же можно решить проблему и в случае докера по варианту Hiper-V - так же идем в остнастку Hiper-V и у ВМ Docker увеличиваем память до требуемого размера.