2012-03-05 00:09:41 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
2012-07-26 20:16:57 +00:00
|
|
|
|
#include <Poco/Timespan.h>
|
2012-03-05 00:09:41 +00:00
|
|
|
|
#include <DB/Core/Defines.h>
|
2012-08-02 19:03:32 +00:00
|
|
|
|
#include <DB/Core/Field.h>
|
2012-03-05 00:09:41 +00:00
|
|
|
|
|
2012-12-24 19:50:22 +00:00
|
|
|
|
#include <DB/Interpreters/Limits.h>
|
|
|
|
|
|
2012-03-05 00:09:41 +00:00
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
2013-12-10 17:07:09 +00:00
|
|
|
|
namespace LoadBalancing
|
|
|
|
|
{
|
|
|
|
|
enum LoadBalancing
|
|
|
|
|
{
|
|
|
|
|
/// среди реплик с минимальным количеством ошибок выбирается случайная
|
2013-12-11 11:51:08 +00:00
|
|
|
|
RANDOM = 0,
|
2013-12-10 17:07:09 +00:00
|
|
|
|
/// среди реплик с минимальным количеством ошибок выбирается реплика
|
|
|
|
|
/// с минимальным количеством отличающихся символов в имени реплики и имени локального хоста
|
2013-12-11 11:51:08 +00:00
|
|
|
|
NEAREST_HOSTNAME
|
2013-12-10 17:07:09 +00:00
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2012-03-05 00:09:41 +00:00
|
|
|
|
/** Настройки выполнения запроса.
|
|
|
|
|
*/
|
|
|
|
|
struct Settings
|
|
|
|
|
{
|
2012-10-30 20:15:07 +00:00
|
|
|
|
/// Максимальный размер блока для чтения
|
|
|
|
|
size_t max_block_size;
|
|
|
|
|
/// Максимальное количество потоков выполнения запроса
|
|
|
|
|
size_t max_threads;
|
|
|
|
|
/// Максимальное количество соединений при распределённой обработке одного запроса (должно быть больше, чем max_threads).
|
|
|
|
|
size_t max_distributed_connections;
|
|
|
|
|
/// Какую часть запроса можно прочитать в оперативку для парсинга (оставшиеся данные для INSERT, если есть, считываются позже)
|
|
|
|
|
size_t max_query_size;
|
|
|
|
|
/// Выполнять разные стадии конвейера выполнения запроса параллельно
|
|
|
|
|
bool asynchronous;
|
|
|
|
|
/// Интервал в микросекундах для проверки, не запрошена ли остановка выполнения запроса, и отправки прогресса.
|
|
|
|
|
size_t interactive_delay;
|
2012-07-26 20:16:57 +00:00
|
|
|
|
Poco::Timespan connect_timeout;
|
2012-11-06 18:20:00 +00:00
|
|
|
|
Poco::Timespan connect_timeout_with_failover_ms; /// Если следует выбрать одну из рабочих реплик.
|
2012-07-26 20:16:57 +00:00
|
|
|
|
Poco::Timespan receive_timeout;
|
|
|
|
|
Poco::Timespan send_timeout;
|
2013-09-07 04:54:59 +00:00
|
|
|
|
Poco::Timespan queue_max_wait_ms; /// Время ожидания в очереди запросов, если количество одновременно выполняющихся запросов превышает максимальное.
|
2012-10-30 20:15:07 +00:00
|
|
|
|
/// Блокироваться в цикле ожидания запроса в сервере на указанное количество секунд.
|
|
|
|
|
size_t poll_interval;
|
|
|
|
|
/// Максимальное количество соединений с одним удалённым сервером в пуле.
|
|
|
|
|
size_t distributed_connections_pool_size;
|
2012-11-06 17:04:38 +00:00
|
|
|
|
/// Максимальное количество попыток соединения с репликами.
|
|
|
|
|
size_t connections_with_failover_max_tries;
|
2013-04-29 12:40:53 +00:00
|
|
|
|
/** Переписывать запросы SELECT из CollapsingMergeTree с агрегатными функциями
|
2013-09-07 02:03:13 +00:00
|
|
|
|
* для автоматического учета поля Sign
|
|
|
|
|
*/
|
2013-04-24 13:34:04 +00:00
|
|
|
|
bool sign_rewrite;
|
2013-09-07 02:03:13 +00:00
|
|
|
|
/// Считать минимумы и максимумы столбцов результата. Они могут выводиться в JSON-форматах.
|
|
|
|
|
bool extremes;
|
2013-09-08 05:53:10 +00:00
|
|
|
|
/// Использовать ли кэш разжатых блоков.
|
|
|
|
|
bool use_uncompressed_cache;
|
2013-11-03 22:25:17 +00:00
|
|
|
|
/// Использовать ли SplittingAggregator вместо обычного. Он быстрее для запросов с большим состоянием агрегации.
|
|
|
|
|
bool use_splitting_aggregator;
|
2012-03-05 00:09:41 +00:00
|
|
|
|
|
2013-12-11 11:51:08 +00:00
|
|
|
|
LoadBalancing::LoadBalancing load_balancing;
|
2013-12-10 17:07:06 +00:00
|
|
|
|
|
2012-12-24 19:50:22 +00:00
|
|
|
|
/// Всевозможные ограничения на выполнение запроса.
|
|
|
|
|
Limits limits;
|
|
|
|
|
|
2012-05-09 15:15:45 +00:00
|
|
|
|
Settings() :
|
|
|
|
|
max_block_size(DEFAULT_BLOCK_SIZE),
|
|
|
|
|
max_threads(DEFAULT_MAX_THREADS),
|
2012-10-30 20:15:07 +00:00
|
|
|
|
max_distributed_connections(DEFAULT_MAX_DISTRIBUTED_CONNECTIONS),
|
2012-05-09 15:15:45 +00:00
|
|
|
|
max_query_size(DEFAULT_MAX_QUERY_SIZE),
|
2013-09-08 08:29:02 +00:00
|
|
|
|
asynchronous(false),
|
2012-07-26 20:16:57 +00:00
|
|
|
|
interactive_delay(DEFAULT_INTERACTIVE_DELAY),
|
|
|
|
|
connect_timeout(DBMS_DEFAULT_CONNECT_TIMEOUT_SEC, 0),
|
2013-09-07 04:54:59 +00:00
|
|
|
|
connect_timeout_with_failover_ms(1000 * DBMS_DEFAULT_CONNECT_TIMEOUT_WITH_FAILOVER_MS),
|
2012-07-26 20:16:57 +00:00
|
|
|
|
receive_timeout(DBMS_DEFAULT_RECEIVE_TIMEOUT_SEC, 0),
|
2012-08-16 18:02:15 +00:00
|
|
|
|
send_timeout(DBMS_DEFAULT_SEND_TIMEOUT_SEC, 0),
|
2013-09-07 04:54:59 +00:00
|
|
|
|
queue_max_wait_ms(1000 * DEFAULT_QUERIES_QUEUE_WAIT_TIME_MS),
|
2012-10-22 19:55:19 +00:00
|
|
|
|
poll_interval(DBMS_DEFAULT_POLL_INTERVAL),
|
2012-11-06 17:04:38 +00:00
|
|
|
|
distributed_connections_pool_size(DBMS_DEFAULT_DISTRIBUTED_CONNECTIONS_POOL_SIZE),
|
2013-04-24 13:34:04 +00:00
|
|
|
|
connections_with_failover_max_tries(DBMS_CONNECTION_POOL_WITH_FAILOVER_DEFAULT_MAX_TRIES),
|
2013-12-10 17:07:06 +00:00
|
|
|
|
sign_rewrite(false), extremes(false), use_uncompressed_cache(true), use_splitting_aggregator(false),
|
2013-12-10 17:07:09 +00:00
|
|
|
|
load_balancing(LoadBalancing::RANDOM)
|
2012-07-26 20:16:57 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
2012-08-02 19:03:32 +00:00
|
|
|
|
|
|
|
|
|
/// Установить настройку по имени.
|
2013-02-01 20:29:22 +00:00
|
|
|
|
void set(const String & name, const Field & value);
|
2013-02-01 19:02:04 +00:00
|
|
|
|
|
2013-02-17 19:54:32 +00:00
|
|
|
|
/// Установить настройку по имени. Прочитать сериализованное в бинарном виде значение из буфера (для межсерверного взаимодействия).
|
2013-02-01 20:29:22 +00:00
|
|
|
|
void set(const String & name, ReadBuffer & buf);
|
2013-02-01 19:02:04 +00:00
|
|
|
|
|
2013-02-17 19:54:32 +00:00
|
|
|
|
/// Установить настройку по имени. Прочитать значение в текстовом виде из строки (например, из конфига, или из параметра URL).
|
|
|
|
|
void set(const String & name, const String & value);
|
|
|
|
|
|
|
|
|
|
/** Установить настройки из профиля (в конфиге сервера, в одном профиле может быть перечислено много настроек).
|
|
|
|
|
* Профиль также может быть установлен с помощью функций set, как настройка profile.
|
|
|
|
|
*/
|
|
|
|
|
void setProfile(const String & profile_name);
|
|
|
|
|
|
2013-02-01 19:02:04 +00:00
|
|
|
|
/// Прочитать настройки из буфера. Они записаны как набор name-value пар, идущих подряд, заканчивающихся пустым name.
|
2013-02-01 20:29:22 +00:00
|
|
|
|
void deserialize(ReadBuffer & buf);
|
2013-02-01 19:02:04 +00:00
|
|
|
|
|
|
|
|
|
/// Записать все настройки в буфер.
|
2013-02-01 20:29:22 +00:00
|
|
|
|
void serialize(WriteBuffer & buf) const;
|
2013-12-11 11:51:08 +00:00
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::string toString(const LoadBalancing::LoadBalancing & load_balancing) const;
|
2012-03-05 00:09:41 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|