powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аля partiotioned view или partiotion by table
45 сообщений из 45, показаны все 2 страниц
Аля partiotioned view или partiotion by table
    #32879247
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли аналог в ASA и ASE и если есть, начиная с каких версий?
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32879415
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA:
"partiotioned view" организуется так же, как и в MSSQL - через UNION ALL. "partiotion by table" отсутствует (было бы странно это увидеть в SMB СУБД).

ASE:
Все есть.

P.S. Если посмотреть в FAQ , то там можно обнаружить следующий документ , рассказывающий о возможностях всех СУБД Sybase.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32879429
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в ASA 5.5 partiotioned view поддерживается?
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32879440
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripВообще оптимизатор в ASE крайне убогий. Select from select появился только в 12.5.1 и тот все наровит свалиться в stacktrace.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32879493
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторРасскажит плс темному, что же там в ASE все есть?
Я дал ссылку на документ, подготовленный для меня Sybase.ru, вот там все и читайте. Лично я вообще без понятия, чего там есть, чего нет в ASE - у меня для полного счастья в своих проектах в ASA 9 все есть (даже про запас) :)
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32879964
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS

ASCRUSASA:
было бы странно это увидеть в SMB СУБД

Так все-таки ASA не класса Enterprise, а "все-лишь" SMB? :)

Секционирование таблиц было бы очень удобно как в ASA так и в ASE. И в SMB бывают очень большие таблицы. Будем ждать.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880134
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael_2 ASCRUS

ASCRUSASA:
было бы странно это увидеть в SMB СУБД

Так все-таки ASA не класса Enterprise, а "все-лишь" SMB? :)

Секционирование таблиц было бы очень удобно как в ASA так и в ASE. И в SMB бывают очень большие таблицы. Будем ждать.
Насколько я понимаю, секционирование таблиц полезно в 3 случаях:
1. Сверх-большие обьемы (когда реально таблица не помещается на жесткий диск)
2. Интенсивные операции по селективному индексу, который для больших таблиц становится не слишком удобным способом поиска удовлетворяющих условиям записей
3. OLAP, где требуется проводить аналитику по большому кол-ву записей и параллейное чтение индексов и таблицы не помешало бы.

Все пункты сейчас реализуются ручками - методом разбивания большой таблицы по разным tablespace и соединением полученных таблиц в представлении через UNION ALL. Что то типа того:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE VIEW v_Table_Year 
AS
  SELECT *
  FROM Table_Year_2003
  UNION ALL
  SELECT *
  FROM Table_Year_2004
  UNION ALL
  SELECT *
  FROM Table_Year_2005;
Недостатков у такого способа секционирования преогромное множество - начиная от поддержки одинаковой структуры для всех таблиц и заканчивая оптимизацией запросов, где если просто наложить фильтр на поля представления, оптимизатор догадается этот фильтр просто применить для каждого запроса представления, а любое соединение с представлением, аггрегация или еще чего будет рассматриваться как внешняя операция и представление сначала полностью будет выполнено и далее уже над ним сверху будут накладываться нужные операции, что с точки зрения эффективности выполнения совсем недопустимо. Можно конечно еще поиграться в "полное представление" (где для каждой таблицы представления соединяются и выводятся поля других наиболее часто используемых в запросах таблиц):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE VIEW v_Table_Year 
AS
  SELECT t.*, s.Name
  FROM Table_Year_2003 t
    INNER JOIN Sprav s ON s.Sprav_id = t.Sprav_id
  UNION ALL
  SELECT t.*, s.Name
  FROM Table_Year_2004 t
    INNER JOIN Sprav s ON s.Sprav_id = t.Sprav_id
  UNION ALL
  SELECT t.*, s.Name
  FROM Table_Year_2005 t
    INNER JOIN Sprav s ON s.Sprav_id = t.Sprav_id;
Здесь в данном случае при установке фильтрации по полю s.Name для представления оптимизатор отфильтрует записи до UNION ALL, без применения внешнего фильтра, а если обращений к этому полю не будет, вообще исключит из плана запроса таблицу Sprav.

Так же можно поиграться динамическим SQL, который в принципе неплохо отрабатывается в ASA, что то типа того:
Код: plaintext
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.
CREATE FUNCTION Script_Table_Year (
  IN @StartYear smallint,
  IN @FinishYear smallint,
  IN @Prototype long varchar
)
RETURNS long varchar
BEGIN
  DECLARE @Script long varchar;
  SET @Script = ''
  WHILE @StartYear <= @FinishYear LOOP
    SET @Script = @Script ||
      Replace(@Prototype, '{Table}', 'Table_Year_' || @StartYear) ||
      IF @StartYear < @FinishYear THEN '\nUNION ALL\n' ENDIF;

    SET @StartYear = @StartYear +  1 ;
  END LOOP;

  RETURN @Script;
END;

EXECUTE IMMEDIATE 
  WITH RESULT SET ON 
  Script_Table_Year(  2003 ,  2005 , '
    SELECT t.*, s.Name
    FROM {Table} t
      INNER JOIN Sprav s ON s.Sprav_id = t.Sprav_id
  ';
На выходе получим данные, аналогичные предыдущему представлению. В принципе при такой схеме играться можно с чем угодно и как угодно. Однако в любом случае трудозатраты по такому "секционированию" будут несравненно выше, чем при встроенной поддержке этой фичи самой СУБД. Но это уже зависит от того, будут ли в ASA базы с сотнями миллионов записей или же все дело ограничиться десятками миллионов, которые ASA и сейчас неплохо проглатывает для SMB круга задач. Лично я думаю, что с учетом того, что сейчас ASA позиционируется как консолидированный сервер для удаленных и мобильных СУБД (UltraLite), рано или поздно они будут вынуждены вводить секционирование таблиц - так как уже сейчас многомиллионными таблицами уже никого на их форумах не удивишь, а информация по консолидированным БД будет продолжать накапливаться и расти в сторону критической массы.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880275
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZIV как модератор
Я извиняюсь , видимо я вместо цитирования сообщения от Crip тюкнул по исправлению сообщения от Crip. В результате нижеприведенное сообщение появилось как бы посланным им, Crip-ом. Поэтому я удалю его сообщение и оставлю только свое.
Кроме отквоченного, в оригинальном сообщении насколько я помню, не приводилось доп. информации по обсуждаемому вопросу, кроме уже приведенной в треде - что в ASE ни partiotioned view, ни partiotion by table нету, но еще говорилось, что в ASE 15 это обещают сделать.
Кроме этого, было написано следующее :


CripВообще оптимизатор в ASE крайне убогий. Select from select появился только в 12.5.1 и тот все наровит свалиться в stacktrace.


Если ты даже не понимаешь, что такое процессор запросов и что такое оптимизатор, и в чем между ними разница, то критиковать его (оптимизатор) как-то странно с твоей стороны. Короче, там дело разве только что в разборе синтаксиса запроса. Оптимизатор там ни при чем.

О самой фиче (derived tables) могу сказать, что это - очень вредная штука, как для сервера, так и для мозгов программиста, который ее использует - я сталкивался при найме программистов с нормальными вроде бы ребятами, которые только из-за наличия этой фичи в MSSQL не могли написать ни одного ANSI-SQL запроса БЕЗ этой фичи. А ведь фича нестандартная. Ну в ASE в последнее время много делают для увеличения совместимости с MSSQL - вот и derived tables добавили.

На счет 12.5.1 - не последняя это версия, есть более поздние. Думаю там уже поправили.

Насчет partitioned tables - они есть в ASE (были испокон века), но это - совсем не то, что partitioned tables в ORACLE - совсем другая штука - просто таблица с несколькими цепочками данных. Правда на ней насколько я помню можно реализовать аналог ORACL-овой "распределенной" таблицы - сделать N partitions на APL-таблицу с кластерным индексом по нужным полям и разложить эти партиции по N сегментам (устройствам). Насколько я помню, именно это делает ОРАКЛОВАЯ фича. Сам я вообще не очень понимаю, зачем это все нужно - бить таблицу на куски. Если есть индекс и запрос хороший - само все разобьется.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880350
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли ты даже не понимаешь, что такое процессор запросов и что такое оптимизатор, и в чем между ними разница,
Попрошу на личности не переходить. Эти вещи между прочим очень даже взаимосвязаны. А то что Sybase ASE остался на уровне MS SQL6.5 это не секрет по-моему ни для кого.э

Зачем нужно секционирование?
1 таблица бьется на несколько партиций, каждая из которых формируется из определенного условия ( констрейнта) Это позволяет оптимизатору понимать, что при явном указании в селекте этого констрейнта, ко всем остальным партициям обращаться не нужно!
Индекс тут вам не поможет, потому как его селективность будет очень мала.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880374
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не только в селективности дело, еще на партиции можно строить свои индексы, отдельно бекапировать и т.д.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880607
michael_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с crip, разбиение таблиц на сегменты (как это сделано в ORACLE) необходимо. Мы эксперементировали с этим. Работали и с большими таблицами и с созданными руками сегментами. Так вот, при всех неудобствах ручного сегментирования, наблюдался прирост производительности, точнее то, что она не терялась с ростом объема такой таблицы.
Не всегда заранее можно предугадать все запросы к данным, жизнь может заставить генерить совсем другие запросы в будущем, когда данные уже накоплены.
И грамотно спроектированные индексы не всегда спасают. А уж тюнинговать каждый раз все запросы при выходе нового билда сервера, из-за того, что сменился оптимизатор ... :(
Все-таки не зря это в ORACLE сделали.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880873
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С UNION все понятно, но одна из фитч секционированных вью - это то что они понимают в какую таблицу вставлять запись при insert into partitiondeview ... Вот эту возможность ASA/ASE поддерживает?
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880891
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как правильно заметили участники - смысл секционирования в том чтобы сервак при запросах не дергал партиции
которые не подпадают в условие insert/update/delete/select отсюда и производительность примерно на одном уровне остается, т.е. особо не падает.
И никакие индексы не спасут когда ежедневно в таблицу валится по 5 млн записей (к примеру).
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880918
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз повторюсь.
В ASE этого точно нет. Секционирование таблиц появится в 15 версии (выход ориентировочно конец 2005) Там кстати очень много полезных вещей появится.
Вообщем ASE выйдет на уровень близкий к MSSQL2000 :), а кое в чем даже обещают превзойти, например в организации кластеров. Все это очень неплохо для СУБД невходящей в TOP 3.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880931
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ТОП3 это что ORACLE, MSSQL2000, и .... DB2 что ли?
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32880980
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael_Согласен с crip, разбиение таблиц на сегменты (как это сделано в ORACLE) необходимо.

Может РАССКАЖЕТЕ как это сделано в ORACLE ?

michael_
Мы эксперементировали с этим. Работали и с большими таблицами и с созданными руками сегментами. Так вот, при всех неудобствах ручного сегментирования, наблюдался прирост производительности, точнее то, что она не терялась с ростом объема такой таблицы.


Ну это достигается простым индексом, покрывающим запрос. Надеюсь, большие таблицы без индексов никто не предлагает обрабатываит ?

Теперь на счет экспериментов - какая была таблица, объем ( только умоляю - не в мегабайтах, а в строках), как была разбита и какие были запросы.
???

michael_
И грамотно спроектированные индексы не всегда спасают. А уж тюнинговать каждый раз все запросы при выходе нового билда сервера, из-за того, что сменился оптимизатор ... :(


Но насколько я понимаю, разбиваете вы таблицу тоже по вполне определенным критериям, например, если вы разобъете таблицу продаж по годам, то для обработки запроса анализа поставок конкретному контрагенту все равно нужно будет обрабатывать все таблицы.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881006
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Насколько я понимаю, секционирование таблиц полезно в 3 случаях:
1. Сверх-большие обьемы (когда реально таблица не помещается на жесткий диск)


А почему ты думаешь, что одна таблица в одной БД должна быть обязательно на одном диске ? В ASE одна БД может быть на нескольких (в том числе и физических) устройтвах (дисках), и таким же образом может быть на нескольких дисках и таблица в этой БД, причем прозрачно для ее пользователей.
Так что этот случай отметается.

ASCRUS
2. Интенсивные операции по селективному индексу, который для больших таблиц становится не слишком удобным способом поиска удовлетворяющих условиям записей


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

ASCRUS
3. OLAP, где требуется проводить аналитику по большому кол-ву записей и параллейное чтение индексов и таблицы не помешало бы.


Вот. Единственное. Парралельная обработка. А она в ASE допустима как для partitioned таблиц (в терминах ASE), так и для не partitioned - таблиц. Причем ты можешь физически распределять данные по партициям на основе ключа, а можешь и не распределять.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881025
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip
Попрошу на личности не переходить. Эти вещи между прочим очень даже взаимосвязаны. А то что Sybase ASE остался на уровне MS SQL6.5 это не секрет по-моему ни для кого.э


Ты не прав. Он в части TSQL может быть и остался на уровне MS SQL6.5 (точнее - MSSQL 6.5 был более продвинут в некоторых вещах).
Но во всем , что касается внутренностей - мне так кажется, что ASE покруче MSSQL 2000 будет. Особенно в части ROW LEVEL LOCKING и организации
таблиц.

Crip
Зачем нужно секционирование?
1 таблица бьется на несколько партиций, каждая из которых формируется из определенного условия ( констрейнта) Это позволяет оптимизатору понимать, что при явном указании в селекте этого констрейнта, ко всем остальным партициям обращаться не нужно!
Индекс тут вам не поможет, потому как его селективность будет очень мала.

А вообще ты прав, дейтвительно не поможет. Тут как бы многовходовый индекс нужен, а у ASE сейчас будет N маленьких индексов. Да, действительно я был не прав - может и нужная штука . Ну так сделают - оно достаточно нетрудно вроде бы.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881026
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripИ не только в селективности дело, еще на партиции можно строить свои индексы, отдельно бекапировать и т.д.

:)) :)) :)) :)) :))

Над "отдельно бекапировать" долго смеялся.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881171
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что смешного?
По крайней мере я так понял из описания фич 15-й версии.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881175
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А че кстати в row level locking в ASE сделано лучше чем в MSSQL2000?
То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881181
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000?
То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные.
Гм, вообще то для этого уровень repeatable read и предназначен и делать его неявно с read committed по меньшей мере странно - здесь мы ожидаем просто чистое чтение. Надо думать отсюда ноги всех проблем с блокировками у MSSQL и растут.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881182
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не так хорошо знаю Sybase ASE, но после MS SQL2000 все как-то неудобно, недоделано и глюкаво. Единственное это может быть row level locking, но это пожалуй единственный плюс Sybase.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881500
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати может гуру Sybase ASE подскажут как бороться в нем с дедлоками конвертации? В MSSQL для этого существует хинт updlock, а что делать в Sybase ASE?

Пример кода вызывающего дедлок:
Код: plaintext
1.
2.
3.
set transaction isolation level  2  
begin tran
select a from t where a =  1  
update t set a =  2  where a =  1  
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881570
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это в пределах одной сессии можно дедлок вызвать или я чего то не понял ? В ASA к примеру этот код никаких проблем не вызовет, там придется не мало постараться, чтобы дедлок получить.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32881598
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь - плохо прокомментировал, рассчитывал на людей знающих о чем речь.
Код запускается конечно в двух сессиях причем между select и update нужно сделать паузу. Смысл возникновения дедлока в том что селекты делают Shared lock, а последующие апдейты одновременно пытаются перевести shared в update lock и успешно обламываются.
В MSSQL решается с помощью хинта в селект with updlock. В Sybase ASE я вижу выход разве что в недокументированнном Update t set @a = a. Но может кто знает способ лучше?
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883382
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем же Update t set @a = a недокументированый ?
Да и можно вообще
Update t set a = a ...
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883383
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSА как это в пределах одной сессии можно дедлок вызвать или я чего то не понял ? В ASA к примеру этот код никаких проблем не вызовет, там придется не мало постараться, чтобы дедлок получить.

