Какие шаги должны быть необходимыми для оптимизации плохо работающего запроса?

Вам нужно увеличить размер памяти в Jdeveloper, перейдите в setDomainEnv.cmd.

set WLS_HOME=%WL_HOME%\server    
set XMS_SUN_64BIT=**256**
set XMS_SUN_32BIT=**256**
set XMX_SUN_64BIT=**3072**
set XMX_SUN_32BIT=**3072**
set XMS_JROCKIT_64BIT=**256**
set XMS_JROCKIT_32BIT=**256**
set XMX_JROCKIT_64BIT=**1024**
set XMX_JROCKIT_32BIT=**1024**

if "%JAVA_VENDOR%"=="Sun" (
    set WLS_MEM_ARGS_64BIT=**-Xms256m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms256m -Xmx512m**
) else (
    set WLS_MEM_ARGS_64BIT=**-Xms512m -Xmx512m**
    set WLS_MEM_ARGS_32BIT=**-Xms512m -Xmx512m**
)

и

set MEM_PERM_SIZE_64BIT=-XX:PermSize=**256m**
set MEM_PERM_SIZE_32BIT=-XX:PermSize=**256m**

if "%JAVA_USE_64BIT%"=="true" (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%
) else (
    set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%
)

set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=**1024m**
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=**1024m**
10
задан Community 23 May 2017 в 12:08
поделиться

7 ответов

  1. Посмотрите на план выполнения в запросе анализатор
  2. Посмотрите то, чего шаг стоит большинству
  3. Оптимизируйте шаг!
  4. Возвратитесь к шагу 1 [спасибо Vinko]
15
ответ дан 3 December 2019 в 14:54
поделиться

В SQL Server можно посмотреть на План запросов в Studio управления или Query Analyzer. Это скажет Вам грубый процент времени, проведенного в каждом пакете операторов. Вы захотите искать следующее:

  • Сканирования таблицы; это означает, что Вы - абсолютно недостающие индексы
  • Индексные сканирования; Ваш запрос не может использовать корректные индексы
  • Толщина стрелок между каждым шагом в запросе говорит Вам, сколько строк производится тем шагом, очень толстые стрелки означает, что Вы обрабатываете много строк и можете указать, что должны быть оптимизированы некоторые соединения.

Некоторые другие общие советы:

  • Большое количество условных операторов, таких как несколько, если еще операторы, может заставить SQL Server постоянно восстанавливать план запросов. Можно проверить на этого Профилировщика использования.
  • Удостоверьтесь, что различные запросы не блокируют друг друга, такого как оператор обновления, блокирующий избранный оператор. Этого можно избежать путем определения (nolock) подсказки в операторах выбора SQL Server.
  • Как другие упомянули, испытайте Настраивающий мастер Производительности в Studio управления.

Наконец, я настоятельно рекомендовал бы созданию ряд нагрузочных тестов (использующий Тестовый Выпуск Visual Studio 2008 года), который можно использовать для моделирования поведения приложения при контакте с большой суммой запросов. Некоторые узкие места производительности sql только проявляются при этих обстоятельствах, и способность воспроизвести их делает намного легче зафиксировать.

7
ответ дан 3 December 2019 в 14:54
поделиться

Индексы могут быть хорошим местом для запуска...

Низко висящий плод может быть снесен с Индексным Настраивающим Мастером SQL Server.

3
ответ дан 3 December 2019 в 14:54
поделиться

