Ресурсы для высокопроизводительного проектирования баз данных SQL Server - PullRequest
6 голосов
/ 20 марта 2010

Мне бы хотелось, чтобы некоторые предложения по онлайн-ресурсам (блоги, руководства и т. Д., А не по форумам) помогли мне научиться проектировать высокопроизводительные базы данных SQL Server, которые работают с большими объемами данных и имеют большие нагрузки с точки зрения оборота данных. и запросов в минуту.

Предложения

EDIT

Нагрузка, о которой я говорю, в основном связана с оборотом данных. Основная таблица содержит до миллиона строк, около 30 полей данных различного размера и обновляется с помощью примерно 30-40000 новых строк в день, и по меньшей мере 200000 строк обновляются новыми данными каждый день. Эти обновления происходят на постоянной основе в течение дня. Кроме того, все изменения и обновления необходимо извлекать из базы данных в течение дня, чтобы поддерживать актуальность большого индекса Lucene.

Ответы [ 4 ]

4 голосов
/ 21 марта 2010

Походит на довольно управляемую нагрузку на умеренный сервер - вы не сказали, какие операции чтения выполняются во время этих вставок и обновлений (кроме извлечений для Lucene) и размера (в байтах / тип данных) данных (количество элементов, которое вы указали, выглядит нормально).

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

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

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

Кроме того, миллион строк и 200 тыс. Обновлений в день меня не беспокоили, но вы упоминаете Lucene (то есть полнотекстовое индексирование), поэтому, вероятно, некоторые столбцы довольно большие. Обновление больших столбцов и их экспорт, очевидно, занимает гораздо больше времени - и гораздо большую пропускную способность и количество операций ввода-вывода. 30 столбцов в узкой миллионной таблице строк с традиционными столбцами типов данных - это совсем другая история. Возможно, вы захотите взглянуть на профиль обновления и посмотреть, нужно ли разделить таблицу по вертикали, чтобы переместить некоторые столбцы из строки (если они большие, они уже будут сохранены вне строки), чтобы улучшить поведение блокировки.

Итак, главное, когда у вас большая нагрузка на чтение: вставки и обновления должны быть максимально быстрыми, блокироваться как можно меньше (избегая эскалации блокировки), обновлять как можно меньше индексов для поддержки операции чтения.

Если нагрузка чтения слишком велика (так что вставки / обновления начинают конфликтовать), но не требует 100% актуальной информации (скажем, 5-минутная или 15-минутная задержка не заметна), вы можете прочитать только поддерживаемая версия базы данных (идентичная посредством репликации, по-разному индексируемая для производительности, денормализованная или по-разному смоделированная - как размерная модель). Возможно, ваши индексы Lucene могут содержать дополнительную информацию, так что все дорогостоящие операции чтения остаются в Lucene, т. Е. Lucene покрывает многие крупные операции чтения, тем самым снижая нагрузку чтения в базе данных до необходимых операций чтения, которые поддерживают вставки / обновления (обычно это небольшое чтение) и транзакционная часть вашего приложения (т. е., скажем, экран информации об обслуживании клиентов будет использовать обычную базу данных, в то время как ваша почасовая панель мониторинга будет использовать вторичную базу данных).

3 голосов
/ 20 марта 2010

Вы можете попробовать образцы SQL Server на CodePlex или DatabaseAnswers.com .

3 голосов
/ 20 марта 2010

Вот некоторые ресурсы по устранению неполадок и оптимизации производительности в SQL Server, которые я считаю действительно полезными:

http://updates.sqlservervideos.com/2009/09/power-up-with-sql-server-sql-server-performance.html

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

2 голосов
/ 20 марта 2010

http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=high+performance+database

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

Укажу, что среди людей, создавших этот сайт, есть несколько, которые работают с очень большими базами данных. Вы можете многому научиться у них. http://lessthandot.com/

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