Никак. гонит он.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883388
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000?
То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные.
То, что ты реально можешь добиться блокировки ТОЛЬКО на уровне строк в какой-то таблице, если тебе это надо (правда, возможно, угрохав на это кучу ресурсов сервера (на время транзакции), но это уже другой вопрос - раз надо , значит надо). В MSSQL все решает сам сервер, настроек нет.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883392
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000?
То что при уровне изоляции read committed не блокируется все записи до конца запроса?


Ты хоть понял, что сказал ? Все блокируется, транзакция не может не блокировать записи. Только блокируются СТРОКИ, и всегда (если настроить) Ну и соотв. дальнейшие твои расс. - ерунда полная, никаких несогласованных данных нет.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883448
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего это я гоню?
Про ASA не знаю. Говорю про ASE. Вы хотите сказать что дедлока не будет? Еще как будет! Поможет только предваряющий update.

Дальше вообще разговор слепого с глухим.
Я говорил о том что в MSSQL на уровне изоляции read committed блокируется все строки учавствующие в запросе до конца соответствующего стейтмента, то есть как будто бы устанавливается изоляция repeatable read для отдельного стейтмента.
В Sybase ASE это не так, если дополнительно не настраивать то в запросе на уровне read committed происходит только защита от грязного чтения, в результате чего читатели(select в одной сессии) не блокируют писателей(update в другой сессии).

