Какие параметры запроса жесткого диска обычно учитываются при планировании последовательности запросов
Обновлено: 21.11.2024
Обычно при выполнении запроса вы получаете результаты в виде таблицы. Каждое заявление отображается на отдельной вкладке в окне инструментов «Службы». Например, если в запросе есть две инструкции SELECT, вы увидите две вкладки в окне инструмента.
В окне инструмента "Службы" есть список консолей, сгруппированных в соответствии с сеансом подключения к источнику данных.
Открывать новую вкладку для каждого запроса
По умолчанию DataGrip обновляет результаты на одной и той же вкладке каждый раз, когда вы выполняете запрос. Вы можете изменить это поведение и создавать вкладку каждый раз при выполнении запроса.
В настройках IDE Ctrl+Alt+S выберите База данных | Общие .
Установите флажок Открыть результаты в новой вкладке и нажмите OK .
Просмотр двух наборов результатов в редакторе
Нажмите кнопку "Результаты в редакторе", чтобы просмотреть наборы результатов друг над другом.
Используйте собственные заголовки для вкладок с результатами
Вы можете определить заголовок вкладки в разделе комментариев перед запросом. В поле Рассматривать текст как заголовок после можно зарезервировать комбинацию символов или символов, после которой любой текст будет рассматриваться как заголовок вкладки. По умолчанию комбинация не используется, поэтому любой текст после -- или /* рассматривается как заголовок вкладки.
Откройте настройки, нажав Ctrl+Alt+S , перейдите к базе данных | Общие .
В поле Рассматривать текст как заголовок после определите комбинацию заголовков вкладок.
Чтобы отключить эту функцию, откройте настройки Ctrl+Alt+S и перейдите к базе данных | Общие и снимите флажок Создать заголовок для результатов из комментария перед запросом.
Изменить значения в результирующем наборе
В наборе результатов щелкните значение ячейки, которое вы хотите изменить.
Укажите новое значение и нажмите Enter .
Чтобы отправить изменения в базу данных, щелкните значок "Отправить" () или нажмите Ctrl+Enter .
Как и в редакторе данных, вы можете редактировать значения в наборе результатов, автоматически фиксировать изменения, удалять строки, искать текст и перемещаться по данным.
Экспорт в файл
Чтобы экспортировать данные в файл, выполните одно из следующих действий:
Щелкните правой кнопкой мыши набор результатов, таблицу или представление и выберите Экспорт данных .
Щелкните запрос правой кнопкой мыши и выберите Экспорт данных в &файл .
На панели инструментов нажмите значок "Экспорт данных" () и выберите "Экспорт в файл" .
В диалоговом окне "Экспорт данных" нажмите "Экспорт в файл" .
Экспорт в буфер обмена
Выберите данные в наборе результатов или в редакторе и нажмите Ctrl+C .
На панели инструментов нажмите значок "Экспорт данных" () и выберите "Копировать в буфер обмена" .
Сравнить два набора результатов
Запускайте запросы к таблицам, которые хотите сравнить.
В окне инструмента "Службы" нажмите значок "Сравнить с" () и выберите набор результатов, который вы хотите добавить в сравнение.
При необходимости измените значение параметра "Допуск" в диалоговом окне сравнения. Параметр «Допуск» определяет максимальное количество различий, допустимых между двумя наборами результатов. Например, если вы хотите считать две строки равными, если их данные различаются в одном столбце, введите 1 в поле Допуск.
Закрепить вкладку с результатами запроса
Если для отображения результатов вашего запроса используется одна и та же вкладка, и вы получаете результат, который хотите сохранить, вы можете закрепить вкладку в окне инструмента.
Щелкните правой кнопкой мыши вкладку и выберите Закрепить вкладку .
Сортировать данные
Нажмите имя столбца, чтобы отсортировать данные столбца. По умолчанию сортировка столбцов не складывается. Это означает, что если вы щелкните имя столбца для сортировки данных, сортировка по другим столбцам будет очищена. Если вы предпочитаете сортировку с накоплением, щелкните имя столбца, удерживая нажатой клавишу Alt .
Указывает, что данные в этом столбце не отсортированы. Начальное состояние маркера сортировки.
Данные сортируются в порядке возрастания. Число справа от маркера (1 на картинке) — уровень сортировки. Вы можете сортировать более чем по одному столбцу. В таких случаях разные столбцы будут иметь разные уровни сортировки.
Данные сортируются в порядке убывания.
Можно включить параметр Сортировка по ORDER BY, чтобы включить сортировку данных по соответствующей СУБД.
Операции со столбцами в представлении структуры
В представлении структуры отображается список всех столбцов в выбранной таблице. Просмотр структуры доступен в окне инструментов Структура ( Вид | Окна инструментов | Структура ) или во всплывающем окне ( Ctrl+F12 ).
Вы можете выполнять следующие операции со столбцами:
Сортировать данные по возрастанию Alt+Shift+Up или по убыванию ( Alt+Shift+Down ).
Сбросить состояние сортировки ( Ctrl+Alt+Shift+Backspace )
Скрыть столбец или показать скрытый столбец ( Пробел ). Названия скрытых столбцов показаны зачеркнутыми.
Щелкните правой кнопкой мыши ячейку в строке заголовка таблицы и выберите Список столбцов .
Кроме того, для сортировки данных столбца используйте контекстное меню.
Копировать данные в другую базу данных
Дважды щелкните таблицу, чтобы открыть ее в редакторе данных.
Нажмите значок Копировать в базу данных на панели инструментов.
Укажите базу данных, целевую схему (чтобы создать новую таблицу с экспортированными данными) или таблицу (чтобы добавить экспортированные данные в существующую таблицу).
Настройте сопоставление данных и параметры для целевой таблицы.
Редактировать данные в операторах INSERT в виде таблицы
Выберите инструкции INSERT, которые вы хотите изменить.
Щелкните правой кнопкой мыши выделенный фрагмент и выберите "Редактировать как таблицу" .
Журналирование активности SQL
Просмотреть журнал запросов
На вкладке "Вывод" в окне инструментов "Службы" вы можете просмотреть журнал пользовательских и внутренних запросов.
Открыть консоль для источника данных F4 .
Выполнить запрос к источнику данных.
В окне инструмента "Службы" выберите соответствующий сеанс для вашей консоли и перейдите на вкладку "Вывод".
Найти журнал системных запросов
Журнал SQL включает все запросы, которые вы когда-либо выполняли в DataGrip. Это означает все пользовательские запросы и все внутренние запросы (за исключением запросов, выполняемых драйвером JDBC). Информация журнала хранится в файле database.log . Файл database.log хранится на жестком диске до тех пор, пока вы не удалите или не перезапишете его. Когда размер файла достигает 1 МБ, создается новый файл с другим именем.
Чтобы найти файл database.log , щелкните Справка | Показать журнал SQL. Вы можете открыть файл database.log в DataGrip или в текстовом редакторе.
Изменить расположение журнала SQL
Чтобы изменить расположение журнала SQL, добавьте свойство -Didea.system.path к пользовательским параметрам виртуальной машины. Это изменение затрагивает все журналы.
Нажмите Справка | Изменить пользовательские параметры ВМ .
В конце списка параметров добавьте следующую строку: -Didea.system.path=/path/to/your_log_directory .
Создание плана запроса EXPLAIN
Команда EXPLAIN показывает план выполнения оператора. Это означает, что вы можете увидеть подробную информацию о подходе, который планировщик использовал для выполнения оператора. Например, как сканируются таблицы, какие алгоритмы соединения используются для объединения необходимых строк, стоимость выполнения операторов и другая информация.
Стоимость выполнения – это предположение планировщика о том, сколько времени потребуется для выполнения оператора. Измерение производится в относительных единицах стоимости. Стоимость исполнения имеет два варианта: стартовая и полная. Начальные затраты показывают, сколько времени требуется для обработки первой строки, а общие затраты показывают, сколько времени требуется для обработки всех строк.
Если вы используете опцию ANALYZE с EXPLAIN, оператор фактически выполняется, а не только запланировано. В этом случае вы можете увидеть статистику времени выполнения в миллисекундах.
Посмотрите следующее видео, в котором показано, как создать план запроса EXPLAIN в DataGrip.
Создать график пламени для EXPLAIN
Щелкните правой кнопкой мыши оператор SQL и выберите "Объяснить план" .
На панели "Вывод" нажмите "План" .
Нажмите значок Flame Graph () и выберите один из следующих вариантов:
Общая стоимость: сколько времени требуется для возврата всех строк
Затраты на запуск: сколько времени потребуется, прежде чем можно будет обработать первую строку.
Создать график пламени для EXPLAIN ANALYSE
Щелкните правой кнопкой мыши оператор SQL и выберите "Объяснить план анализа" .
На панели "Вывод" нажмите "План" .
Нажмите значок Flame Graph () и выберите один из следующих вариантов:
Общая стоимость: сколько времени требуется для возврата всех строк (в относительных единицах стоимости).
Фактическое общее время: сколько времени требуется для возврата всех строк (в миллисекундах).
Затраты на запуск: сколько времени требуется для обработки первой строки (в относительных единицах стоимости).
Фактическое время запуска: сколько времени требуется для обработки первой строки (в миллисекундах).
В этой статье мы рассмотрим концепцию предложения SQL Order by и поймем, как механизм SQL работает с результатом упорядочения в запросе.
Введение
SQL был признан третьим в мире самым мощным языком программирования для обработки данных и машинного обучения. Большинство систем реального времени используют SQL для управления огромным количеством данных, с которыми они работают ежедневно. В результате понимание того, как работает запрос в Microsoft SQL Server, является очень ценным навыком.
Начать
Давайте углубимся в предложение SQL Order by, но сначала попытаемся понять, почему данные не упорядочены в таблице по умолчанию. Чтобы ответить на этот вопрос, давайте сделаем шаг назад и рассмотрим концепции теории множеств. С математической точки зрения SQL Server использует таблицу для представления концепции отношения. Каждое отношение содержит набор элементов, которые определяют свойства отношения и обычно называются набором. Мы также узнаем, что отношение считается набором или подмножеством и не следует порядку.В результате таблица SQL Server гарантирует отсутствие определенного порядка строк, найденных в ней.
Рекомендации
- Набор результатов SQL Server зависит от способа ввода данных в таблицу. В некоторых случаях данные выглядели отсортированными, но это не означает, что введенные данные и данные, хранящиеся на жестком диске, совпадают
- SQL Server не гарантирует порядок набора результатов. Он не зависит от порядка, если только мы явно не укажем, как мы хотим сортировать эти записи. Единственный способ изменить порядок отображения результатов — использовать предложение SQL Order by
- Предложение SQL Order by недопустимо для встроенных функций, представлений, производных таблиц и подзапросов, если оно не указано в предложениях SQL TOP или OFFSET и FETCH.
- Наличие ограничений, кластеризованного индекса, значений идентификаторов или последовательностей не гарантирует упорядоченность результатов. Опять же, если вы получаете вывод в отсортированном порядке, то это просто совпадение того факта, что данные введены в таблицу в том же порядке сортировки данных.
- Запрос SQL, в котором используются такие операторы набора, как UNION, EXCEPT или INTERSECT, SQL Order by допускается только в конце оператора
Примеры
В этом разделе мы рассмотрим несколько примеров SQL, чтобы лучше понять, как мы на самом деле работаем с предложением SQL Order by. Итак, давайте начнем с нескольких примеров.
Как использовать предложение SQL Order by в запросе SQL
В следующем примере мы собираемся запустить образец SQL без использования предложения SQL Order by. Вывод является четким указанием на то, что когда мы запускаем запрос в SQL Server, оптимизатор запросов просматривает запрос данных, создает план запроса и возвращает записи из таблицы или таблиц, и он основан на запросе, а также на его основе. о том, как данные физически организованы на диске.
Когда администратор базы данных работает с SQL Server, иногда он может сказать, что план выполнения похож на черную дыру. Однако на самом деле вы должны смотреть на планы выполнения как на прогнозы погоды.
В этой статье я буду обсуждать различные аспекты планов казней, типов и общих вариантов.
Дополнительную информацию об оптимизации запросов см. в статье Оптимизация запросов SQL — как определить, когда и если это необходимо
Оптимизация запросов
Основы оптимизации запросов основаны на том факте, что SQL Server всегда был оптимизатором, основанным на затратах.
Оптимизация на основе затрат включает в себя создание нескольких планов выполнения и выбор планов выполнения с наименьшими затратами для запуска и окончательного выполнения запроса
ЦП, ввод-вывод и память — это некоторые из параметров, которые SQL Server использует для определения стоимости и окончательного создания плана выполнения.
То, что вы будете писать для SQL Server, часто полностью отличается от того, что на самом деле выполняет SQL Server. Следовательно, это концепция операции логического запроса по сравнению с физической операцией, которую использует SQL Server.
Например, когда мы говорим о логическом ВНУТРЕННЕМ СОЕДИНЕНИИ, которое на самом деле физически преобразуется при выполнении SQL Server в виде вложенного цикла СОЕДИНЕНИЯ.
Давайте выполним следующий запрос, чтобы ознакомиться с концепцией операции логического запроса. Вы можете выбрать опцию включения фактического плана выполнения или CTRL+M
Снимок экрана взят из ApexSQL Plan, инструмента для просмотра и анализа планов выполнения запросов SQL Server
Здесь видно, что физическая операция включает вложенные циклы, а логическая операция включает внутреннее соединение.
Нашим физическим оператором в этом конкретном случае является вложенный цикл, который является фактическим режимом выполнения для SQL Server, тогда как логической операцией здесь является внутреннее соединение, определенное внутри нашего оператора select.
Поиск оптимального плана
В конечном итоге SQL Server определяет оптимальный план, находя баланс между тем, какой план он хочет выбрать, и максимизацией эффективности этого конкретного плана до фактического выполнения.
Таким образом, между созданием наилучшего плана и выполнением задачи за ограниченный промежуток времени существует взаимосвязь, прежде чем SQL Server откажется от бесконечной оптимизации плана запроса.
SQL Server выполняет эту оптимизацию затрат, и он достаточно эффективен для максимально быстрого создания наилучшего плана.
Проверим, выбирает ли SQL Server оптимальный план выполнения для предыдущего запроса или нет. Что мы собираемся сделать, так это явно указать хэш-соединение и сравнить планы выполнения.
Это показывает, что давать явный намек в данном конкретном случае дорого.
При применении правила 80-20 рекомендуется оставить SQL Server (оптимизатор на основе затрат) для выбора лучшего и наиболее оптимального плана.
Предполагаемые планы выполнения
Предполагаемый план выполнения для всех практических целей использует статистику и многие другие параметры, основанные на том, что доступно на этом сервере, и генерирует план.
Это примерный план, а не план, созданный SQL Server.
Это синоним первой приведенной нами аналогии с прогнозом погоды.
Далее мы рассмотрим различные варианты отображения предполагаемых планов выполнения
SHOWPLAN_TEXT
Этот параметр аналогичен предполагаемому графическому плану выполнения, поскольку он дает вам текст плана выполнения и информацию о том, что представляет собой план выполнения. Это не дает вам никаких излишеств, которые обычно связаны с планом выполнения.
SHOWPLAN_ALL
Эта опция аналогична предполагаемому графическому плану выполнения, но имеет некоторые дополнительные функции, связанные с ней, включая тип физического оператора и тип логического оператора
Это опять примерный план выполнения; помните, что вы не видели набора результатов, в котором был выполнен фактический запрос.
SHOWPLAN_XML
Вы видите, что план запроса представлен в формате XML. Вы можете посмотреть план выполнения согласно оценке.
Фактический план выполнения
Мы сказали, что предполагаемый план выполнения похож на прогноз погоды, поэтому фактический план выполнения — это то, где вы можете понять, был ли дождь на самом деле или нет.
Он показывает, что на самом деле делает SQL Server для получения результата вашего запроса.
Здесь мы рассмотрим параметры отображения фактических планов выполнения
СТАТИСТИКА ВРЕМЕНИ
Этот параметр показывает количество времени, затраченного SQL Server на выполнение данного конкретного запроса. Это также дает вам интересные сведения о некоторой информации.
В этом конкретном случае запрос выполняется со 163 строками, и вы также можете увидеть, сколько времени ЦП занял этот конкретный запрос, и каково фактическое время по отношению к процессу выполнения.
Итак, здесь указано, что время выполнения близко к 196 миллисекундам.
Если вы хотите точно знать, что именно выполняется запрос и сколько времени и ресурсов он занимает, это один из самых древних способов, но по-прежнему эффективно использовать в любой день.
СТАТИСТИКА ВВЕД-ВЫВОДОВ
Этот параметр показывает характеристики ввода-вывода. Вы можете видеть, что этот конкретный запрос в этой конкретной таблице пошел дальше и выполнил эти мини-сканирования, а это логические чтения.
Если у вас есть сканы и другое оборудование механизма, вы также увидите кое-что интересное. Вы также можете увидеть физические чтения, упреждающие чтения и данные больших объектов, включая связанные с ними чтения.
При наличии большого количества операций чтения сложного запроса эти методы можно использовать для фактического определения того, какая таблица отправляет большое количество операций чтения и, следовательно, приближается к физической подсистеме ввода-вывода.
Физическое чтение в этом конкретном случае показывает ноль, потому что оно не кэшируется. И если это значение очень велико, это означает, что для переноса данных из подсистемы ввода-вывода или жесткого диска в память или буферный пул было выполнено много физических операций ввода-вывода.
Установка времени включения статистики и установка ввода-вывода статистики — отличные операции над наборами, которые можно использовать, чтобы увидеть, как SQL Server выполняет выполнение.
Я видел, как администраторы баз данных возвращались ко мне и говорили: "Я также могу использовать профилировщик в качестве механизма, чтобы на самом деле пойти дальше и посмотреть на эти значения". Но когда вы анализируете простой запрос или оптимизируете простую операцию, всегда удобно иметь эти простые инструменты, которые работают даже с SQL Server 2000 дней, и это очень удобные инструменты, которые дают вам информацию и понимание запроса, который вы играете. с.
СТАТИСТИЧЕСКИЙ ПРОФИЛЬ
Это похоже на SHOWPLAN_TEXT для предполагаемых планов выполнения, но извлекает текст фактического плана выполнения, что означает, что запрос уже выполнен.
На производительность запросов может повлиять ряд факторов. Следующие аспекты операций с данными, кластерами и базами данных влияют на скорость обработки запросов.
Количество узлов, процессоров или слайсов. Вычислительный узел разделен на слайсы. Больше узлов означает больше процессоров и больше слайсов, что позволяет быстрее обрабатывать запросы за счет одновременного выполнения частей запроса в слайсах. Однако большее количество узлов также означает большие расходы, поэтому вам необходимо найти баланс стоимости и производительности, подходящий для вашей системы. Дополнительные сведения об архитектуре кластера Amazon Redshift см. в разделе Архитектура системы хранилища данных.
Типы узлов. Кластер Amazon Redshift может использовать один из нескольких типов узлов. Каждый тип узла предлагает разные размеры и ограничения, чтобы помочь вам соответствующим образом масштабировать кластер. Размер узла определяет емкость хранилища, память, ЦП и цену каждого узла в кластере. Дополнительные сведения о типах узлов см. в разделе Обзор кластеров Amazon Redshift в Руководстве по управлению кластерами Amazon Redshift.
Распределение данных. Amazon Redshift хранит табличные данные на вычислительных узлах в соответствии со стилем распределения таблицы. Когда вы запускаете запрос, оптимизатор запросов перераспределяет данные по вычислительным узлам по мере необходимости для выполнения любых объединений и агрегаций. Выбор правильного стиля распределения для таблицы помогает свести к минимуму влияние этапа перераспределения за счет размещения данных там, где они должны быть до выполнения соединений. Дополнительные сведения см. в разделе Работа со стилями распределения данных.
Порядок сортировки данных. Amazon Redshift хранит табличные данные на диске в порядке сортировки в соответствии с ключами сортировки таблицы. Оптимизатор запросов и обработчик запросов используют информацию о том, где находятся данные, чтобы уменьшить количество блоков, которые необходимо просмотреть, и тем самым повысить скорость выполнения запросов. Дополнительные сведения см. в разделе Работа с ключами сортировки.
Размер набора данных. Большой объем данных в кластере может снизить производительность запросов, поскольку необходимо сканировать и перераспределять больше строк. Вы можете смягчить этот эффект, регулярно очищая и архивируя данные, а также используя предикат для ограничения набора данных запроса.
Параллельные операции. Одновременный запуск нескольких операций может повлиять на производительность запросов. Каждая операция занимает один или несколько слотов в доступной очереди запросов и использует память, связанную с этими слотами. Если выполняются другие операции, может быть недостаточно слотов очереди запросов. В этом случае запрос должен дождаться открытия слотов, прежде чем он сможет начать обработку. Дополнительные сведения о создании и настройке очередей запросов см. в разделе Реализация управления рабочей нагрузкой.
Структура запроса. То, как написан ваш запрос, влияет на его производительность. Насколько это возможно, пишите запросы для обработки и возврата как можно меньшего объема данных, который соответствует вашим потребностям. Дополнительные сведения см. в разделе Рекомендации Amazon Redshift по разработке запросов.
Компиляция кода. Amazon Redshift создает и компилирует код для каждого плана выполнения запроса.
Скомпилированный код работает быстрее, поскольку устраняет накладные расходы, связанные с использованием интерпретатора. Как правило, у вас есть некоторые накладные расходы при первом создании и компиляции кода. В результате производительность запроса при первом запуске может ввести в заблуждение. Накладные расходы могут быть особенно заметны при выполнении разовых запросов. Запустите запрос еще раз, чтобы определить его типичную производительность. Amazon Redshift использует бессерверную службу компиляции для масштабирования компиляции запросов за пределы вычислительных ресурсов кластера Amazon Redshift. Скомпилированные сегменты кода кэшируются локально в кластере и в практически неограниченном кэше. Этот кэш сохраняется после перезагрузки кластера. Последующие выполнения того же запроса выполняются быстрее, поскольку они могут пропустить фазу компиляции. Кэш несовместим между версиями Amazon Redshift, поэтому код перекомпилируется при выполнении запросов после обновления версии. Используя масштабируемый сервис компиляции, Amazon Redshift может компилировать код параллельно, чтобы обеспечить стабильно высокую производительность. Величина ускорения рабочей нагрузки зависит от сложности и параллелизма запросов.
Читайте также: