Очень большие таблицы в SQL Server

решаемые. Причина в некоторой степени связана с автозагрузкой композитора.

Насколько я знаю, композитор хранит список цепочек зависимостей всех используемых файлов. В большинстве случаев, мне кажется, мне не нужно обновлять этот список, потому что список каким-то образом обновлен [неизвестным детектором обновлений].

В любом случае, я решаю эту проблему путем обновления списка, используя composer dump-autoload на консоли.

9
задан Andrew Barnett 24 March 2009 в 14:41
поделиться

9 ответов

[существует кластерный индекс с 6 полями и двумя другими индексами на единственных полях.]

Не зная деталей о полях, я попытался бы найти способ сделать кластерный индекс меньшим.

С SQL Server все кластеризованные поля ключа будут также включены во все некластеризованные индексы (как способ сделать заключительный поиск от некластерного индекса до фактической страницы данных).

Если Вы имеете шесть полей на уровне 8 байтов каждый = 48 байтов, умножаете это на еще два индексных раза 77 миллионов строк - и Вы смотрите на большое количество потраченного впустую пространства, которое переводит в большое количество операций ввода-вывода (и таким образом ухудшает производительность).

Для кластерного индекса для него АБСОЛЮТНО КРАЙНЕ ВАЖНО быть уникальным, стабильным, и как можно меньше (предпочтительно единственный INT или такой).

Marc

5
ответ дан 4 December 2019 в 06:41
поделиться

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

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

7
ответ дан 4 December 2019 в 06:41
поделиться

http://msdn.microsoft.com/en-us/library/ms143432.aspx

У Вас есть некоторая комната для роста.

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

4
ответ дан 4 December 2019 в 06:41
поделиться

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

Кроме того, Вы могли бы рассмотреть разделение таблицы. Это позволит Вам делить таблицу на несколько логических групп. Можно сделать это "закулисный", таким образом, это все еще появляется в SQL-сервере как одна таблица даже при том, что это сохранило отдельно, или можно сделать это вручную (создайте новый 'архив' или ежегодную таблицу и вручную отодвиньтесь строки). Так или иначе только сделайте это после рассмотрения других опций сначала потому что, если Вы не разбираетесь в этом, Вы все еще закончите тем, что имели необходимость проверить каждый раздел. Также: разделение действительно требует Enterprise Edition, таким образом, это - другая причина сохранить это для последнего средства.

1
ответ дан 4 December 2019 в 06:41
поделиться

У Вас должен действительно быть доступ ко всем 77 миллионам записей в единственной таблице?

Например, если Вам только нужен доступ к последнему ценность X месяцев данных, затем Вы могли рассмотреть создание стратегии архивирования. Это могло использоваться для перемещения данных к архивной таблице для сокращения объема данных и впоследствии, время запроса на 'горячей' таблице.

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

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

Вот является превосходное Техническое описание на разделении таблицы в SQL Server 2005

http://msdn.microsoft.com/en-us/library/ms345146.aspx

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

Удачи,

6
ответ дан 4 December 2019 в 06:41
поделиться

