Медленная CREATE TABLE с движком MariaDB ColumnStore

  1. Система: Ubuntu 18 — SSD
  2. Версия ColumnStore MariaDB: 1.2.5
  3. Строки таблицы: 3

Если сравнить операцию создания таблицы с операцией, выполненной InnoDB перед ColumnStore, InnoDB работает в X раз быстрее, чем ColumnStore.

Я выполнил CREATE TABLE с INSERT AS SELECT, используя движок ColumnStore. Результаты Очень медленно. Это последовательность:

DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
ENGINE=columnstore;

INSERT INTO example 
 (num, meta, min, max)
AS SELECT num, meta, min, max FROM old_example;

-- TIME TO EXECUTE
-- On row affected, taking 2.8s

Теперь взгляните на то, как я работал с InnoDB.


DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
  (SELECT num, meta, min, max FROM old_example);

-- TIME TO EXECUTE
-- On row affected, taking 103ms

Обратите внимание 1: я знаю, что в первой я выполняю еще одну операцию, и она отличается, но я провел трассировку, выполняя каждый из разделенных запросов, и обнаружил, что CREATE TABLE с ENGINE=ColumnStore — это то, что занимает так много времени. Обратите внимание 2: столбцовый магазин MariaDB теперь имеет операцию CREATE AS SELECT. .

В связи с этим есть несколько вопросов:

Вопрос 1. Есть ли какая-то конфигурация MariaDB ColumnStore, которую я могу сделать, чтобы сделать возможной операцию создания таблицы, а затем вставлять данные из другой таблицы быстрее? Вопрос 2: работает ли ColumnStore MariaDB быстрее только для выбора?


person calebeaires    schedule 18.04.2020    source источник
comment
Почему это важно? Вы создаете таблицу один раз, а не часто.   -  person Barmar    schedule 18.04.2020
comment
Не похоже, что это проблема с вашим кодом, поэтому я не знаю, с чем вы ожидаете, что мы вам поможем. Ссылки на ColumnStore см. на странице mariadb.com/kb/en/mariadb-columnstore. форум и система Jira от MariaDB для сообщений об ошибках.   -  person Barmar    schedule 18.04.2020
comment
сначала служба maria захватывает код, затем механизм columnstore, а затем еще одна оптимизация. но больше всего времени требует более быстрого выбора и объединения, вам нужны некоторые накладные расходы во время создания/вставки, см. также mariadb.com/kb/en/mariadb-columnstore-performance-concepts   -  person nbk    schedule 18.04.2020
comment
@Barmar Это важно для моего приложения. Это рабочий процесс для преобразования данных и отображения его результатов на панели инструментов. Иногда один рабочий процесс повторяется create table много раз   -  person calebeaires    schedule 19.04.2020


Ответы (1)


Разница в скорости ожидаема.

Судя по таймингам, я подозреваю, что набор данных крошечный.

Хранилище колонок предназначено для обработки очень больших наборов данных, поэтому не оптимизировано для крошечных наборов.

Глядя на внутреннюю структуру Columnstore, вы обнаружите большие структуры, сжатие и индексацию каждого столбца. Кроме того, существует множество возможных методов сжатия; вероятно, он тщательно изучает данные, чтобы решить, какой из них использовать для каждого столбца. Все они направлены на выполнение SELECT за счет любых других операций.

В вашей таблице InnoDB нет ни индексов, ни сжатия, а объем дискового пространства, несмотря на отсутствие сжатия, вероятно, намного меньше. (С большей таблицей InnoDB будет больше.)

У Columnstore есть своя ниша; используйте его для этого; не ожидайте, что он будет конкурировать с InnoDB во всех областях.

person Rick James    schedule 26.04.2020