Проблема при загрузке большого количества словарей. Poco::Exception. Code: 1000, No thread available

1,024 views
Skip to first unread message

Stepan Semiokhin

unread,
Apr 3, 2017, 6:44:05 AM4/3/17
to ClickHouse
Добрый день!

Такая ситуация: есть  PostgreSQL с кучей словарей, есть файл со 100 словарями. 
Ровно 16 словарей обрабатывается как надо, а на остальных ошибка Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = No thread available, e.what() = No thread available

Пробовал править параметр background_pool_size (в users.xml дефолтный в дефолтный профиль прописывал) - безрезультатно.

С чем может быть связано такое поведение?

Просто посмотрев код нашел кусок конкретно про это https://github.com/yandex/ClickHouse/blob/1d836b2bf8fef378d47258957ff74ed3a4aff136/contrib/libpoco/Foundation/include/Poco/ThreadPool.h

ThreadPool(int minCapacity = 2,
int maxCapacity = 16,
int idleTime = 60,
int stackSize = POCO_THREAD_STACK_SIZE);
/// Creates a thread pool with minCapacity threads.
/// If required, up to maxCapacity threads are created
/// a NoThreadAvailableException exception is thrown.
/// If a thread is running idle for more than idleTime seconds,
/// and more than minCapacity threads are running, the thread
/// is killed. Threads are created with given stack size.

Вот она и моя maxCapacity в виде 16 словарей.

Как можно это дело подправить? (там есть метод addCapacity, но в моем случае он, видимо, не выполняется)

Vitaliy Lyudvichenko

unread,
Apr 4, 2017, 11:24:38 AM4/4/17
to ClickHouse
Привет!
А он при загрузке сервера падает или при выполнении запроса? Стэктрейс не удается получить?
Случаем в config.xml не прописано <dictionaries_lazy_load>0</dictionaries_lazy_load> ?

background_pool_size это к пулу ClickHouse'a для фоновых мержей относится.
Здесь же внутренний пул Poco'шной библиотеки лопается.

Скорее всего если тут 4 параметр Poco::Data::SessionPool подправить, то заработает:
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Dictionaries/ODBCDictionarySource.cpp#L26
Проверить это оперативно к сожалению не могу.

понедельник, 3 апреля 2017 г., 13:44:05 UTC+3 пользователь Stepan Semiokhin написал:

Stepan Semiokhin

unread,
Apr 5, 2017, 6:09:34 AM4/5/17
to ClickHouse
Параметр dictionaries_lazy_load , т.е. по дефолту он true => все прогружается когда я делаю select * from system.dictionaries

Можно как-нибудь этот параметр "из вне" поправить или в каких-нибудь пропертис/конфигах задать?

вторник, 4 апреля 2017 г., 18:24:38 UTC+3 пользователь Vitaliy Lyudvichenko написал:

Vitaliy Lyudvichenko

unread,
Apr 5, 2017, 8:20:42 AM4/5/17
to ClickHouse
Ну по-дефолту он true - это то что нужно.

Можете перед запуском запроса, котрый восроизодит проблему, запустить отдельно следующую комманду:
echo -e "catch throw\ncommands\nbt\nc\nend\nc\n" > gdbinit-clickhouse && sudo gdb -batch -x gdbinit-clickhouse -p `pidof clickhouse-server`
Запустить запрос и прислать её вывод?


среда, 5 апреля 2017 г., 13:09:34 UTC+3 пользователь Stepan Semiokhin написал:

Vitaliy Lyudvichenko

unread,
Apr 5, 2017, 11:15:40 AM4/5/17
to ClickHouse
dictionaries_lazy_load можно пописать в config.xml
<dictionaries_lazy_load>0</dictionaries_lazy_load>



среда, 5 апреля 2017 г., 15:20:42 UTC+3 пользователь Vitaliy Lyudvichenko написал:

Stepan Semiokhin

unread,
Apr 5, 2017, 11:27:33 AM4/5/17
to ClickHouse
Прошу прощения, отвлекли и не дописал :)  dictionaries_lazy_load у нас не установлен, соответственно, он true. Так же и нужно же?

А про параметр - я имел ввиду Poco::Data::SessionPool, возможно его как-то поправить не в коде?

Команду, которую вы прислали попозже попробую выполнить, а в логе стектрейс состоит из одной вот этой строки

среда, 5 апреля 2017 г., 18:15:40 UTC+3 пользователь Vitaliy Lyudvichenko написал:

Vitaliy Lyudvichenko

unread,
Apr 5, 2017, 12:38:16 PM4/5/17
to ClickHouse


среда, 5 апреля 2017 г., 18:27:33 UTC+3 пользователь Stepan Semiokhin написал:
Прошу прощения, отвлекли и не дописал :)  dictionaries_lazy_load у нас не установлен, соответственно, он true. Так же и нужно же?
Да, вам как раз лучше лениво загружать. Т.е. натсройка по-умолчанию (true) вас полностью должна устраивать. 

А про параметр - я имел ввиду Poco::Data::SessionPool, возможно его как-то поправить не в коде?
Нет, только в коде. 

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

Vitaliy Lyudvichenko

unread,
May 3, 2017, 9:43:30 AM5/3/17
to ClickHouse
Тут человек разобрался https://github.com/yandex/ClickHouse/issues/750
По-быстрому можно решить проблему, если изменить Poco library в указанных местах и пресобрать CH.

среда, 5 апреля 2017 г., 19:38:16 UTC+3 пользователь Vitaliy Lyudvichenko написал:
Reply all
Reply to author
Forward
0 new messages