Оптимизация на основе затрат
Оптимизация запросов — это процесс выбора наиболее эффективного или наиболее благоприятного типа выполнения оператора SQL. Оптимизация запросов — это искусство применения правил для перезаписи дерева операторов, которое вызывается в запросе, и создания оптимального плана. План называется оптимальным, если он возвращает ответ за наименьшее время или занимает наименьшее пространство.
Оптимизация на основе затрат:
Для данного запроса и среды оптимизатор выделяет стоимость в числовой форме, связанную с каждым шагом возможного плана, а затем находит эти значения вместе, чтобы получить оценку стоимости плана или возможной стратегии. После расчета стоимости всех возможных планов оптимизатор пытается выбрать план с наименьшей возможной оценкой затрат. По этой причине оптимизатор иногда может называться оптимизатором, основанным на затратах. Ниже приведены некоторые особенности оптимизации на основе затрат:
- Оптимизация на основе затрат основана на стоимости запроса, который необходимо оптимизировать.
- Запрос может использовать множество путей в зависимости от значения индексов, доступных методов сортировки, ограничений и т. д.
- Целью оптимизации запроса является выбор наиболее эффективного пути реализации запроса при минимально возможной минимальной стоимости в виде алгоритма.
- Стоимость выполнения алгоритма должна быть предоставлена оптимизатором запросов, чтобы можно было выбрать наиболее подходящий запрос для операции.
- Стоимость алгоритма также зависит от кардинальности входных данных.
Оценка затрат:
Чтобы оценить стоимость различных доступных планов выполнения или стратегий выполнения, дерево запросов просматривается и изучается как структура данных, содержащая ряд основных операций, связанных для выполнения запроса. Стоимость операций, присутствующих в запросе, зависит от способа выбора операции, так что доля операции выбора, которая формирует выходные данные. Также важно знать ожидаемую мощность вывода операции. Мощность выходных данных очень важна, поскольку она формирует входные данные для следующей операции.
Стоимость оптимизации запроса зависит от следующего:
- Мощность-
Известно, что кардинальность — это количество строк, которые возвращаются при выполнении операций, указанных в плане выполнения запроса. Оценки мощности должны быть правильными, так как она сильно влияет на все возможности плана выполнения. - Селективность-
Селективность относится к количеству выбранных строк. Избирательность любой строки из таблицы или любой таблицы из базы данных почти зависит от условия. Выполнение условия приводит нас к селективности этой конкретной строки. Условие, которое должно быть удовлетворено, может быть любым, в зависимости от ситуации. - Расходы-
Стоимость относится к сумме денег, потраченных на систему для оптимизации системы. Мера затрат полностью зависит от проделанной работы или количества используемых ресурсов.
Первым шагом является использование SQL-команды ANALYZE TABLE COMPUTE STATISTICS для вычисления статистики таблицы. Используйте команду DESCRIBE EXTENDED SQL для проверки статистики.
Статистика таблицы:
Статистика таблицы может быть вычислена для таблиц, разделов и столбцов и выглядит следующим образом:
- Общий размер (в байтах) таблицы или разделов таблицы.
- Количество строк таблицы или разделов таблицы.
- Статистика столбца , такая как min, max, num_nulls, Different_count, avg_col_len, max_col_len, гистограмма.
ANALYZE TABLE COMPUTE STATISTICS Команда SQL:
Оптимизация на основе затрат использует статистику, хранящуюся в хранилище метаданных, то есть во внешнем каталоге, с помощью команды SQL ANALYZE TABLE.
ANALYZE TABLE tableIdentifier partitionSpec; COMPUTE STATISTICS (NOSCAN | FOR COLUMNS identifierSeq);
В зависимости от варианта ANALYZE TABLE вычисляет различную статистику, т. е. таблицы, разделов или столбцов.
- ANALYZE TABLE без спецификации PARTITION и предложения FOR COLUMNS.
- ANALYZE TABLE со спецификацией PARTITION (но без предложения FOR COLUMNS).
- ANALYZE TABLE с предложением FOR COLUMNS (но без спецификации PARTITION).
DESCRIBE EXTENDED Команда SQL:
Статистику таблицы, разделов или столбца (хранящегося в хранилище метаданных) можно просмотреть с помощью команды DESCRIBE EXTENDED SQL:
(DESC | DESCRIBE) TABLE? (EXTENDED | FORMATTED); tableIdentifier partitionSpec? describeColName;
Компоненты стоимости выполнения запроса:
Ниже приведены компоненты стоимости выполнения запроса:
- Стоимость доступа к вторичному хранилищу-
Это могут быть затраты на поиск, чтение или запись блоков данных, которые изначально находились во вторичном хранилище, особенно на диске. Стоимость поиска записей в файле также зависит от типа структуры доступа к этому файлу. - Стоимость использования памяти-
Стоимость использования памяти можно рассчитать, просто используя количество буферов памяти, необходимых для выполнения запроса. - Стоимость хранения-
Стоимость хранения — это стоимость хранения любых промежуточных файлов (файлов, являющихся результатом обработки ввода, но не являющихся в точности результатом), которые создаются стратегией выполнения запроса. - Вычислительная стоимость-
Это стоимость выполнения операций с памятью, доступных для записи в буферах данных. Такие операции, как поиск записей, объединение записей или сортировка записей. Это также можно назвать стоимостью процессора. - Стоимость связи-
Это стоимость, связанная с отправкой или передачей запроса и его результатов из одного места в другое. Сюда также входит стоимость передачи таблицы и результатов на различные сайты в процессе оценки запроса.
Проблемы оптимизации на основе затрат:
Ниже приведены вопросы оптимизации на основе затрат:
- В оптимизации на основе затрат количество стратегий выполнения, которые можно учитывать, на самом деле не является фиксированным. Количество стратегий выполнения может варьироваться в зависимости от ситуации.
- Иногда этот процесс действительно очень затратен по времени, потому что не всегда гарантирует поиск наилучшей оптимальной стратегии.
- Это дорогой процесс.