Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки / 13 сообщений из 13, страница 1 из 1
06.12.2006, 11:07
    #34179671
yourij_mw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Долго я маялся со своими процедурами и триггерами непонимая в чём дело пока не обнаружил, что работает всё далеко не так как я себе представлял. чтобы долго не обясянять просто приведу пример как есть, а как хотелось бы.

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE "dbo"."LockTest" (
	"val1" numeric( 9 , 0 ) NOT NULL,
	"val2" numeric( 9 , 0 ) NULL,
	"PK" numeric( 9 , 0 ) NOT NULL,
	PRIMARY KEY ( "PK" )
);
 
1-вый процесс
Код: plaintext
1.
2.
3.
begin tran
insert into LockTest(Val1,Val2,PK)
values( 1 , 1 , 1 )

2-вый процесс (запускает транзакцию после того как проделано вставку первой транзакции (процесса))

Код: plaintext
1.
2.
begin tran
insert into LockTest(Val1,Val2,PK)
values( 5 , 9 , 2 )

1-вый процесс
delete LockTest
where pk = 1 --висит (ждёт коммита второй транзакции)
--илиже
rollback --тоже висит (ждёт коммита второй транзакции)

можно также удачно сделать коммит первой транзакции
но удалить запись посде этого также нельзя будет пока не будет коммита воторй

Читал я в докумментации я про эти блокировки там это дело как-то с индексами связано, вроде как хорошо если они есть... но и уменя он есть на PK. Отчасти моё непонимание связано с неидеальным пониманием английского языка на котором у меня документация. Толи написано размыто и не доконца... вообщем немогу охватить я это дело своим пониманием.
Конечно-же я не прошу чтобы меня тут кто-то стал учить, почитаю ещё несколько раз может больше пойму, но если можно то коротко напишите ктото почему в данном случае всё происходит так,
и второе - что можно попробовать сделать чтобы такого небыло.
Я так понимаю заставить аса для некоторий таблицы использовать построчную блокировку нельзя а только можно создать предусловия для чтобы получалась такая схема блокировки, поскольку АСА старается, как где-то написано, вибрать самый слабый тип блокировки (тоесть по возможности на строку а не таблицу)
...
Рейтинг: 0 / 0
06.12.2006, 11:12
    #34179692
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
yourij_mw wrote:

> Я так понимаю заставить аса для некоторий таблицы использовать
> построчную блокировку нельзя

В ASA нет других видов блокировки, кроме позаписной (LOCK TABLE -
отдельная история).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.12.2006, 11:27
    #34179749
yourij_mw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Dim2000
В ASA нет других видов блокировки, кроме позаписной (LOCK TABLE -
отдельная история).

но зато он может судя по всему легко может наложить по одну блокировку на каждую строчку таблицы :-)...
Ну всётаки это у меня праильно всё происходит в примере. Я как вчера начал читать про всякие там антиинсертные, фантомные и ещё какието там блокировки у меня голова разболелась, планирую почитать ещё сегодня только не перед едой, ато опять апетит испортится.
...
Рейтинг: 0 / 0
06.12.2006, 12:04
    #34179923
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
А план запроса что говорит при DELETE? используется доступ по индексу или же table-scan? Какие блокировки висят при выполнении DELETE?
В качестве предположения - тут еще может быть засада с тем, что поля в табличке numeric(9,0) а доступ идет по int константе... Попробуй объявить переменную numeric(9,0), и с 1 в ней выполнить DELETE, возможно тогда он начнет ходить по индексу...
...
Рейтинг: 0 / 0
06.12.2006, 12:16
    #34179988
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
лень wrote:

> В качестве предположения - тут еще может быть засада с тем, что поля в
> табличке numeric(9,0) а доступ идет по int константе...

Не вижу разницы.

А вообще, если бы я понимал _всё_ в блокировках, возникающих при
выполнении различных SQL-операторов, я бы это считал своим самым большим
know-how и продавал только за большие бабки .
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.12.2006, 12:33
    #34180067
yourij_mw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
засада с не тем типом и просмотры планов мне известны по АСЕ. Даже топик есть гдето там старый мною начатый , попробую я и тут посмотреть.. просто переживаю, что разница есть в этих субд потому и забыл.. слабое подозрение на то что может в таблице слишком мало записей, может если бы их было побошльше и строки находились бы в разных частях таблицы то такого.
Кроме того Вы можете тожесамое проделать у себя за 1 минуту. достаточно двух окон dbisql и скрипта на создание и вставку по таблицам которые описаны выше.
Судя по Вашим вопросами я догадываюсь что Вы согласны с тем что ситуация ненормальная если пока неговроить про причины...
...
Рейтинг: 0 / 0
06.12.2006, 15:02
    #34180695
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Dim2000
лень wrote:

> В качестве предположения - тут еще может быть засада с тем, что поля в
> табличке numeric(9,0) а доступ идет по int константе...
Не вижу разницы.


разница в плане выполнения... если оптимизатор считает, что типы в SARG не совпадают, то об index seek можно забыть, будет типичный table-scan... В ASE с этим уже неоднократно встречался...
...
Рейтинг: 0 / 0
06.12.2006, 15:08
    #34180726
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
yourij_mwзасада с не тем типом и просмотры планов мне известны по АСЕ. Даже топик есть гдето там старый мною начатый , попробую я и тут посмотреть.. просто переживаю, что разница есть в этих субд потому и забыл.. слабое подозрение на то что может в таблице слишком мало записей, может если бы их было побошльше и строки находились бы в разных частях таблицы то такого.
Кроме того Вы можете тожесамое проделать у себя за 1 минуту. достаточно двух окон dbisql и скрипта на создание и вставку по таблицам которые описаны выше.
Судя по Вашим вопросами я догадываюсь что Вы согласны с тем что ситуация ненормальная если пока неговроить про причины...

Ситуация ненормальная... Ибо только что прогнал сей тест на АСЕ (нету у меня АСА, поэтому предыдущее писал из общих соображений), все замечательно работает и удаляется. Посему остается только одно - смотреть план запроса и блокировки... Без этого все идеи только идеи...
...
Рейтинг: 0 / 0
06.12.2006, 15:11
    #34180743
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
лень wrote:

> разница в плане выполнения... если оптимизатор считает, что типы в SARG
> не совпадают, то об index seek можно забыть, будет типичный
> table-scan... В ASE с этим уже неоднократно встречался...

Мы вообще-то ASA обсуждаем ;). Маленький примерчик:

select *
from dba.participant
where part_id = '1000' ;

Part_id - первичный ключ типа Numeric(8). Тем не менее запрос
выполняется, естессно, именно по PK:

Index Scan

Scan participant using index participant


А оптимизатор в ASE порой туп до дебильности, и приводить его в пример
не нужно.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.12.2006, 15:51
    #34180936
лень
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Dim2000

Мы вообще-то ASA обсуждаем ;). Маленький примерчик:

select *
from dba.participant
where part_id = '1000' ;

Part_id - первичный ключ типа Numeric(8). Тем не менее запрос
выполняется, естессно, именно по PK:

Index Scan

Scan participant using index participant


Разница в АСА между Index Scan и Index Seek существует? :)
А что за план будет если не строка, а число?
Мне просто интересно, действительно ли нет в этом разницы...
...
Рейтинг: 0 / 0
06.12.2006, 16:35
    #34181135
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
лень wrote:

> Разница в АСА между Index Scan и Index Seek существует? :)

Похоже, нет.

> А что за план будет если не строка, а число?

Точно такой же (специально сейчас проверил): выборка по первичному ключу.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.12.2006, 17:48
    #34181318
yourij_mw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Я тоже проделывал несколько часов тому на АСЕ и всё работает нормалёк.
А на АСА таки "выяснил"(покрайней мере так думаю, експриментировал..)
брал уже нормальную таблицу. Такое происходило только в тех случаях когда удалялись
строчки наохдящиеся в непосредственной близости (конечно же и это гарантировать не могу т.к. и спешил к тому же успокоить публику да у немного другим был занят. ).
Кроме того "заблокированную" (которую нельзя удалить) строчку можно редактировать, просто удалять нельзя. Если быть более менее уверенным в том что я сам только что написал можно было бы думать как это обойти.. но нет веры..
Ябы не поднимал конечно-же этот вопрос если бы убедилься в этом раньше.
Теперь просто оказывается, что нельзя быть уверенным в том что запись взятая с помощю readpast действительно незаблокированная,
со всеми последствиями относящимися к некоторому числу процедур.
...
Рейтинг: 0 / 0
07.12.2006, 14:42
    #34183468
yourij_mw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки
Непривычным, я бы сказал, есть поведение АСА когда ложатся разделяемые блокировки на главную запись, в то время когда не то-что вставляется/редактируется, а даже только удаляется подчинённая ей запись из другой таблицы. Приходится надеятся что чем-то оправданы такие предосторожности или "побочные ефекты" чего-то другого, но очень хрошего :-)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / АСА 9,02,3361 Неполучается создать предусловия для построчной блокировки / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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