Правда о fill-factor в MS SQL Server
Страница 3. Разгадка


 

Разгадка

Далее, для ответа на наш вопрос, выберем одну из страниц индекса и используем её, как параметр в команде DBCC PAGE. В SQL Server 2000 и 7.0 эта команда использует четыре параметры. Первый - это имя базы данных или идентификатор базы данных; второй - это номер файла; а третий - это номер страницы, полученный из отчёта DBCC IND. Четвертый параметр - это желательный формат отчёта. Например, значение четвёртого параметра, равное "0" устанавливает то, что Вы хотите видеть только колонтитул. Ниже представлена команда, которую выполнял автор статьи:

DBCC PAGE (pubs, 1, 285, 0)

Примечание автора перевода: третий параметр выбирайте из реальных результатов отчёта работы команды: DBCC IND(pubs, ff1, -1), полученного в вашем варианте установки базы pubs. Значение "285" может оказаться за рамками вашего распределения страниц.

Значение в колонтитуле, которое нам должно быть интересно, называется m_slotCnt. Оно сообщает число строк на заданной странице. Когда автор выполнил сценарий в Листинге №1 и затем использовал DBCC PAGE, чтобы посмотреть на одну из страниц данных, он увидел, что число строк на странице было равно 20-ти. Когда он аналогично выполнил DBCC PAGE для одной из индексных страниц на более низком уровне, чем корень, он увидел, что число строк там было равно 19-ти. Это было результат, который автор ожидал увидеть, т.е. страницы данных были заполнены строками, содержащими 390 байтов данных, плюс приблизительно 10 байт сверху, а значит, только 20 строк возможно разместить на одной странице, и страницы данных максимально заполнены. Строки индексов имеют тот же самый размер, потому что индекс строится на основе столбца случайных чисел (390), но вместо 20 индексных строк на странице, мы имеем только 19, потому что SQL Server зарезервировал место для одной дополнительной индексной строки.

Используя эти два инструментальных средства, DBCC IND и DBCC PAGE, автор смог ответить на вопрос о различие между fill factor = 0 и fill factor = 100. Выполняя тот же самый сценарий, но, явно устанавливая factor = 100, автор обнаружил, что число строк в страницах данных и индексных страницах было тем же самым, что и у кластерного индекса с fill factor = 0. Автор полагает, что дал Вам достаточно информации о том, как использовать эти инструментальные средства, чтобы Вы могли убедиться в полученных им результатах самостоятельно и смогли выполнить более глубокое исследование. Вы можете также узнать, что случается, если Вы установите опцию PAD_Index, при fill factor = 100.

LISTING 1: Script to Create Table and Index, Then Generate Page List

USE pubs
GO
CREATE TABLE ff1(col1 char(390) NULL)
GO

SET NOCOUNT ON
GO
DECLARE @i int
SET @i = 1
WHILE @i < 1001 BEGIN
  INSERT INTO ff1 SELECT CONVERT(char(390), @i)
  SET @i = @i + 1
END
GO
CREATE UNIQUE CLUSTERED INDEX indx1 on ff1(col1)
GO
DBCC TRACEON (3604)
GO
DBCC IND(pubs, ff1, -1)
GO

 
« Предыдущая статья   Следующая статья »