Существует несколько вещей, на которые можно посмотреть оптимизировать производительность запросов.

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

  2. Полагайте, что денормализовывание Вашей базы данных уменьшает соединения

  3. Избегайте циклов (т.е. выберите курсоры), придерживайтесь операций присвоения.

  4. Реализуйте запрос как хранимую процедуру, поскольку это предварительно компилируется и выполнится быстрее.

  5. Удостоверьтесь, что Вам настраивали корректные индексы. Если Ваша база данных используется главным образом для поиска, затем рассматривают больше индексов.

  6. Используйте план выполнения, чтобы видеть, как обработка сделана. То, чего Вы хотите избежать, является сканированием таблицы, поскольку это является дорогостоящим.

  7. Удостоверьтесь, что Автоматическая Статистика установлена на на. SQL нужно это, чтобы помочь решить оптимальное выполнение. См. большое сообщение Mike Gunderloy для большего количества информации. Основы Статистики в SQL Server 2005

  8. Удостоверьтесь, что Ваши индексы не фрагментируются, Уменьшая Индексную Фрагментацию SQL Server

  9. Удостоверьтесь, что Ваши таблицы не фрагментируются. Как Обнаружить Фрагментацию Таблицы в SQL Server 2000 и 2005

2
ответ дан 3 December 2019 в 14:54
поделиться

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

После того как Вы выясняете, где, пора заняться как и почему. Смотрите на тип запросов, которые Вы пытаетесь формовать. Избегайте циклов по всей стоимости, поскольку они являются медленными. Избегайте курсоров любой ценой, потому что они являются медленными. Придерживайтесь основанных на наборе запросов, когда когда-либо возможно.

Существуют способы дать подсказки sql на типе, соединяет с использованием, если Вы используете соединения. Будьте осторожны здесь, хотя, в то время как одна подсказка может ускорить Ваш запрос однажды, это может замедлиться, Ваш запрос 10 сворачиваются в следующий раз через в зависимости от данных и параметров.

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

1
ответ дан 3 December 2019 в 14:54
поделиться

Я не уверен в других базах данных, но для SQL Server я рекомендую План выполнения. Это очень ясно (хотя с большой вертикальной и горизонтальной прокруткой, если у Вас нет 400" мониторов!) показывает, какие шаги Вашего запроса являются неопытными время.

Если у Вас есть один шаг, который берет сумасшедшие 80%, то, возможно, индекс мог быть добавлен, то после тонкой настройки индекса, повторно выполнял План выполнения для нахождения следующего самого большого шага.

После пары тонких настроек можно найти, что действительно нет никаких шагов, которые стоят из других, т.е. они - все 1-2% каждый. Если это так, затем Вы, возможно, затем должны были бы видеть, существует ли способ, которым можно сократить объем данных, включенный в запрос, те четыре миллиона закрытых заказов на покупку должны быть включены в "Активные Заказы на покупку" запрос? Нет, поэтому исключите все те, которые имеют СОСТОЯНИЕ ='C'... или что-то как этот.

Другое улучшение, которое Вы будете видеть из Плана выполнения, является поисками закладки, в основном это находит соответствие в индексе, но затем SQL Server должен быстро тралить через таблицу для нахождения записи, которую Вы хотите. Эта операция могла бы время от времени занимать больше времени, чем просто сканирование таблицы во-первых будет иметь, если это так, Вам действительно нужен тот индекс?

С индексами, и особенно с SQL Server 2005 необходимо обратиться к ВКЛЮЧАТЬ пункту, это в основном позволяет Вам иметь столбец в индексе, действительно не будучи в индексе, поэтому если все данные, в которых Вы нуждаетесь для своего запроса, находятся в Вашем индексе или являются включенным столбцом затем, SQL Server не должен даже смотреть на таблицу, большую погрузку спортивного типа.

2
ответ дан 3 December 2019 в 14:54
поделиться

Посмотрите на индексы на таблицах, которые делают запрос. Индексы могут быть необходимы на конкретных полях, которые участвуют в где пункт. Также посмотрите на поля, используемые в соединениях в запросе (если соединения существуют). Если индексы уже существуют, смотрят на тип индекса.

Сбой этого (потому что существуют отрицательные стороны к использованию подсказок блокировки), Взгляд на блокировку подсказок и явно именование индекса для использования в соединении. Используя NOLOCKS более очевидно, если Вы получаете много заведенных в тупик транзакций.

Сделайте то, что римлянин и Andy S упомянули сначала все же.

1
ответ дан 3 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: