Рекомендации и ограничения темпоральной таблицы
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Из-за характера системного управления версиями существуют некоторые рекомендации и ограничения, которые следует учитывать при работе с темпоральными таблицами:
Темпоральная таблица должна иметь первичный ключ, чтобы сопоставить записи между текущей таблицей и таблицей журнала, а таблица журнала не может иметь первичный ключ.
SYSTEM_TIME
Столбцы периода, используемые для записиValidFrom
иValidTo
значения, должны быть определены с типом данных datetime2.Темпоральный синтаксис работает с таблицами или представлениями, которые хранятся локально в базе данных. С удаленными объектами, такими как таблицы на связанном сервере или внешних таблицах, нельзя использовать
FOR
предложение или предикаты периодов непосредственно в запросе.Если при создании таблицы журнала указывается ее имя, следует также указать имя схемы и таблицы.
По умолчанию таблица журнала сжимается с использованием метода
PAGE
.Если текущая таблица секционирована, таблица журнала создается в файловой группе по умолчанию, так как конфигурация секционирования не реплицируется автоматически из текущей таблицы в таблицу журнала.
Таблицы темпоральных и журналов не могут использовать FileTable или FILESTREAM, так как FileTable и FILESTREAM разрешают обработку данных за пределами SQL Server, поэтому системное управление версиями не может быть гарантировано.
Таблицу узлов или граничную таблицу невозможно создать как темпоральную или преобразовать в нее.
Хотя темпоральные таблицы поддерживают типы данных BLOB-объектов, такие как (n)varchar(max), varbinary(max), (n)text и image, они несут значительные затраты на хранение и влияют на производительность из-за их размера. Таким образом, при проектировании системы следует использовать эти типы данных с осторожностью.
Таблицу журнала нужно создавать в той же базе данных, в которой создавалась текущая таблица. Темпоральные запросы по связанным серверам не поддерживаются.
Таблица журнала не может иметь ограничения (ограничения первичного и внешнего ключа, а также таблицы или столбца).
Индексированные представления не поддерживаются поверх темпоральных запросов (запросов, использующих
FOR SYSTEM_TIME
предложение).Параметр Online (
WITH (ONLINE = ON
) не влияет наALTER TABLE ALTER COLUMN
системную темпоральную таблицу с версиями.ALTER
Столбец не выполняется как операция в сети, независимо от того, какое значение было указано для параметра ONLINE.INSERT
иUPDATE
операторы не могут ссылаться наSYSTEM_TIME
столбцы периода. Попытки вставки значений непосредственно в эти столбцы блокируются.TRUNCATE TABLE
не поддерживаетсяON
в то время какSYSTEM_VERSIONING
.Запрещено изменять данные в таблице журнала напрямую.
ON DELETE CASCADE
иON UPDATE CASCADE
не разрешены в текущей таблице. Другими словами, если темпоральная таблица ссылается на таблицу в связи внешнего ключа (соответствующаяparent_object_id
sys.foreign_key
в )CASCADE
параметры не допускаются. Чтобы обойти это ограничение, используйте логику приложения или после триггеров для поддержания согласованности при удалении в таблице первичного ключа (соответствующейreferenced_object_id
).sys.foreign_key
Если таблица первичного ключа является темпоральной, а ссылочная таблица — нет, это ограничение отсутствует.
INSTEAD OF
Триггеры не разрешены в текущей или таблице журнала, чтобы избежать недопустимой логики DML.AFTER
триггеры разрешены только в текущей таблице. Они блокируются в таблице журнала, чтобы не сделать логику DML недопустимой.Использование технологий репликации ограничено.
Группы доступности: полностью поддерживается
Отслеживание изменений и отслеживания изменений: поддерживается только в текущей таблице
Моментальный снимок и реплика tion транзакций: поддерживается только для одного издателя без включения темпорального издателя, а один подписчик с темпоральным включенным. Использование нескольких подписчиков не поддерживается, так как это может привести к несогласованным темпоральным данным из-за зависимости от локальных системных часов. В этом случае издатель используется для рабочей нагрузки OLTP, а подписчик служит для разгрузки отчетов (включая
AS OF
запросы). При запуске агент распространения открывает транзакцию, которая удерживается открытой до тех пор, пока агент распространения не остановится.ValidFrom
иValidTo
заполняются временем начала первой транзакции, запускаемой агентом распространителя. Возможно, предпочтительнее запускать агент распространителя по расписанию, а не поведение по умолчанию для непрерывного выполнения, еслиValidFrom
ValidTo
для приложения или организации важно время, близкое к текущему системному времени. Дополнительные сведения см . в сценариях использования темпоральных таблиц.Репликации слиянием — не поддерживается в темпоральных таблицах.
Обычные запросы влияют только на данные в текущей таблице. Чтобы запросить данные в таблице журнала, необходимо использовать темпоральный запрос. Дополнительные сведения см. в статье "Запрос данных" в системной темпоральной таблице.
Оптимальная стратегия индексирования включает в себя индекс хранилища кластеризованных столбцов и (или) индекс хранилища строк B-дерева в текущей таблице и кластеризованный индекс columnstore в таблице журнала для оптимального размера и производительности хранилища. Если вы создаете или используете собственную таблицу журнала, настоятельно рекомендуется создать этот тип индекса, состоящий из столбцов периодов, начиная с конца столбца периода, чтобы ускорить темпоральные запросы и ускорить запросы, которые являются частью проверка согласованности данных. Таблица журнала по умолчанию содержит кластеризованный индекс rowstore, созданный на основе столбцов периода (с конца или с начала). Мы советуем использовать хотя бы некластеризованный индекс rowstore.
При создании таблицы журнала из текущей таблицы в нее не реплицируются следующие объекты и свойства:
- определение периода;
- определение идентификатора;
- Индексы
- Статистика
- Проверочные ограничения
- Триггеры
- конфигурация секционирования;
- Разрешения
- предикаты безопасности на уровне строк.
Таблицу журнала невозможно настроить в качестве текущей в цепочке таблиц журнала.
Примечание.
В документации по SQL Server термин "сбалансированное дерево" обычно используется в отношении индексов. В индексах rowstore SQL Server реализует B+-дерево. Это не относится к индексам columnstore или хранилищам данных в памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
Следующие шаги
- Темпоральные таблицы
- Приступая к работе c темпоральными таблицами с системным управлением версиями
- Проверка согласованности системной темпоральной таблицы
- Секционирование с помощью темпоральных таблиц
- Безопасность темпоральных таблиц
- Управление хранением данных журнала в темпоральных таблицах с системным управлением версиями
- Темпоральные таблицы с системным управлением версиями и таблицы, оптимизированные для памяти
- Представления и функции метаданных для временной таблицы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по