Лучший способ проверить производительность хранилища данных?

StackOverflow https://stackoverflow.com/questions/4811989

Вопрос

У меня есть хранилище данных на основе PostgreSQL.

До сих пор я пытался запустить запросы в базе данных, содержащей лишь часть моей реальной базы данных. Как только я написал запросы таким образом, чтобы они сделали их эффективными для этой небольшой тестовой базы данных, я запускаю запросы на реальной.

Проблема в том, что, как только я запускаю запросы в реальной базе данных, реальная база данных заканчивается памятью и начинает писать такие вещи, как индексы и временные таблицы на диск. Это означает, что это может быть, что разные запросы будут оптимальными для тестовой базы данных и реальной базы данных. Означает ли это, что мне действительно нужно запускать запросы, которые занимают несколько минут, чтобы узнать, какой запрос является оптимальным.

Это было полезно?

Решение

Узнайте, как интерпретировать EXPLAIN вывод, затем проверьте, что EXPLAIN Вывод показывает, что выбранный план запроса в вашей большой базе данных похож на то, что вы ожидаете, прежде чем запустить запрос.

Другие советы

Три вопроса:

1) Насколько сложны запросы? Генерация индексов и временных таблиц предполагает, что сервер должен генерировать эти вещи из -за сложных операций на неиндексированных столбцах. Насколько это вероятно? Из того, что вы сообщаете, кажется, что вероятный ответ "сложный"

2) Насколько велики наборы возвратов? Конечный результат 100 строк или 1 миллион? Из того, что вы сообщаете, ответ может быть чем угодно. Я подозреваю, что этот вопрос не так важен, но важно, по крайней мере, знать.

3) Повторный вопрос 1 по -другому, даже если возвращаемые наборы небольшие, существуют ли огромные промежуточные результаты, которые должны быть составлены на пути к небольшому результату? Опять же, я подозреваю, что здесь генерируются большие сложные промежуточные результаты.

Это предполагает, что, по крайней мере, необходимо индексировать некоторые вещи, и, возможно, данные должны быть структурированы по пути, чтобы быть ближе к тому, что вы пытаетесь запросить.

Последний вопрос, является ли это распространенной проблемой для большинства ваших более важных запросов или только для одного или двух?

Измените в ответ на комментарий: Я делаю хранилища данных весь день, а некоторые - 10 минут или около того. Некоторые занимают часы, и я отталкиваю их на фоновую работу и разбиваю их на этапы, чтобы не допустить увязчивого ухаживания. Это характер обработки очень больших наборов данных.

Мои вопросы в первоначальном ответе направлены на выяснение того, будут ли ваши проблемы Когда-либо финиш. Можно невольно написать запрос, который дает столько промежуточных данных, что вы можете уйти, вернуться через 2 дня, и он все еще работает. Поэтому я бы перевел свои первоначальные вопросы, на самом деле они - единственный способ полностью ответить на ваш вопрос.

Резюме: Да, некоторые запросы занимают гораздо больше времени, это природа зверя. Лучшее, на что вы можете надеяться, - это производительность линейна для количества данных, которые читаются, и если есть 100 миллионов строк для обработки, это займет минуты вместо секунд. Но что еще более важно, если запрос продлится за 4 секунды на 1 миллион рядов, но на 100 миллионов рядов занимает >> 400 секунд (например, час), тогда те оригинальные вопросы, которые я задал, помогут вам выяснить, с целью оптимизации оптимизации эти запросы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top