Пожалуйста расскажите более подробно в чем я не прав, наверняка виновато мое так сказать "майкрософтовское" мышление.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883681
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение - когда я говорил о блокировках в последнем абзаце, то имелись ввиду конечно shared блокировки, которые в read committed не удерживаются до конца транзакции...
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883908
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripЧего это я гоню?

Не бывает DEADLOCK-а самого с собой. Если ты его видел - это значит, что тебе показалось.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883932
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv CripЧего это я гоню?

Не бывает DEADLOCK-а самого с собой. Если ты его видел - это значит, что тебе показалось.
Он имел ввиду, что SELECT и UPDATE в разных сессиях. То есть SELECT на чистом чтении блокирует только обрабатываемую на текущий момент запись и при переходе на следующую натыкается на эклюсивную блокировку UPDATE. В это время UPDATE пытается изменить запись, которая сейчас блокирована SELECT-ом, получается патовая ситуация (дедлок). Я что то типа того понял. Попробую на ASA смоделировать, но что то мне не верится, что я там дедлок получу.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32883971
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip
Я говорил о том что в MSSQL на уровне изоляции read committed блокируется все строки учавствующие в запросе до конца соответствующего стейтмента, то есть как будто бы устанавливается изоляция repeatable read для отдельного стейтмента.


На сколько я помню, в MSSQL на read commited SHAREDLOCK-и на прочитанные данные снимаются по окончании чтения страницы (или записи), точно таким же образом, как это делается и в ASE, от которого и унаследован код сервера. Так было и в 6.0, и в 6.5. Может быть поманялось в 7. - 2000 - хотя вот цитата из BOL

