2010-07-13 4 views
0

Я хочу заказать SQL-вставки в таблицу, чтобы оптимизировать использование страниц, избегая, насколько возможно, фрагментации. Я буду запускать службу Windows .net, которая каждые 2 часа берет некоторые данные из базы данных и оптимизирует ее для будущих запросов. Используется столбец varchar (6000), хотя, по моим оценкам, он редко выходит за пределы 4000 байт. Фактически этот столбец может варьироваться в пределах от 600 до 2400. Это 6000, чтобы избежать усечения ошибок. Тем не менее я могу контролировать размер столбца через .net. Никогда не будет обновлений или удалений. Просто выбирает (и вставляет каждые 2 часа). Будут около 1000 вставок каждые 2 часа.Как избежать фрагментации фрагмента сервера SQL в этом сценарии?

Я использую Sql Server 2005. Размер страницы составляет 8096 байт. Мне нужно вставить строки в таблицу. Учитывая размер строк, от 4 до 12 строк могут помещаться на странице.

Итак, из .net Я буду читать данные из базы данных, хранить их в памяти (возможно, использовать какой-то алгоритм кластеризации?) И вставить около 1000 строк.

Мне было интересно, есть ли способ избежать или минимизировать фрагментацию страницы в этом сценарии.

ответ

1

Является ли таблица btree или кучей? У вас есть кластерный индекс? Если да, то в каком столбце указан кластерный индекс и как вычисляется значение столбца при вставке?

Зачем вам волнует фрагментация? Космическое рассмотрение или чтение вперед производительности? Для пробела вы должны пропустить SQL 2005 и перейти на SQL 2008 для Page compression. Для того, чтобы читать дальше, стоило бы исследовать, для чего вам нужно большое чтение вперед.

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

+0

Я использую Btree, кластерный индекс для int и не кластеризованный индекс на 2 smalldatetimes и int column (альтернативный ключ), этот будет использоваться для основного запрошенного запроса. Я не буду читать дальше. Я забочусь о пространстве. Я планирую хранить историческую информацию в течение как минимум 10 лет для юридических целей, поэтому я стараюсь избегать потери пространства из-за фрагментации. Это новая таблица для создания, и я хочу сделать это правильно. Может быть, как вы сказали, мне все равно, что это известно, но я не знаю, о каких других направлениях вы говорите. Надеюсь, этот комментарий поможет немного больше. Благодарю. – user347594

+0

Сжатие - это способ пойти, перейти на SQL 2008. Это будет более выгодным, чем все, что вы делаете для фрагментации. Используйте разбиение на разделы для восстановления с коэффициентом заполнения 100 каждый раздел, например, ежемесячно. –