Производительность одной широкой таблицы в базе данных, ориентированной на столбцы (Vectorwise)
Я выполняю некоторые тесты на векторе, используя звездообразную схему и одну денормализованную таблицу. В денормализованной таблице у меня есть 5 дополнительных столбцов, которые> varchar (100). Я новичок в мире ориентированных на столбцы и, следовательно, хочу понять, чтобы мои факты были правильными.
Несколько фактов:
Запрашиваемая память = 20 ГБ, Кэш-память установлена на 7 ГБ
Размер именных столбцов составляет около 6G, 6,5G, 2,6G и 650M. Теперь, очевидно, они не могут поместиться в моей кеш-памяти, поэтому система связана с вводом / выводом.
Если я использую подход звездной схемы, он работает быстрее, так как он должен кэшировать целочисленные столбцы, поскольку все они легко помещаются в мою кэш-память основной памяти.
У меня есть несколько вопросов, касающихся этого:
Если мне нужно использовать одну таблицу, мне нужно увеличить оперативную память, чтобы все эти столбцы помещались в память? Я хотел бы знать, если кто-то еще сделал такую структуру, используя Vertica или любые другие базы данных, ориентированные на столбцы. Если да, используете ли вы один и тот же подход, все столбцы varchar должны помещаться в ОЗУ?
Простой запрос схемы звезды
select col1,col2, col3, sum(col4), sum(col5) from fact_table join tabl1 on condition join tab2 on condition where tab1.col1 = 1234 and tab2.col2 = 6789
Работает медленнее, чем:
select col1,col2,col3,sumcol4, sumcol5 from (select col1,col2, col3, sum(col4) as sumcol4, sum(col5) as sumcol5 from fact_table where fact_table.col1 = 1234 and fact_table.col2 = 6789) as facts join tabl1 on condition join tab2 on condition
Зачем?
Примечание. Основные таблицы tab1 и tab2 являются резидентными в основной памяти.
Я использую Vectorwise, но просто хочу знать, верны ли эти наблюдения и для Vertica?
1 ответ
У Vertica нет идеи хранить таблицы в памяти. В некоторых случаях и в некоторых видах объединений данные таблицы могут уже находиться в памяти или помещаться туда. Но в конечном итоге производительность Vertiac зависит от того, как вы храните вещи на диске.
Я не ожидал бы, что производительность этих двух запросов в Vectorwise окажет какое-либо влияние на то, как схожие запросы и таблицы будут работать в Vertica. Тем не менее, меньшее количество строк, связанных с объединением во втором запросе, позволяет предположить, что это будет лучше в различных механизмах выполнения запросов.