как хранилище зарезервировано SQL Server? и как это отменить? - PullRequest
1 голос
/ 23 сентября 2010

Я пытаюсь понять, как SQL Server выделяет и резервирует пространство.

Запустив примеры из статьи «Как дизайн таблицы может повлиять на производительность SQL Server?» [1], я получил результаты [My 1.1], отличающиеся от результатов в статье [1.1].
Зачем?

Почему в одном случае избыточное пространство резервируется / выделяется (все случаи в [1]), а не в другом [My 1.1]?
(Обратите внимание, что в [1] в обоих случаях резервируется избыточное пространство, хотя на моем компьютере только в одном из случаев)

Как распределяется пространство, зарезервированное SQL Server?
И как я могу контролировать / управлять этим?

[1] ======
Как дизайн таблицы может повлиять на производительность SQL Server?
http://sqlserver -training.com / как стол-дизайн может ударопрочный-ваш-SQL-сервер производительность

[My 1.1]
Мои результаты отклоняются от [1] ниже

name                               rows  reserved  data     index_size  unused
---------------------------------- ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Optimised   10000 40008 KB  40000 KB 8 KB        0 KB
* * 1 022 [1.1] В результате отклонение [1] от шахты выше
name                               rows  reserved  data     index_size  unused
---------------------------------- ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Optimised   10000 40072 KB  40000 KB 8 KB        64 KB

[1,2]
Результаты из [1] совпадают с моими

name                                 rows  reserved  data     index_size  unused
----------------------------------   ----- --------- -------- ----------- ---------
Fixed_Lenght_Row_Table_Non_Optimised 10000 80072 KB  80000 KB 8 KB        64 KB

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

Это имеет смысл: у вас есть 64 КБ неиспользуемого пространства. Вы часто будете видеть небольшие различия в зарезервированном пространстве, как это

Я бы тоже так запустил со вторым параметром. Это может не иметь никакого значения

EXEC [sp_spaceused][1] 'Fixed_Lenght_Row_Table_Non-Optimised', 'true'

А потом из sp_spaceused

Когда вы бросаете или перестраиваете большой индексы, или отбросить или усечь большой таблиц, компонент Database Engine откладывает фактическое освобождение страницы и их связанные замки, пока после транзакция совершается. Отложенное падение операции не освобождают выделенные пространство сразу. Следовательно значения, возвращаемые sp_spaceused сразу после падения или усечение большого объекта может не отражает фактическое дисковое пространство имеется в наличии. Для получения дополнительной информации о отложенные ассигнования, см. Отбрасывание и Восстановление больших объектов.

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

3 голосов
/ 23 сентября 2010

Статья в ссылке в лучшем случае сомнительна.Не указывает, какую версию SQL Server использовать, и какие параметры включены / отключены.Поскольку в SQL Server 2005 имеется ряд небольших хранилищ для столбцов, превышающих ограничение в 8 КБ (см. Организация таблиц и индексов ), существуют параметры по умолчанию для строк по сравнению с параметрами вне строк (см. sp_tableoption ) и существует множество вариантов сжатия ( на уровне строк , на уровне страниц , Unicode ).

Для получения точной информации я буду придерживаться официальной документации по продукту, начиная с Планирование и архитектура (компонент Database Engine) .Для более удобного чтения купите одну из хорошо зарекомендовавших себя книг, таких как Внутренние компоненты Microsoft SQL Server 2008 или Внутри Microsoft SQL Server 2005: механизм хранения .

...