BOL
The duration of share locks used to protect reads depends on the transaction isolation levels. At the default transaction isolation level of READ COMMITTED, a share lock is held only as long as it takes to read a page. In scans, the lock is held until a lock is acquired on the next page in a scan. If the HOLDLOCK hint is specified, or the transaction isolation level is set to either REPEATABLE READ or SERIALIZABLE, the locks are held to the end of the transaction.


Так что подозреваю что никакого блокирования до конца statement-а и никакого repeatable read на read commited не существует.

Crip
В Sybase ASE это не так, если дополнительно не настраивать

Что и как настраивать ?

Crip
то в запросе на уровне read committed происходит только защита от грязного чтения,


А интересно от чего еще нужно защищаться на уровне изоляции READ COMMITED, как ты полагаешь ?

Crip
в результате чего читатели(select в одной сессии) не блокируют писателей(update в другой сессии).


Нет, к сожалению, именно блокируют. И происходит это и в MSSQL, и в ASE. Если читатель читает например страницу данных, а в это же время писатель в другой сессии хочеть поменять эту страницу данных, то писатель будет ждать до тех пор, пока читатель не закончит чтение и не снимет Shared lock на страницу. Это может произойти по окончании чтения страницы (на read commited), или по окончании транзакции. Если ты посмотришь на таблицу совместимости блокировок, то увидешь, что SHARED не совместим с UPDLOCK.

Crip
Пожалуйста расскажите более подробно в чем я не прав, наверняка виновато мое так сказать "майкрософтовское" мышление.


Надеюсь, мне это удалось.

Напоследок могу сказать, что ASE действительно немного менее управляем в плане изоляции транзакций, чем MSSQL, но ... не там, где ты думаешь.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32884000
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS
Он имел ввиду, что SELECT и UPDATE в разных сессиях. То есть SELECT на чистом чтении блокирует только обрабатываемую на текущий момент запись и при переходе на следующую натыкается на эклюсивную блокировку UPDATE. В это время UPDATE пытается изменить запись, которая сейчас блокирована SELECT-ом, получается патовая ситуация (дедлок).


Если это действительно имелось в виду, то я абсолютно согласен - это ситуация DEADLOCK-а. Но она характерна для обоих серверов (ASE и MSSQL), а выходить из нее путем повышения изоляции на SELECT как-то не очень хорошо. Да и все равно

Crip
решается с помощью хинта в селект with updlock.


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

А бороться - известно как, путем указания других (возможно одинаковых) последовательностей сканирования таблиц.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32884070
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли это действительно имелось в виду, то я абсолютно согласен - это ситуация DEADLOCK-а. Но она характерна для обоих серверов (ASE и MSSQL),
Это и имелось ввиду.
авторНо она характерна для обоих серверов (ASE и MSSQL), а выходить из нее путем повышения изоляции на SELECT как-то не очень хорошо. Да и все равно
Никто не выходит из нее повышением уровня изоляции. Наоборот ситуация как раз возникает при повышение уровня изоляции выше read committed. В MSSQL есть специальный хинт updlock который говорит что при select нужно устанавливать не shared lock , а update lock, что позволяет избежать дедлока. В Sybase такого механизма я так понимаю нет, получается что нужно использовать предваряющий update.
авторНет, к сожалению, именно блокируют. И происходит это и в MSSQL, и в ASE. Если читатель читает например страницу данных, а в это же время писатель в другой сессии хочеть поменять эту страницу данных, то писатель будет ждать до тех пор, пока читатель не закончит чтение и не снимет Shared lock на страницу. Это может произойти по окончании чтения страницы (на read commited), или по окончании транзакции
В том то и проблема, что в Sybase ASE блокировки снимаются по мере того как страница будет считана (насколько я это понимаю, может ошибаюсь).
В MS SQL же насколько позволяют ресурсы происходит блокировка строк, причем она не снимается до того как все страницы не будут прочитаны.
Для примера достаточно просто запустить select занимающий продолжительное время и одновременно запустить update на одну строк ( время очень мало). В Sybase ASE update пройдет быстро или с незначительной задержкой, а в MSSQL будет висеть пока select не закончит работу.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32884104
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ASCRUS
Не совсем правильно поняли.
Сначала в обоих сессиях делается select,при это каждая накладывает shared блокировку. А потом из каждой сессии запускается update, но пройти он не может так как запись заблокирована селектами. Типичная ситуация для блокировки конвертирования.

