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

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
01.10.2019, 12:44
    #39869873
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин Федор,

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

если мне память не изменяет сессии 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
01.10.2019, 14:23
    #39869965
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
StarikNavyГулин Федор,

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

так запрос вроде на текущем выполняется - и показывается
...
Рейтинг: 0 / 0
01.10.2019, 14:41
    #39869984
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
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
01.10.2019, 14:42
    #39869986
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин Федор,

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

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

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

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

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

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

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


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

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

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

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

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

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


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

Код: 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
01.10.2019, 19:10
    #39870224
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин ФедорВладислав КолосовПохоже, что на удалённом сервере выполнение идет с текущими настройками сеанса.

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

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


просто не хочется писать везде with (Nolock)
а блокировки по чтению точно будут если READ Commited уровень будет юзаться для доступа к линк-серверу
да, будет и на линкеде read uncommitted, и без транзакции тоже.
вообще получается что да, настройка сессии на локальном распространяется и на линкед тоже.
это у меня serializable передался в виде S на все страницы...
...
Рейтинг: 0 / 0
02.10.2019, 10:22
    #39870383
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
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
02.10.2019, 10:23
    #39870384
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин Федор,

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

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

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

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

уже выше написано.
что на локальном, то и на линкеде.
в смысле уровня изоляции.
и уж конечно там не "2 одинаковых результата",
там 2 разных, для двух разных уровней.
но что там одинаково, так это TIL локальной сессии и удаленной
...
Рейтинг: 0 / 0
02.10.2019, 15:52
    #39870631
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
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
02.10.2019, 15:54
    #39870634
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин Федор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
02.10.2019, 16:15
    #39870642
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера
Гулин Федор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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SET TRANSACTION ISOLATION LEVEL на таблицы линк.сервера / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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