на каждом. При запросе к Distributed таблице первого шарда по query_log видно, что на второй шард запрос отправляется только на одну реплику, а на третий на обе. В итоге запрос на одной из реплик третего шарда падает с ошибкой Code: 210. DB::NetException: I/O error: Broken pipe, while writing to socket. Но в целом запрос корректно отрабатывает. Подскажите, это нормальное поведение? Либо что-то не то в настройках?
да это нормальное поведение есть переменная connect_timeout_with_failover_ms https://clickhouse.com/docs/en/operations/settings/settings#connect-timeout-with-failover-ms посмотрите какое у вас выставлено значение, раньше она 100ms была. и если нет ответа на коннект к реплике. то спрашивается следующая живая в шарде, в итоге когда ответ появляется distributed клиент нода инициатор сокет со своей стороны закрыла и вы получаете broken pipe еще есть max_parallel_replicas https://clickhouse.com/docs/en/operations/settings/settings#max_parallel_replicas ее не рекомендуют с sub queries использовать...
Это делает hedged_request. Их можно отключит
У нас connect_timeout_with_failover_ms = 1000, max_parallel_replicas = 1. Из порядка 600 тыс однотипных запросов в сутки только порядка 1000 с такой ошибкой. В этом случае что может является причиной запуска запроса на вторую реплику?
ну вон вам там про hedged denny уже писал да может...
Да, use_hedged_requests = 1. Но почему одни запросы дублируются, а другие нет?
потому что в одних таймаут срабатывает в других нет
Обсуждают сегодня