2MasterZiv
Извините, но вы ведете себя как преподаватель, который уже решил какую оценку поставить студенту и пытается только доказать, что именно ее студент и заслуживает.
Наша задача не доказать друг другу кто умнее, тем более, что в уровне ваших знаний никто не сомневается, а выяснить истину. Быть может кому-то это еще пригодится, тем более, что людей разбирающихся в Sybase не так много.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32884426
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм, в ASA все легче:

на 1 уровне изоляции блокируется текущая запись, обрабатывается, блокировка снимается, берется следующая запись...

На 2 уровне во время прохода блокируются все записи, попадающие под условия запроса, блокировка снимается на COMMIT.

На 3 уровне изоляции блокируются все страницы, в которые попадают записи, удовлетворяющие условию запроса, таким образом если последняя страница не попадает под блокировку, в БД могут продолжать добавляться записи без каких либо задержек, а так же изменятся те, которые так же лежат на неблокированных страницах (страничная блокировка здесь сделана специально для снижения расхода ресурсов и предотвращения попыток изменения соседних записей, которые могли бы войти в понятие фантомов). Так же для особых случаев есть хинт эклюсивной позаписной блокировки (ни читать ни писать больше никто такие записи не может до выполнения блокирующей сессией оператора COMMIT) и табличной блокировки оператором LOCK TABLE. Если на таблице есть PK или Unique, то это позволяет ASA использовать на них свои виды фантомных и анти-фантомных блокировок и таким образом даже для 3-его уровня изоляции без существенных трудозатрат и понижения скорости позволять другим сессиям производить вставки записей. Ну а все что ниже 3-его уровня изоляции гарантированно блокируется только позаписно и можно спокойно изменять другие записи на тех же страницах, на которых были заблокированны записи тем же 2-ым уровнем изоляции.

С точки зрения производительности RowLevel блокировок хочу сказать, что приходилось делать UPDATE на 2-ом уровне изоляции на обьемы по 15 миллионов записей, не сказать что было затрачено слишком много ресурсов и времени на выполнение этой операции, при этом другие сессии продолжали работать с другими записями без проседаний и каких либо остановок.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32884433
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ASCRUS
В догонку

Вот здесь
описано как возникает дедлок и как лечить для MSSQL2000
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32885601
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip
Извините, но вы ведете себя как преподаватель, который уже решил какую оценку поставить студенту и пытается только доказать, что именно ее студент и заслуживает.
Наша задача не доказать друг другу кто умнее, тем более, что в уровне ваших знаний никто не сомневается, а выяснить истину. Быть может кому-то это еще пригодится, тем более, что людей разбирающихся в Sybase не так много.

Вот интересно. Я тебе привел кусок из MSSQL-евской буки, где черным по белому написано, что и в MSSQL Shared снимается тут же при окончании чтения страницы. Ты же опять :

Crip
В том то и проблема, что в Sybase ASE блокировки снимаются по мере того как страница будет считана (насколько я это понимаю, может ошибаюсь).
В MS SQL же насколько позволяют ресурсы происходит блокировка строк, причем она не снимается до того как все страницы не будут прочитаны.


Кому мне верить , официальной документации или тебе ?

Crip
Никто не выходит из нее повышением уровня изоляции.


Это кто писал ?
Crip
В MSSQL решается с помощью хинта в селект with updlock.

Это что не повышение ?

