powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2019 виртуальные колонки
11 сообщений из 11, страница 1 из 1
SQL 2019 виртуальные колонки
    #40080573
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, у кого под рукой есть SQL Server 2019 отличный от Express версии, можете проверить есть в нем поддержка виртуальных колонок %%lockres%%, %%physloc%%?

сейчас столкнулся с тем что на моем тестовом SQL Server 2019 Express он нивкакую не хочет их видеть, ругается на некорректный синтаксис, вот хочу понять это проблема экспресса или проблема 2019 сиквела?


з.ы. а еще сегодня был неприятно удивлен поведением грязного чтения на строках подверженных инструкции delete когда не используется версионирование.
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080576
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

На Developer Edition работает.
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080579
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

понял, спасибо.

походу это express порезали(
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080588
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080593
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff

сегодня был неприятно удивлен поведением грязного чтения на строках подверженных инструкции delete когда не используется версионирование.


Выпил - выключи компуктер.
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080596
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


у меня тоже самое дает результат Incorrect systax near % в обоих инструкциях, О_о

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor)



aleks222,
Выпил - выключи компуктер.


ну мб мб, но я чесно сказать был расстроен тем фактом что dirtyreads при TIL read uncommitted при условии что не включено версионирование считает удаленные строки удаленными
при этом в справке черным по белому When this option is set, it is possible to read uncommitted modifications, which are called dirty reads
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080600
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

Видимо это глюк голого RTM
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080602
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
add:
если кому интересно, предистория: сегодня наблюдал долгоиграющую транзакцию которая по сути откатывала некое начисление ну и созданные под ним проводки.

решил посмотреть какие проводки уже откатились на текущий момент:
Код: sql
1.
select [pkey] from [table] with(nolock, index=2) where %%lockres%% in (select [resource_description] from sys.dm_tran_locks where [request_session_id] = 65 and [resource_associated_entity_id] = 4563435457612137 and [resource_type] = N'KEY' and [request_mode] = N'X')


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

я знал что инструкция удаляет строки по колонке parent_id = 555
то есть выполняя
Код: sql
1.
select id, %%lockres%% from [table] with(nolock, index=2) where [parent_id] = 555


я мог получить строки которые она еще не успела затронуть и даже получить %%lockres%% нужной строки
в обратку я мог получить нужную строку инструкцией
Код: sql
1.
select id from [table] with(nolock, index=2) where %%lockres%% = N'(хешключ с прошлой инструкции)'


но только до момента пока первая удаляющая транзакция не затронула данную строку, как только она получала монопольную блокировку строка уже под TIL: RUC переставала существовать


первое на что обратил внимание что инструкции
Код: sql
1.
2.
select count_big(1) from [table] with(nolock) where [parent_id] = 555
select count_big(1) from [table] with(readpast) where [parent_id] = 555


давали одинаковые результаты, хотя если бы такой запрос выполнялся для транзакции исполняющий insert, update результаты были бы разные, а вот с операцией delete чтение из таблицы производится как на TIL: RC при этом исполнение инструкций не блокируется.


и такое поведение меняется только если включено RCSI, SI :( а главное я чет прямо явного указания в справке не нашел.
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080604
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

В общем случае невозможно гарантировать, что на RUC будут прочитаны удаленные данные.
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080608
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

ну вот этот как раз меня в ступор немного и поставило, по сути строка подвержена изменению конкретной транзакции.
при "грязном чтении" правильно ли судить что она должна быть прочитана? до текущего момента я считал что да.
а так получается что "недоконца удаленную строку" можно получить только в том случае если используется RCSI/SI и это осознано должен не использоваться RUC в таком варианте.


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


в этот момент есть некий другой функционал который считает остаток по счету в режиме RUC (чур в меня не кидаться какашками это некое legacy решение которое работает как есть и сделано в "угоду" производительности. )

что же он увидит, что расходной операции нет и выдаст остаток на счете доступный для списания за минусом этой расходной операции.

в тот же самый момент ушлый клиент насилует свой клиент банк в запросе остатка по счету, и в какой то момент получает доступный баланс равный сумме откатываемой операции списания, тут же делает расходный документ и отправляет его.
представим что откат расходной операции мего-тормозной и проходит ну примерно час, за это время операционные сотрудники успевают увидеть новый документ от клиента и оформить расходную операцию, поскольку опять же тот же функционал запроса остатка показывает что "да, доступный остаток позволяет списать средства"

что же будет тогда когда первая расходная операция откатится и нужно будет ее переоформить? на счете уже будет реальный ноль и новую расходную операцию оформить не удастся.

я понимаю что пример притянут за уши, но есть реально некоторые системы работающие полностью на RUC
...
Рейтинг: 0 / 0
SQL 2019 виртуальные колонки
    #40080611
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
при "грязном чтении" правильно ли судить что она должна быть прочитана?
Зависит от того как интерпретироватьhttps://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15READ UNCOMMITTED
Specifies that statements can read rows that have been modified by other transactions but not yet committed.В теории раз вставленные строки относятся к "rows that have been modified", то удаленные должны.
На практике же, возможность "грязного" чтения удаленных строк означает невозможность в той же транзакции повторно использовать освободившееся место для кучи и невозможность добавлять в индекс новые строки с такими же значениями ключей.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2019 виртуальные колонки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]