powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
25 сообщений из 38, страница 1 из 2
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869776
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.

SQL 2012
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера влияет ли ?


Код: sql
1.
2.
3.
4.
5.
6.
7.
BEGIN
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT
	  tg.id_Goods
	FROM 
	  [link-server].[db1].[dbo].Goods tg



будет ли
т.е надо ли писать там (Nolock)

ps про вред грязного чтения я знаю - но имеем что имеем.
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869873
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

запустите на ЛинкедСервере профайлер и посмотрите какие команды он получит
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869936
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

если мне память не изменяет сессии linked серверов по умолчанию создают подключения с уровнем изоляции read uncommitted

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select s.[name], 
case ss.[transaction_isolation_level]
when 0 then 'NL'
when 1 then 'READ COMMITTED'
when 2 then 'READ UNCOMMITTED'
when 3 then 'REPEATABLE READ'
when 4 then 'SERIZLIZABLE'
when 5 then 'SNAPSHOT'
end
 from sys.servers s
join sys.dm_exec_sessions ss on ss.[host_name] = s.[host_name]
where s.is_linked = 1
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869965
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavyГулин Федор,

запустите на ЛинкедСервере профайлер и посмотрите какие команды он получит

так запрос вроде на текущем выполняется - и показывается
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869984
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffГулин Федор,

если мне память не изменяет сессии linked серверов по умолчанию создают подключения с уровнем изоляции read uncommitted

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select s.[name], 
case ss.[transaction_isolation_level]
when 0 then 'NL'
when 1 then 'READ COMMITTED'
when 2 then 'READ UNCOMMITTED'
when 3 then 'REPEATABLE READ'
when 4 then 'SERIZLIZABLE'
when 5 then 'SNAPSHOT'
end
 from sys.servers s
join sys.dm_exec_sessions ss on ss.[host_name] = s.[host_name]
where s.is_linked = 1



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

потом, делаю вот такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
begin tran
	SET TRANSACTION ISOLATION LEVEL serializable;

declare @id bigint;

select  @id = id
	FROM [COLL_a].[FleetXS_20190808].dbo.transazioni


мне выдается
OLE DB provider "SQLNCLI11" for linked server "COLL_a" returned message "The partner transaction manager has disabled its support for remote/network transactions.".
Msg 7391, Level 16, State 2, Line 66
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "COLL_a" was unable to begin a distributed transaction.


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

а на линкеде никакой не read uncommitted.
смотрю, что он там блокирует, пока выполняется запрос, так это S на страницы читаемой таблицы
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869986
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

да согласен это входящие сессии для текущего сервера, но вам ничего не мешает завернуть запрос на удаленный сервер

Код: sql
1.
exec ('select transaction_isolation_level from sys.dm_Exec_sessions where session_id = @@SPID') at [linked_server];
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869996
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин ФедорStarikNavyГулин Федор,

запустите на ЛинкедСервере профайлер и посмотрите какие команды он получит

так запрос вроде на текущем выполняется - и показывается
то, что показывается на локальном,
не соответствует тому, что на линкеде.
у меня выставился serializable сессии,
все таблицы локального будут читаться в этой сессии на serializable.
а что на линкеде это вы не видете с локального.
но возможно, если запущен MSDTC и откроет вам distributaed transaction,
то будут читаться и удаленные с тем же serializable.
если вы в транзакции сделаете.
пока что в коде не вижу begin tran,
а значит, distributaed transaction не будет открыта.
-------------
т.е. тот код, что сейчас нам представлен,
локальной сессии выставил READ UNCOMMITTED,
и больше ничего.
на линкеде будет читаться с READ COMMITTED.

а с хинтом да, будет вам READ UNCOMMITTED.
у меня на линкеде одно лишь Sch-S на объект,
если читаю с nolock
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39869999
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffГулин Федор,

да согласен это входящие сессии для текущего сервера, но вам ничего не мешает завернуть запрос на удаленный сервер

Код: sql
1.
exec ('select transaction_isolation_level from sys.dm_Exec_sessions where session_id = @@SPID') at [linked_server];


не, не катит, @@SPID это не от той сессии, где его выборка
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870018
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о боже.
если локальной сессии не менять уровень изоляции,
то действительно на линкеде читается с read uncommitted.
но зато если у локальной сессии repeatable read или serializable,
то на линкеде накладываются S-блокировки(страничные в моем случае)

