Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
ksn007
Member

Откуда:
Сообщений: 69
Перешел с MSSQL 2005 на MSSQL 2014. Обнаружил после этого, что новые записи, вставляемые в таблицу идут с VERSIONING_INFO / versioning tag (+14 байт к каждой записи). По sys.databases snapshot_isolation_state_desc = OFF, is_read_committed_snapshot_on = 0. Получается, теперь MSSQL по умолчанию лепит всем записям +14 байт, и все усилия по оптимизации размера таблиц на свалку? У вас так же? Есть ли какие-то статьи на эту тему?
30 сен 16, 20:08    [19730486]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
AlwaysOn + доступная для чтения реплика.

Сообщение было отредактировано: 30 сен 16, 20:18
30 сен 16, 20:16    [19730508]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
ksn007
Member

Откуда:
Сообщений: 69
Гавриленко Сергей Алексеевич, да, AlwaysOn включен, вторая реплика доступна только для чтения. Можете разжевать, какая связь?
30 сен 16, 20:20    [19730527]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
ksn007
Гавриленко Сергей Алексеевич, да, AlwaysOn включен, вторая реплика доступна только для чтения. Можете разжевать, какая связь?
Прямая. Чтение на r/o-реплике идет только в snapshot-изоляции, а для нее нужен как раз этот TAG. Добавлять на второй ноде его нельзя (потому что она r/o), поэтому лепится на основной ноде.

Сообщение было отредактировано: 30 сен 16, 20:22
30 сен 16, 20:21    [19730532]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://msdn.microsoft.com/en-us/library/ff878253.aspx#Anchor_5
30 сен 16, 20:23    [19730543]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
ksn007
Member

Откуда:
Сообщений: 69
Гавриленко Сергей Алексеевич, да, нашел, спасибо.

Read-only workloads for disk-based tables use row versioning to remove blocking contention on the secondary databases. All queries that run against the secondary databases are automatically mapped to snapshot isolation transaction level, even when other transaction isolation levels are explicitly set. Also, all locking hints are ignored. This eliminates reader/writer contention.


Хм... получается первичная реплика знает о read-only, лепит versioning tag для новых записей... А что со старыми? Обратной же связи вторичная -> первичная реплика нет? Какой-то более сложный алгоритм на вторичной реплике, а versioning tag для новых записей - это оптимизация?
30 сен 16, 20:25    [19730549]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Основная реплика не лепит, а всего лишь место резервирует

Оттуда же
The row version data is not generated by the primary databases. Instead, the secondary databases generate the row versions. However, row versioning increases data storage in both the primary and secondary databases.


Для старых записей лепить зачем? Если у записи нет информации о версионировании, то можно спокойно читать запись, она не менялась с момента включения снапшот-изоляции.
30 сен 16, 20:29    [19730561]     Ответить | Цитировать Сообщить модератору
 Re: VERSIONING_INFO по умолчанию для строк в MSSQL 2014  [new]
ksn007
Member

Откуда:
Сообщений: 69
Гавриленко Сергей Алексеевич, о да, логично! Thanks a lot!
30 сен 16, 20:33    [19730576]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить