Методы оптимизации для больших баз данных - PullRequest
3 голосов
/ 04 января 2009

Какие методы оптимизации вы используете для очень больших баз данных? Если наши оценки верны, в нашем приложении будут храниться миллиарды записей в БД (MS SQL Server 2005), в основном журналы, которые будут использоваться для статистики. Данные содержат числа (в основном целые) и текст (текст сообщения об ошибке, URL-адреса).

Меня интересуют ЛЮБЫЕ советы, хаки, решения.

Ответы [ 3 ]

8 голосов
/ 04 января 2009

Вопрос немного расплывчат, но вот несколько советов:

  • Используйте соответствующее оборудование для ваших баз данных. Я бы тоже выбрал 64-битную ОС.
  • Иметь выделенные машины для БД. Используйте быстрые диски, настроенные для оптимальной производительности. Чем больше дисков вы можете разогнать, тем выше производительность.
  • Оптимизация БД по типу запросов, которые будут выполняться. Что происходит больше SELECT или INSERT?
  • Загрузка происходит в течение всего дня или всего на несколько часов? Можете ли вы отложить некоторые из вещей, которые будут работать на ночь?
  • Наличие дополнительных резервных копий.
  • Если вы рассмотрите Oracle вместо SQL Server, вы можете использовать такие функции, как Grid и Table Partitioning, которые могут значительно повысить производительность.
  • Рассмотрите возможность решения проблемы распределения нагрузки между серверами БД.
  • Предварительно разработайте схемы и таблицы, чтобы запросы выполнялись максимально быстро. Рассмотрим также соответствующие индексы.

Вы должны быть более точными в том, как вы будете хранить эти журналы. Они LOBs в БД? Простые текстовые записи?

0 голосов
/ 04 января 2009

ссылка Дункана содержит хороший набор советов. Вот еще несколько советов:

Если вам не нужно запрашивать полностью обновленные данные (т. Е. Допустимы ли данные до последнего часа или закрытия рабочего дня вчера), рассмотрите возможность создания отдельного витрина данных для аналитики. Это позволяет оптимизировать это для быстрых аналитических запросов.

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

Для приложений VLDB, включающих сканирование больших таблиц, рассмотрите возможность хранения с прямым подключением с использованием как можно большего количества контроллеров, а не SAN. Вы можете получить большую пропускную способность дешевле. Однако, если ваш набор данных меньше (скажем) 1 ТБ или около того, это, вероятно, не будет иметь большого значения.

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

Если вы разбиваете свои таблицы фактов, рассмотрите возможность размещения каждого раздела в отдельном дисковом массиве или, по крайней мере, в отдельном канале SAS или SCSI, если у вас есть массивы SAS с репликацией портов. Обратите внимание, что это будет иметь значение только в том случае, если вы регулярно выполняете запросы между несколькими разделами.

0 голосов
/ 04 января 2009

Я не использую его сам, но я прочитал, что можно использовать Hadoop в сочетании с hbase для распределенного хранения и распределенного анализа данных, таких как журналы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...