powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Блокировки
25 сообщений из 30, страница 1 из 2
Блокировки
    #35654166
Гость123456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASE 12.5.1
Подскажите пожалуйста, выполняю ХП:
.......

as
begin
set transaction isolation level 0

declare @DebugLevel int

execute @DebugLevel=DebugSPLogWrite @SPName, null, @@spid, 'begin'


select *
into #rep1_tmp_pay from rep_pay t1
left join contract_agents t2 on (t2.contract_id=t1.contract_id and t2.record_state < 150)
where (t1.PAYMENT_TERM >= @IN_BEGIN_DATE) and (t1.PAYMENT_TERM <= @IN_END_DATE)

.......

При выполнении видно, что таблица contract_agents и другие(далее по тексту) блокируется, хотя по идеи не должна, так как установлено isolation level 0 и для нее производится только выборка.
И ещё, какого блокируется временка, они ж вроде не должны вообще блокироватся.
В чем тут проблема? Как это можно обойти?
...
Рейтинг: 0 / 0
Блокировки
    #35654857
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы не только читаете но и пишите(into #rep1_tmp_pay from rep_pay t1). А грязная запись запрещена! Но можно сделать курсор с transaction isolation level 0 и в нем инсертить данные в вашу таблицу!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare c_test cursor for 
select * from test_block 
at isolation read uncommitted
go
declare @i int
open c_test
fetch c_test into @i
while @@sqlstatus = 0 
begin
insert into tt values (@i)
fetch c_test into @i
end

close c_test
go
deallocate cursor c_test
go
...
Рейтинг: 0 / 0
Блокировки
    #35655026
Гость123456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За совет спасибо, только это делается для повыщения производительности, а использование курсора явно не ускорит работу ХП.
А по поводу записи не понимаю почему не делать выборку на 0 уровне изоляции, а потом уже вставку на 1 ?
...
Рейтинг: 0 / 0
Блокировки
    #35655186
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость123456За совет спасибо, только это делается для повыщения производительности, а использование курсора явно не ускорит работу ХП.
А по поводу записи не понимаю почему не делать выборку на 0 уровне изоляции, а потом уже вставку на 1 ?

http://www.sql.ru/forum/actualthread.aspx?tid=504419
дочитайте до конца там все рассказано!
...
Рейтинг: 0 / 0
Блокировки
    #35655197
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему вы считаете что курсоры сильно тормозят? Я например токого не замечал.
...
Рейтинг: 0 / 0
Блокировки
    #35655305
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:
> А почему вы считаете что курсоры сильно тормозят? Я например токого не
> замечал.

Даже наоборот, в ASE они очень быстрые.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655327
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость123456 пишет:

> as
> begin
> set transaction isolation level 0
>
> declare @DebugLevel int
>
> execute @DebugLevel=DebugSPLogWrite @SPName, null, @@spid, 'begin'
>
>
> select *
> into #rep1_tmp_pay
> from rep_pay t1
> left join contract_agents t2 on (t2.contract_id=t1.contract_id and
> t2.record_state < 150)
> where (t1.PAYMENT_TERM >= @IN_BEGIN_DATE) and (t1.PAYMENT_TERM <=
> @IN_END_DATE)
>
> .......
>
> При выполнении видно, что таблица contract_agents и другие(далее по
> тексту) блокируется, хотя по идеи не должна, так как установлено
> isolation level 0 и для нее производится только выборка.

Вот это странно. По идее, не должна.
Какие другие-то таблицы ? вроде бы одна там последняя.

И как вы это видите ?

> И ещё, какого блокируется временка, они ж вроде не должны вообще
> блокироватся.

Должны, как и все остальные. С чего вы взяли, что не должны ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655339
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivВот это странно. По идее, не должна.

Странно что блокируется? Почему странно?
...
Рейтинг: 0 / 0
Блокировки
    #35655374
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> Странно что блокируется? Почему странно?

Потому что на чтении уровня 0 не должна таблица блокироваться.

Оно может конечно из-за SELECT...INTO, может быть INSERT...SELECT
работал бы по-другому (не знаю просто, практически никогда не
использовали SELECT...INTO)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655489
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему при SELECT...INTO или при INSERT...SELECT выставляется шаре блокировка на все таблицы во from(даже при isol.level 0).
...
Рейтинг: 0 / 0
Блокировки
    #35655546
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> По моему при SELECT...INTO или при INSERT...SELECT выставляется шаре
> блокировка на все таблицы во from(даже при isol.level 0).

А источник такой уверенности в чём ?

Как бы резона нет. То, что написано в топике, что это типа "пишущая"
транзакция - это не совсем верно. Формируется набор данных в режиме чтения,
записывается - в режиме записи. По идее ничто не мешает читающей части
быть на read uncommitted.

Я потом попробую проделать эксперимент.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655582
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivА источник такой уверенности в чём ?

только экспериментально! правдо таблицы все были APL. На DOL может ситуация другая будет, не проверял.

А вы считаете что должна блокироваться только "rep_pay", а та что в джойне(contract_agents) не должна?
...
Рейтинг: 0 / 0
Блокировки
    #35655623
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

Вот результаты эксперемента:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin transaction;

select *
into newAOBJECT
from AOBJECT ao
at isolation  0 ;

Msg  7375 , Level  15 , State  1 
Server 'roo', Line  4 
SELECT INTO cannot be specified with isolation level clause.



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select * into newAOBJECT from AOBJECT ao where  1 = 0 ;

begin transaction;

insert into newAOBJECT select * from AOBJECT ao at isolation  0 ;
Msg  7377 , Level  15 , State  1 
Server 'roo', Line  1 
SELECT INSERT cannot be specified with isolation level clause.

Т.е. нельзя просто. А если вы указываете на уровне сессии изоляцию,
то она для оператора вставки игнорируется.

Но почему-то мне кажется, что это ограничение именно с изоляцией
транзакций не связано.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655762
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я выше писал ссылку, там вы и moris подробно расказываете почему это сделать нельзя!

http://www.sql.ru/forum/actualthread.aspx?tid=504419

MasterZivmoris wrote:

Согласен, что штука не очень нужная, но
однако

> Т.к. согласно SQL92 требуется такая блокировка
>
> SQL-92 recognizes that the execution of
> queries is dependant on the metadata of the tables involved, and requires
> that access to such metadata must be serializable, even if the level of
> isolation for the data is set to a lower level of isolation

из этого не следует, что надо накладывать блокировку на саму
таблицу. Можно наложить строчную блокировку на строку в
sysobjects. Но sysobjects у нас - LOCK ALL PAGES, только в
последнее время перевелись системные таблицы на DATAROWS.
Так что вот и понятно, откуда ноги фичи растут. Вместо того,
чтобы делать SHARED LOCK на страницу в sysobjects они (SI)
предпочли делать SHARED TABLE на саму таблицу, поскольку
такая блокировка меньше кому мешает. (SHARED LOCK на странице
sysobjects мог бы мешать изменениям других таблиц, чьи строки
лежали бы на этой же странице).

Кстити можно предположить, что и в MSSQLServer не так все
хорошо с этим, потому что как у них там что блокируется,
никто не знает, все на откуп решениям сервера. Так что вполне
может быть что это будет когда работать, а когда и нет.
...
Рейтинг: 0 / 0
Блокировки
    #35655772
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно еще, будет ли выставляться шаре-блокировка на DOL таблице если по ней бежит курсор с уровнем изоляции 1?
...
Рейтинг: 0 / 0
Блокировки
    #35655986
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> Я выше писал ссылку, там вы и moris подробно расказываете почему это
> сделать нельзя!

> Согласен, что штука не очень нужная, но
> однако

Вот ведь, и правда ! Забыл !

Там я поднаврал сначала немного, правда, но
потом ничего так получился топик.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35655987
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:
> Интересно еще, будет ли выставляться шаре-блокировка на DOL таблице если
> по ней бежит курсор с уровнем изоляции 1?

На всей таблице ? На строках - точно будут.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35656038
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
cherrex_Den пишет:
> Интересно еще, будет ли выставляться шаре-блокировка на DOL таблице если
> по ней бежит курсор с уровнем изоляции 1?

На всей таблице ? На строках - точно будут.


выставляется sh_intent, это построчная блокировка?

а для чего он вообще выставляет? таблица же DOL, select же не выставляет!
...
Рейтинг: 0 / 0
Блокировки
    #35656098
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блокировка выставляется(sh_intent), но инсерты и апдэйты проходят!
Так sh_intent(блокировка занятости) не блокирует данные?
...
Рейтинг: 0 / 0
Блокировки
    #35656172
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> выставляется sh_intent, это построчная блокировка?
>

Так и такая, и такая есть.

> а для чего он вообще выставляет? таблица же DOL, select же не выставляет!

вы это с чего взяли ? я если ещё не совсем всё позабыл, выставляет.
Как он может не выставлять sh_row, если это read committed ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35656173
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:
> Блокировка выставляется(sh_intent), но инсерты и апдэйты проходят!
> Так sh_intent(блокировка занятости) не блокирует данные?

На каком уровне ?

sh_intent -- это НЕ блокировка занятости. Это вспомогательная
блокировка, которая говорит о том, что данная транзакция СОБИРАЕТСЯ,
то есть будет накладывать shared блокировку на что -то.
Она сама по себе нужна только чтобы снизить deadlock-ки.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35656199
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
cherrex_Den пишет:

> выставляется sh_intent, это построчная блокировка?
>

Так и такая, и такая есть.

> а для чего он вообще выставляет? таблица же DOL, select же не выставляет!

вы это с чего взяли ? я если ещё не совсем всё позабыл, выставляет.
Как он может не выставлять sh_row, если это read committed ?


На DOL таблицах выставлять не должен, если не взведен read committed with lock!

perf1ru.pdfЗапросы с оператором select к таблицам с блокировкой только данных
сначала устанавливают на таблицу разделяемую блокировку занятости.
Блокировку страниц и строк данных можно настроить с помощью пара-
метра read committed with lock следующим образом:
• Если параметр read committed with lock равен 0 (значение по умолча-
нию), то запросы с оператором select считывают значения столбцов,
устанавливая мгновенные блокировки страниц и строк. Нужные зна-
чения столбца или указатели на строку считываются в память, и бло-
кировка снимается. Во время просмотра строк из внутренних таблиц
соединений блокировки на внешние таблицы не устанавливаются.
Это уменьшает число взаимоблокировок и повышает эффективность
одновременных операций с базой данных.
Даже если запросу с оператором select нужно только прочитать стро-
ку, заблокированную блокировкой несовместимого типа, он все рав-
но приостанавливается на этой строке до снятия этой блокировки.
Если задать параметру read committed with lock значение 0, это не по-
влияет на уровень изоляции; возвращаются только зафиксированные
строки.
• Если параметр read committed with lock равен 1, то запросы с операто-
ром select устанавливают разделяемые блокировки страниц в табли-
цах с блокировкой страниц данных и разделяемые блокировки строк
в таблицах с блокировкой строк данных. Сначала устанавливается
блокировка первой страницы или строки, затем – блокировка второй
страницы или строки, а блокировка первой страницы или строки
снимается.

под мгновенной блокировкой - я думаю понимается защелки(latches)

MasterZivcherrex_Den пишет:
> Блокировка выставляется(sh_intent), но инсерты и апдэйты проходят!
> Так sh_intent(блокировка занятости) не блокирует данные?

На каком уровне ?

sh_intent -- это НЕ блокировка занятости. Это вспомогательная
блокировка, которая говорит о том, что данная транзакция СОБИРАЕТСЯ,
то есть будет накладывать shared блокировку на что -то.
Она сама по себе нужна только чтобы снизить deadlock-ки.

Уровень 1! А в русском переводе intent называют блокировкой занятости.

P.S. perf1ru.pdf - это переведенная ptg
...
Рейтинг: 0 / 0
Блокировки
    #35656221
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> • Если параметр read committed with lock равен 1, то запросы с операто-

Кажется у нас он стоит 1. Поэтому я и думаю так, что по-другому
не бывает. Вообще, DOL и без read committed with lock =0 хорош.

> Уровень 1! А в русском переводе intent называют блокировкой занятости.

Да нет, на уровне чего : таблицы, строки/страницы ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировки
    #35656227
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да на счет intent погорячился!!! она выставляется в любом случае. а шаре-строк или шаре-страниц не выставляется при select(на уровне 1 и на DOL)

Чтоб вас не запутать:
монопольная-эксклюзивная
разделяемая-шаре
...
Рейтинг: 0 / 0
Блокировки
    #35656228
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivДа нет, на уровне чего : таблицы, строки/страницы ?

строки/страницы конечно!
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Блокировки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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