Индексы на большой базе данных SQL - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть очень большая таблица в базе данных SQL Azure, которая уже содержит более 30 миллионов строк и имеет много вставок, происходящих с таблицей каждый день ~ 50-60k

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

Поскольку Db находится на лазурномнекоторые индексы были автоматически применены лазурью при просмотре выполняемых запросов, которые в настоящее время вызывают проблемы с производительностью, поскольку размер БД очень велик.Используя dmv в SQL, я обнаружил, что размер данных составляет около 15 ГБ, но индекс почти в 65 ГБ

Как в этом случае создать эффективные индексы?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

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

0 голосов
/ 12 декабря 2018

Считаете ли вы кластерные индексы в размере индекса?Поскольку этот индекс хранит данные, он не должен учитываться как размер индекса.Это должны быть только все другие типы индексов (некластеризованное, некластеризованное хранилище столбцов и т. Д.).

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

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

Короче говоря, настройка производительности базы данных SQL Azure практически не отличается от настройки производительности любой другой базы данных SQL Server.

0 голосов
/ 12 декабря 2018

Брентозар опубликовал свой бесплатный скрипт , который проводит хороший анализ, такой как:

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

Можно определить, какие индексы следует отбрасывать в базе данных SQL Azure, на основе приведенного выше сценария.

Как говорится в MSDN, можно удалить индексы из базы данных SQL Azure.

...