это где-то документировано?
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870045
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123о боже.
если локальной сессии не менять уровень изоляции,
то действительно на линкеде читается с read uncommitted.
но зато если у локальной сессии repeatable read или serializable,
то на линкеде накладываются S-блокировки(страничные в моем случае)

это где-то документировано?
честно никогда не проверял на стороне линкед сервера, но точно будет ругатся если снапшот пытаться включить, а он не разрешён
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870098
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот картинкой основной сервер с serializable
и линкед, на котором больше никого и нет.
и там мое чтение идет с read committed
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870112
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

это с подключенным DTC?
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870122
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, без.
у меня тут типа нет собственной песочницы,
это прод(prod) и "предпрод"(coll), оба с выключенным DTC.
селектить в разумных пределах мне не жалко, но запускать DTC не буду.
транзакцию не открываю, ибо нет DTC.
просто меняю уровень изоляции локальной сессии и селектю с линкеда
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870141
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что на удалённом сервере выполнение идет с текущими настройками сеанса.
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870174
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовПохоже, что на удалённом сервере выполнение идет с текущими настройками сеанса.

Меня частный случай интересует
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

при такой - будут передаваться настройки
на линк-сервер ?


просто не хочется писать везде with (Nolock)
а блокировки по чтению точно будут если READ Commited уровень будет юзаться для доступа к линк-серверу
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870177
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
exec sp_addlinkedserver @server = N'Self', @srvproduct = '', @provider = N'SQLNCLI', @datasrc = N'.';
exec sp_addlinkedsrvlogin @rmtsrvname = N'Self', @useself = N'True', @locallogin = null, @rmtuser = null, @rmtpassword = null;
exec sp_serveroption @server = N'Self', @optname = N'RPC out', @optvalue = N'true';
exec sp_serveroption @server = N'Self', @optname = N'remote proc transaction promotion', @optvalue = N'false';
go

declare @q nvarchar(max) = N'select at.dtc_isolation_level, st.* from sys.dm_tran_session_transactions st join sys.dm_tran_active_transactions at on at.transaction_id = st.transaction_id;';

set transaction isolation level read uncommitted;
begin distributed tran;
exec sys.sp_executesql @q;
exec Self.tempdb.sys.sp_executesql @q;
commit;

set transaction isolation level read committed;
begin distributed tran;
exec sys.sp_executesql @q;
exec Self.tempdb.sys.sp_executesql @q;
commit;
go

exec sp_dropserver 'Self', 'droplogins';
go
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870224
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин ФедорВладислав КолосовПохоже, что на удалённом сервере выполнение идет с текущими настройками сеанса.

Меня частный случай интересует
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

при такой - будут передаваться настройки
на линк-сервер ?


просто не хочется писать везде with (Nolock)
а блокировки по чтению точно будут если READ Commited уровень будет юзаться для доступа к линк-серверу
да, будет и на линкеде read uncommitted, и без транзакции тоже.
вообще получается что да, настройка сессии на локальном распространяется и на линкед тоже.
это у меня serializable передался в виде S на все страницы...
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870383
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,Yasha123
СПС за ответы
@invm
запустил пример
но выводы сделать не могу
кроме того что резалтсеты одинаковые при разных уровнях
кроме dtc_isolation_level

set transaction isolation level read uncommitted;
set transaction isolation level read committed;

да и вот этой инструкцией я не пользовался никогда.
Код: sql
1.
begin distributed tran


читал конечно в теории что это такое

пару слов если не сложно
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870384
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

авторпару слов если не сложно

третий участник контролирующий транзакцию. 4 слова :)
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870477
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

распределенные транзакции гарантирую целостность фиксации результата транзакции у всех участников транзакции. Реализуются механизмом распределённых транзакций операционной системы, а не SQL сервером.
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870604
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,
я наверно не точно сформулировал
меня интересует интерпретация (объяснение на пальцах)
результов запроса от invm
от него или от либо любого другого.
ибо я вижу результаты запроса -
2 одинаковых резалтсета
но не сильно понимаю какой вывод я должен был сделать.

ps да у меня в запросе одни Select с линк-сервера и таблиц ( I/U/D нет )
т.е все просто.
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870615
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федорменя интересует интерпретация (объяснение на пальцах)
результов запроса от invm
от него или от либо любого другого.

уже выше написано.
что на локальном, то и на линкеде.
в смысле уровня изоляции.
и уж конечно там не "2 одинаковых результата",
там 2 разных, для двух разных уровней.
но что там одинаково, так это TIL локальной сессии и удаленной
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870631
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,
set transaction isolation level read uncommitted;

dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
256 82 469587787 0x0800000052000000 1 1 1 0 0 1


dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
256 82 469587787 0x0800000052000000 1 1 1 0 0 1
256 84 469587787 0x0100000054000000 1 1 0 1 0 1


для 2-го

set transaction isolation level read committed;

dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
4096 82 469587864 0x0900000052000000 1 1 1 0 0 1

dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
4096 82 469587864 0x0900000052000000 1 1 1 0 0 1
4096 84 469587864 0x0200000054000000 1 1 0 1 0 1



объясните что отсюда следует -
мне результаты увы ничего не говорят - вообще - я НЕ понимаю как их интерпертировать
dtc_isolation_level - разный это я понимаю Ид isolation_level
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870634
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор2 одинаковых резалтсетаОдинаковыми они быть не могут.

Более корректный пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
exec sp_addlinkedserver @server = N'Self', @srvproduct = '', @provider = N'SQLNCLI', @datasrc = @@servername;
exec sp_addlinkedsrvlogin @rmtsrvname = N'Self', @useself = N'True', @locallogin = null, @rmtuser = null, @rmtpassword = null;
exec sp_serveroption @server = N'Self', @optname = N'RPC out', @optvalue = N'true';
exec sp_serveroption @server = N'Self', @optname = N'remote proc transaction promotion', @optvalue = N'false';
go

declare @q nvarchar(max) = N'select @@spid as session_id,
 case transaction_isolation_level 
  when 0 then ''Unspecified'' 
  when 1 then ''ReadUncommitted'' 
  when 2 then ''ReadCommitted'' 
  when 3 then ''RepeatableRead'' 
  when 4 then ''Serializable'' 
  when 5 then ''Snapshot'' end as transaction_isolation_level 
from
 sys.dm_exec_sessions 
where
 session_id = @@SPID';

-- in transaction
set transaction isolation level read uncommitted;
begin distributed tran;

exec sys.sp_executesql @q;
exec Self.tempdb.sys.sp_executesql @q;

set transaction isolation level read committed;

exec sys.sp_executesql @q;
exec Self.tempdb.sys.sp_executesql @q;

commit;

-- without transaction
set transaction isolation level read uncommitted;
exec sys.sp_executesql @q;
exec Self.tempdb.sys.sp_executesql @q;
set transaction isolation level read committed;
go

exec sp_dropserver 'Self', 'droplogins';
go


Думаю, проблем с интерпретацией не возникнет.
...
Рейтинг: 0 / 0
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
    #39870642
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин ФедорYasha123,
set transaction isolation level read uncommitted;

dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
256 82 469587787 0x0800000052000000 1 1 1 0 0 1


dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
256 82 469587787 0x0800000052000000 1 1 1 0 0 1
256 84 469587787 0x0100000054000000 1 1 0 1 0 1


для 2-го

set transaction isolation level read committed;



dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
4096 82 469587864 0x0900000052000000 1 1 1 0 0 1

dtc_isolation_level session_id transaction_id transaction_descriptor enlist_count is_user_transaction is_local is_enlisted is_bound open_transaction_count
-1 70 469568556 0x0100000046000000 1 1 1 0 0 1
4096 82 469587864 0x0900000052000000 1 1 1 0 0 1
4096 84 469587864 0x0200000054000000 1 1 0 1 0 1



объясните что отсюда следует -
мне результаты увы ничего не говорят - вообще - я НЕ понимаю как их интерпертировать
dtc_isolation_level - разный это я понимаю Ид isolation_level
тут 2 набора данных.
сперва invm вам показывает биты(dtc_isolation_level) для read uncommitted на локальном.
потом на локальном и удаленном. они совпали

теперь то же самое для read committed.
снова совпали на локальном и удаленном.

ну просто сказанное мною словами вам предложено лично увидеть,
ничего нового тут нет
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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