автор
Наоборот ситуация как раз возникает при повышение уровня изоляции выше read committed. В MSSQL есть специальный хинт updlock который говорит что при select нужно устанавливать не shared lock , а update lock, что позволяет избежать дедлока. В Sybase такого механизма я так понимаю нет, получается что нужно использовать предваряющий update.
автор


Механизма нет, но ситуацию с дэдлоком это не спасло бы все равно. Что одна, что другая блокировка несовместима (в ASE по крайней мере) c UPDLOCK. Так что deadlock все равно будет.

И еще ты мне так и не сказал , от чего еще нужно защищаться на уровне изоляции READ COMMITED, кроме грязного чтения.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32885799
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто что не повышение ?
Ну не совсем... Для повышения уровня изоляции служит все-таки другой хинт.

Предваряющий update однако помогает в ASE, по поводу MSSQL см. статью.
авторКому мне верить , официальной документации или тебе ?
Хм... Еще раз сделал тест и получил как раз документированный результат.
Впрочем по идее так и должно быть, но у меня где-то по другому получилось. Запутался, что-то :(
авторИ еще ты мне так и не сказал , от чего еще нужно защищаться на уровне изоляции READ COMMITED, кроме грязного чтения
Да ничего конечно не нужно просто какой-то тест ввел меня в заблуждения по поводу блокировок в MSSQL, тем более что с ним уже почти год не работал, а от этих постоянных разговоров про неудобство блокировочника уже крыша наверное поехала. Не понимаю даже с чего я решил что блокировки удерживаются, ведь всю жизнь писали именно исходя как раз из документированного описания.

Спасибо за разъяснения, немного привел порядок в голову. Единственное я тогда не понимаю чем же row level locking в ASE лучше чем в MSSQL2000?
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32885864
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, надоело квотировать...

Ну не совсем... Для повышения уровня изоляции служит все-таки другой хинт.

Это именно оно и есть. Повышение. Только не в терминах ANSI isolation, а просто по жизни. Да и не вдруг ты сможешь сказать, какой это уровень в ANSI будет, там вообще такого нет, чтобы изоляция одной таблицы была бы выше других.

Предваряющий update однако помогает в ASE, по поводу MSSQL см. статью.

Да не помогает, причем ни там, ни там. То же самое будет, главное сканирование с разных концов таблицы обеспечить. Экслюзивная блокировка таблицы только помогает. Ну да ладно, не суть, от DEADLOCKов вообще говоря никогда полностью не избавишься.

А вот я могу сказать , чем ASE "хуже" MSSQL - на нем такого вот типа запрос для генерации следующего значения ключа в таблице

Код: plaintext
1.
select @next_id = isnull( max(id) ,  0  ) +  1  from myTable
ну ни за что не засериализуешь - будут генерироваться одинаковые значения при интенсивных вставках.

Единственное я тогда не понимаю чем же row level locking в ASE лучше чем в MSSQL2000?

Завтра напишу.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32885865
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже должен покаяться - я тут говорил про несовместимость SharedLock и UpdateLock. Так вот писал UpdateLock, а имел в виду на самом деле ExclusiveLock. Т.е не тот , который на фазе сканирования при UPDATE накладывается, а который на фазе изменения уже.

Да прочитал я статью - почти ничего нового для себя не почерпнул (т.е. мои знания MSSQL не так и устарели), окромя одной вещи - что для блокировки строки или страницы в кластерной таблице используется key lock. Вот это интересно, но им (MS-у) это ничего кроме разве что экономии lock-ов особенно не дает.
...
Рейтинг: 0 / 0
Аля partiotioned view или partiotion by table
    #32886157
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по поводу Update lock и Exclusive lock я тоже местами напутал...
авторДа не помогает, причем ни там, ни там.
Как сказать... В MSSQL львиную долю дедлоков удавалось убирать именно таким способом, хотя согласен, что от всех не спасешься, надо все-таки транзакции максимально укорачивать, но профилактика по-моему не повредит.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аля partiotioned view или partiotion by table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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