[Закрываются] лучшие 10 узких мест производительности SQL Server

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

, Если бы это "время от времени" потребность в Вашем приложении, я определенно рекомендовал бы Google или Yahoo, Геокодирующий API, но осторожен для чтения их условий лицензирования.

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

Несмотря на эти ограничения, они - оба отличный выбор, потому что они часто обновляют свои уличные базы данных. Большинство свободных инструментов бэкенда и библиотек используют перепись и данные дороги ТИГРА, которые нечасто обновляются, таким образом, Вы, менее вероятно, будете успешно геокодировать адреса в быстро растущих областях или новых подразделениях.

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

я не думаю, что этот был упомянут все же, но ESRI имеет веб-сервисы ArcWeb , которые включают геокодирование, хотя они не являются очень дешевыми. В прошлый раз, когда я использовал их, это стоило приблизительно 1.5 цента за поиск, но необходимо было предварительно оплатить определенную сумму для начала работы. Снова главное преимущество состоит в том, что дорожные данные, которые они используют, усовершенствованы своевременно, и можно использовать данные в коммерческих ситуациях, что Google не позволяет. Услуги ArcWeb также подадут спутниковые и воздушные фотографии с высоким разрешением а-ля Google Maps, снова оцененная на запрос.

, Если Вы хотите к самокрутке или имеете доступ к намного более точным данным, можно купить подписки к данным GIS компаний как TeleAtlas, но это не дешево. Можно купить только состояние или ценность графства данных, если потребности являются чрезвычайно местными. Существует несколько уровней данных - функции GIS только, GIS плюс подробные улицы, все, что плюс данные геокода, все это плюс поток трафика/direction/speed ограничивает для маршрутизации. Конечно, цена повышается, как Вы поднимаетесь уровни.

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

12
задан 5 revs, 4 users 100% 29 May 2015 в 12:02
поделиться

14 ответов

Давайте посмотрим (в произвольном порядке)

  1. Курсоры

  2. non-sargable where clauses

  3. отказ от индексации полей внешнего ключа

  4. отказ от индексации полей, обычно используемых в where clause

  5. коррелированных подзапросах

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

  7. Плохо работающий код, исходящий из ORM

  8. Код, который вызывает слишком много чтений или вызывается более одного раза, когда в этом не было необходимости (я замечены приложения, которые отправляют один и тот же код много раз, когда в этом не было необходимости, или каждый раз при открытии страницы)

  9. сетевой канал перегружен

  10. Пользовательские функции вызывают построчную обработку

  11. Анализ параметров

  12. ] устаревшая статистика

  13. Объединение вместо объединения всех

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

Я обычно сталкиваюсь со следующими узкими местами (в порядке частоты):

  1. Отсутствующие или неправильные индексы (что приводит к сканированию таблиц)
  2. Плохо написанные запросы
  3. Конфликт ввода / вывода
0
ответ дан 2 December 2019 в 05:28
поделиться

Если система ввода-вывода на сервере не справляется с заданием, вы можете получить конкуренцию за защелку базы данных tempdb, что, в свою очередь, может вызвать серьезные проблемы с производительностью.

0
ответ дан 2 December 2019 в 05:28
поделиться

Использование табличных данных по одной строке вместо одной таблицы за раз (например, курсоры).

Ненужные (или плохо спроектированные) блокировки.

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

Наличие ограничений при массовой загрузке данных. Серьезно тормозит вставка. Выключите их, загрузите данные и снова включите.

1
ответ дан 2 December 2019 в 05:28
поделиться

Использование курсоров. Для любой базы данных.

1
ответ дан 2 December 2019 в 05:28
поделиться

Физический .... Закончилась память и необходимо перейти на диск.

3
ответ дан 2 December 2019 в 05:28
поделиться
  1. Сервер - как память и хранилище типы.
  2. Сеть - Задержка и пропускная способность проблемы.
  3. Индексирование - не уверен, если вы считаете эта структура базы данных
  4. Запросы - неверные запросы с соединением проблемы, которые могут вызвать полную таблицу сканирование.
3
ответ дан 2 December 2019 в 05:28
поделиться

Вы ищете quotemeta ?

Возвращает значение EXPR с обратной косой чертой для всех символов, отличных от слов.

Обновление: Как hobbs указывает в комментариях, quotemeta не предназначена для этой цели и, если подумать немного подробнее, могут возникнуть проблемы со встроенными nul s. С другой стороны, String :: ShellQuote хрипит при обнаружении встроенных null s.

Самый безопасный способ - полностью избежать оболочки. Использование формы списка 'system' может иметь большое значение для этого (несколько месяцев назад я с ужасом обнаружил, что cmd.exe все еще может быть задействован в Windows), Я бы порекомендовал это.

Если вам нужен вывод команды,

0
ответ дан 2 December 2019 в 05:28
поделиться

сканирование таблицы, потому что:

  • индекс не существует
  • статистика устарела
  • функции в предложении where предотвращает использование
4
ответ дан 2 December 2019 в 05:28
поделиться

Применение скалярной функции к каждой строке в наборе результатов

SELECT fn_EveluateSomeValue([ColumnName]) FROM LargeTable
1
ответ дан 2 December 2019 в 05:28
поделиться

То же самое, а также плохо написанные клиентские приложения, которые получают огромный набор записей, а затем обрабатывают его сами, потому что разработчик этого не сделал. Я понимаю, что sql - это что угодно, только не огромная куча для хранения данных.

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

Отсутствие индексов для объединений или часто запрашиваемых полей.

Исключение полей в индексах, когда вы всегда ищете и возвращаете одно и то же значение (например, форматированное имя сотрудника при поиске с помощью EmployeeID), вызывающее два действия вместо одного.

1
ответ дан 2 December 2019 в 05:28
поделиться

Мне никогда не удавалось найти много полезной информации о разбиении больших запросов, в Oracle, похоже, вам больше советуют держать все вместе в одном запросе, а не использовать временные таблицы. Вы также можете получить проблемы с журналом, если в вашей temp-таблице содержится много данных. Хотелось бы узнать больше/записать несколько ссылок?

0
ответ дан 2 December 2019 в 05:28
поделиться

Пункты, которых следует избегать (если возможно):

  • DISTINCT / UNIQUE
  • UNION
  • ГРУППА ПО
  • ПОРЯДОК
-1
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

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