Redshift: кэш результатов запроса и кеш компиляции запросов - PullRequest
0 голосов
/ 29 ноября 2018

Этот вопрос связан с кэшем результатов и кэшем компиляции запросов в Redshift.

Я проверяю свои запросы на время выполнения.Я вчера выполнил тот же набор запросов для проверки кеша компиляции запросов, и они выполнялись в миллисекундах.Сегодня я снова попытался проверить время выполнения, но включил кэш сеанса и проверил время выполнения для последующего запуска.время выполнения сегодня намного больше, чем вчера.

Вопрос

  • Влияет ли выполнение запросов с включенным кэшем результатов на время выполнения?
  • тот же запрос с отключенным кэшем результатов для сеанса выполнялся действительно быстрее, чем при включенном результате кэширования. Почему это так?
  • Какой период времени или сколько запросов выполняется, остается ли кэш компиляции запросов?

Сравнительный снимок для тестирования

PS Я прочитал кучу статей и постов, касающихся кеша компиляции запросов и кеша результатов, но не нашел конкретного ответа.

Спасибо и всего наилучшего.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы должны учитывать время компиляции запроса и кэширование результатов, это совершенно разные вещи.

первый запуск sql-шаблона работает медленнее, так как красное смещение должно оптимизироваться (компилировать) Это.я думаю, что единственный способ очистить этот сборник - перезапустить красное смещение.

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

например, для данного запроса

select * from table where xyz='example1';

Этот первый запуск скомпилирует запрос, поэтому он займет больше времени.этот процесс зависит от сложности SQL, очень сложный SQL может скомпилировать 30 секунд.

Если у вас включен кэш результатов запроса, то второй прогон точный запрос

select * from table where xyz='example1';

, вероятно, займет 100 мс или меньше (исключая сетевое время, если результаты большие)

Однако, если вы выполните подобный запрос, например select * from table, где xyz = 'example 2 ';

Это не может использовать кэш результатов, но МОЖЕТ использовать скомпилированную версию первого запроса, поэтому он будет работать эффективно.

, если вы запуститедругой запрос, такой как

select * from table where xyz='example1' order by 1 desc;

Тогда кеш не будет использоваться, и компиляция должна произойти.

Итак, для правильного бенчмаркинга отключите кеш результатов, но откажитесь от первого запуска любогоданный шаблон запроса.

...