Превышающие размер страницы данные строки, превышающие 8 КБ

Строка таблицы может содержать максимум 8 060 байт. В SQL Server 2005 это ограничение сделано менее строгим в отношении таблиц, содержащих столбцы varchar, nvarchar, varbinary, sql_variant или столбцы определяемого пользователем типа данных CLR. Длина каждого из этих столбцов по-прежнему не может быть больше 8000 байт; но их общая длина может превышать предел 8060 байт. Это применимо в отношении столбцов varchar, nvarchar, varbinary, sql_variant или столбцов определяемого пользователем типа данных CLR при их создании или изменении, а также при обновлении и вставке данных.

ms186981.note(ru-ru,SQL.90).gifПримечание.
Данное ограничение не относится к столбцам varchar(max), nvarchar(max), varbinary(max), text, image или xml. Дополнительные сведения о хранении этих столбцов см. в разделах Использование типов данных больших значений, Использование типов данных text и image и Использование XML-данных.

Замечания относительно переполнения строк

При объединении столбцов varchar, nvarchar, varbinary, sql_variant или столбцов определяемого пользователем типа данных CLR, длина которых превышает 8 060 байт на строку, необходимо учитывать следующее:

  • Превышение предела в 8 060 байт на строку может повлиять на производительность, поскольку компонент SQL Server 2005 Database Engine по-прежнему поддерживает максимум 8 КБ на страницу. Когда комбинация столбцов varchar, nvarchar, varbinary, sql_variant или столбцов определяемого пользователем типа данных CLR выходит за этот предел, компонент Database Engine перемещает столбец записи с наибольшей шириной на другую страницу в единице размещения ROW_OVERFLOW_DATA, оставляя при этом 24-разрядный указатель на исходной странице. Перемещение больших записей на другую страницу осуществляется динамически, по мере удлинения записей при операциях обновления. Операции обновления, которые укорачивают записи, могут привести к возвращению записей на исходную страницу в единице размещения IN_ROW_DATA. Кроме того, выполнение запросов и других операций выборки, например сортировки и соединения, в отношении больших записей с превышающими размер страницы данными строки, увеличивает время обработки, поскольку эти записи обрабатываются синхронно, а не асинхронно.
    Поэтому при построении таблиц с несколькими столбцами varchar, nvarchar, varbinary, sql_variant или столбцами определяемого пользователем типа данных CLR следует учитывать процент строк, в которых возможно переполнение и вероятную частоту запросов данных переполнения. Если ожидаются частые запросы по многим превышающим размер страницы данным строки, рекомендуется нормализовать таблицу таким образом, чтобы некоторые столбцы переместились в другую таблицу. После этого запросы по таблице можно будет выполнять с помощью асинхронной операции JOIN.
  • Длина отдельных столбцов varchar, nvarchar, varbinary, sql_variant и столбцов определяемого пользователем типа данных CLR по-прежнему не должна превышать 8 000 байт. И только общая их длина может выходить за предел в 8 060 байт на строку таблицы.
  • Сумма столбцов данных других типов, включая char и nchar, не должна превышать 8 060 байт на строку. Данные больших объектов также могут выходить за предел в 8 060 байт на строку.
  • Ключ индекса кластеризованного индекса не может содержать столбцы типа varchar, в которых имеются данные в единице размещения ROW_OVERFLOW_DATA. Если кластеризованный индекс создается для столбца типа varchar и существующие данные располагаются в единице размещения IN_ROW_DATA, то все последующие операции вставки или обновления для данного столбца, выталкивающие данные за пределы строки, будут завершаться ошибкой. Дополнительные сведения о единицах размещения см. в разделе Организация таблиц и индексов.
  • Пользователь может включить столбцы, которые содержат превышающие размер страницы данные строки, в качестве ключевых или неключевых столбцов некластеризованного индекса.

Для получения сведений о таблицах или индексах, которые могут содержать превышающие размер страницы данные строки, используется динамический управляющий объект sys.dm_db_index_physical_stats.

См. также

Основные понятия

Присвоение типа данных столбцу

Справка и поддержка

Получение помощи по SQL Server 2005