Согласие с Marc и Unkown выше... 6 индексов в кластерном индексе - слишком многие, особенно на таблице, которая имеет только 14 столбцов. У Вас не должно быть больше чем 3 или 4, если это, я скажу 1 или возможно 2. Можно знать, что кластерный индекс является фактической таблицей на диске поэтому, когда запись вставляется, механизм базы данных должен отсортировать его и поместить его в, он отсортировал организованное место на диске. Не кластерные индексы не, они поддерживают поиск 'таблицы'. Мои VLDBs размечаются на диске (КЛАСТЕРНЫЙ ИНДЕКС) согласно 1-й точке ниже.

  1. Уменьшите свой кластерный индекс до 1 или 2. Лучшим полевым выбором являются ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ (INT), если Вы имеете один, или поле даты, в котором поля добавляются к базе данных или некоторому другому полю, которое является естественным видом того, как Ваши данные добавляются к базе данных. Точка - Вы, пытаются сохранить те данные у основания таблицы... или разметить его на диске в лучшем (90% +) способ, которым Вы считаете записи. Это делает его так, чтобы не было никакого продолжения reorganzing или что получает один и только один удар для получения данных в правильном месте для очень начитанного. Обязательно поместите удаленные поля в некластерные индексы, таким образом, Вы не теряете эффективность поиска. Я никогда не помещал больше чем 4 поля на свой VLDBs. Если у Вас есть поля, которые являются обновлением часто, и они включены в Ваш кластерный индекс, АЙ, это собирается реорганизовать запись на диске и вызвать ДОРОГОСТОЯЩУЮ фрагментацию.
  2. Проверьте fillfactor на своих индексах. Чем больше коэффициент заполнения номер (100), тем более полны страницы данных и индексные страницы будут. Относительно того, сколько записей Вы имеете и сколько записей Ваш вводит Вас, изменит fillfactor # (+ или-) Ваших некластерных индексов для обеспечения пространства заливки, когда запись вставляется. Если Вы измените свой кластерный индекс на последовательное поле данных, то это не будет иметь значения так же на кластерном индексе. Эмпирическое правило (IMO), 60-70 fillfactor для высоких записей, 70-90 для средних записей, и 90-100 для высоких чтений / низких записей. Путем отбрасывания fillfactor к 70, будет означать, что для каждых 100 записей на странице, 70 записей записаны, который оставит свободное пространство 30 записей для новых или реорганизованных записей. Съедает больше пространства, но это верные удары, имеющие необходимость ДЕФРАГМЕНТИРОВАТЬСЯ каждую ночь (см. 4 ниже),
  3. Удостоверьтесь, что статистические данные существуют на таблице. Если Вы захотите развернуть базу данных для создания статистики с помощью "sp_createstats 'indexonly'", то SQL Server создаст всю статистику по всем индексам, которые механизм накопил как требование статистики. Не бросайте атрибут 'indexonly', хотя или Вы добавите статистику для каждого поля, которое затем не было бы хорошо.
  4. Проверьте использование таблицы/индексов DBCC SHOWCONTIG для наблюдения, какие индексы становятся фрагментированными большинство. Я не буду вдаваться в подробности здесь, просто знать, что необходимо сделать это. Затем на основе той информации, измените fillfactor, или вниз относительно изменений индексы испытывают изменение и как быстро (со временем).
  5. Установите расписание задания, которое сделает онлайн (DBCC INDEXDEFRAG) или в режиме офлайн (DBCC DBREINDEX) на отдельных индексах для дефрагментации их. Предупреждение: не делайте DBCC DBREINDEX на этом большом из таблицы без него являющийся во время причины времени обслуживания, это снизит приложения... особенно на КЛАСТЕРНОМ ИНДЕКСЕ. Вас предупредили. Протестируйте и протестируйте эту часть.
  6. Используйте планы выполнения для наблюдения, какие СКАНИРОВАНИЯ и КАНАЛЫ FAT существуют и корректируют индексы, затем дефрагментируют и переписывают сохраненный procs для избавлений от тех горячих точек. Если Вы видите КРАСНЫЙ объект в своем плане выполнения, это - потому что нет статистических данных по тому полю. Это плохо. Этот шаг является большим количеством "искусства, чем наука".
  7. На от пикового времени, выполненного UPDATE STATISTICS С FULLSCAN, чтобы дать механизму запроса столько информации о дистрибутивах данных, сколько Вы можете. Иначе сделайте стандартный UPDATE STATISTICS (со стандартным 10%-м сканированием) на таблицах во время будних вечеров или чаще поскольку Вы считаете целесообразным со своим observerations удостоверяться, что механизм имеет больше информации о дистрибутивах данных для получения данных для эффективно.

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

Никакая потребность перейти к Версии для предприятий. Я сделал хотя, чтобы говорить функции ранее с разделением. Но я сделал ОСОБЕННО, чтобы иметь намного лучше mult-распараллеливающие возможности с поиском и ДЕФРАГМЕНТАЦИЕЙ онлайн и обслуживанием... В Версии для предприятий это является намного намного лучше и более дружественным по отношению к VLDBs. Стандартный выпуск не обрабатывает выполнение DBCC INDEXDEFRAG с базами данных онлайн также.

10
ответ дан 4 December 2019 в 06:41
поделиться

В и себя, 77M записи не много для SQL Server. Как Вы загружаете 100 000 записей? это - пакетная загрузка каждый день? или через своего рода приложение OLTP? и это - проблема производительности, которую Вы имеете, т.е. добавляете данные? или действительно ли это - запросы что, давая Вам большинство проблем?

Если Вы добавляете записи 100K за один раз, и добавляемые записи вызывают кластерный индекс к re-org Ваша таблица, которая уничтожит Вашу производительность быстро. Больше деталей о структуре таблицы, индексах и типе вставленных данных поможет.

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

1
ответ дан 4 December 2019 в 06:41
поделиться

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

Уникальность не требуется для кластерного индекса. На самом деле лучшие кандидаты на поля, которые должны быть в кластерном индексе, являются, которые не уникальны и не используются в соединениях. Например, в a Persons таблица, где каждый Person принадлежит одному Group и Вы часто присоединяетесь Persons кому: Groups, при доступе к пакетам людей группой, Person.group_id был бы идеальный кандидат, для этого конкретного варианта использования.

0
ответ дан 4 December 2019 в 06:41
поделиться

Какие диски Вы имеете?

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

Вы могли бы переместить эту таблицу в другой диск путем помещения его в другую группу файлов. Вы можете также к тому же с индексами.

0
ответ дан 4 December 2019 в 06:41
поделиться
Другие вопросы по тегам:

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