|
|
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Есть ли аналог в ASA и ASE и если есть, начиная с каких версий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 09:33 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
ASA: "partiotioned view" организуется так же, как и в MSSQL - через UNION ALL. "partiotion by table" отсутствует (было бы странно это увидеть в SMB СУБД). ASE: Все есть. P.S. Если посмотреть в FAQ , то там можно обнаружить следующий документ , рассказывающий о возможностях всех СУБД Sybase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 10:43 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
А в ASA 5.5 partiotioned view поддерживается? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 10:48 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripВообще оптимизатор в ASE крайне убогий. Select from select появился только в 12.5.1 и тот все наровит свалиться в stacktrace. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 10:54 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
авторРасскажит плс темному, что же там в ASE все есть? Я дал ссылку на документ, подготовленный для меня Sybase.ru, вот там все и читайте. Лично я вообще без понятия, чего там есть, чего нет в ASE - у меня для полного счастья в своих проектах в ASA 9 все есть (даже про запас) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 11:12 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS ASCRUSASA: было бы странно это увидеть в SMB СУБД Так все-таки ASA не класса Enterprise, а "все-лишь" SMB? :) Секционирование таблиц было бы очень удобно как в ASA так и в ASE. И в SMB бывают очень большие таблицы. Будем ждать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 13:35 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Так же можно поиграться динамическим 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 14:25 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
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 сегментам (устройствам). Насколько я помню, именно это делает ОРАКЛОВАЯ фича. Сам я вообще не очень понимаю, зачем это все нужно - бить таблицу на куски. Если есть индекс и запрос хороший - само все разобьется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:05 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
авторЕсли ты даже не понимаешь, что такое процессор запросов и что такое оптимизатор, и в чем между ними разница, Попрошу на личности не переходить. Эти вещи между прочим очень даже взаимосвязаны. А то что Sybase ASE остался на уровне MS SQL6.5 это не секрет по-моему ни для кого.э Зачем нужно секционирование? 1 таблица бьется на несколько партиций, каждая из которых формируется из определенного условия ( констрейнта) Это позволяет оптимизатору понимать, что при явном указании в селекте этого констрейнта, ко всем остальным партициям обращаться не нужно! Индекс тут вам не поможет, потому как его селективность будет очень мала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:27 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
И не только в селективности дело, еще на партиции можно строить свои индексы, отдельно бекапировать и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 15:33 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Согласен с crip, разбиение таблиц на сегменты (как это сделано в ORACLE) необходимо. Мы эксперементировали с этим. Работали и с большими таблицами и с созданными руками сегментами. Так вот, при всех неудобствах ручного сегментирования, наблюдался прирост производительности, точнее то, что она не терялась с ростом объема такой таблицы. Не всегда заранее можно предугадать все запросы к данным, жизнь может заставить генерить совсем другие запросы в будущем, когда данные уже накоплены. И грамотно спроектированные индексы не всегда спасают. А уж тюнинговать каждый раз все запросы при выходе нового билда сервера, из-за того, что сменился оптимизатор ... :( Все-таки не зря это в ORACLE сделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 16:42 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
С UNION все понятно, но одна из фитч секционированных вью - это то что они понимают в какую таблицу вставлять запись при insert into partitiondeview ... Вот эту возможность ASA/ASE поддерживает? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:46 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
и как правильно заметили участники - смысл секционирования в том чтобы сервак при запросах не дергал партиции которые не подпадают в условие insert/update/delete/select отсюда и производительность примерно на одном уровне остается, т.е. особо не падает. И никакие индексы не спасут когда ежедневно в таблицу валится по 5 млн записей (к примеру). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:51 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Еще раз повторюсь. В ASE этого точно нет. Секционирование таблиц появится в 15 версии (выход ориентировочно конец 2005) Там кстати очень много полезных вещей появится. Вообщем ASE выйдет на уровень близкий к MSSQL2000 :), а кое в чем даже обещают превзойти, например в организации кластеров. Все это очень неплохо для СУБД невходящей в TOP 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 17:58 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
А ТОП3 это что ORACLE, MSSQL2000, и .... DB2 что ли? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:01 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
michael_Согласен с crip, разбиение таблиц на сегменты (как это сделано в ORACLE) необходимо. Может РАССКАЖЕТЕ как это сделано в ORACLE ? michael_ Мы эксперементировали с этим. Работали и с большими таблицами и с созданными руками сегментами. Так вот, при всех неудобствах ручного сегментирования, наблюдался прирост производительности, точнее то, что она не терялась с ростом объема такой таблицы. Ну это достигается простым индексом, покрывающим запрос. Надеюсь, большие таблицы без индексов никто не предлагает обрабатываит ? Теперь на счет экспериментов - какая была таблица, объем ( только умоляю - не в мегабайтах, а в строках), как была разбита и какие были запросы. ??? michael_ И грамотно спроектированные индексы не всегда спасают. А уж тюнинговать каждый раз все запросы при выходе нового билда сервера, из-за того, что сменился оптимизатор ... :( Но насколько я понимаю, разбиваете вы таблицу тоже по вполне определенным критериям, например, если вы разобъете таблицу продаж по годам, то для обработки запроса анализа поставок конкретному контрагенту все равно нужно будет обрабатывать все таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:20 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
ASCRUS Насколько я понимаю, секционирование таблиц полезно в 3 случаях: 1. Сверх-большие обьемы (когда реально таблица не помещается на жесткий диск) А почему ты думаешь, что одна таблица в одной БД должна быть обязательно на одном диске ? В ASE одна БД может быть на нескольких (в том числе и физических) устройтвах (дисках), и таким же образом может быть на нескольких дисках и таблица в этой БД, причем прозрачно для ее пользователей. Так что этот случай отметается. ASCRUS 2. Интенсивные операции по селективному индексу, который для больших таблиц становится не слишком удобным способом поиска удовлетворяющих условиям записей Ты сам-то понял, что сказал ? Когда это позиционирование по индексу "становится не слишком удобным способом поиска" ? Да чем больше таблица, тем удобнее поиск по индексу в сравнении с другими методами. Тоже уходит случай. ASCRUS 3. OLAP, где требуется проводить аналитику по большому кол-ву записей и параллейное чтение индексов и таблицы не помешало бы. Вот. Единственное. Парралельная обработка. А она в ASE допустима как для partitioned таблиц (в терминах ASE), так и для не partitioned - таблиц. Причем ты можешь физически распределять данные по партициям на основе ключа, а можешь и не распределять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:29 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Crip Попрошу на личности не переходить. Эти вещи между прочим очень даже взаимосвязаны. А то что Sybase ASE остался на уровне MS SQL6.5 это не секрет по-моему ни для кого.э Ты не прав. Он в части TSQL может быть и остался на уровне MS SQL6.5 (точнее - MSSQL 6.5 был более продвинут в некоторых вещах). Но во всем , что касается внутренностей - мне так кажется, что ASE покруче MSSQL 2000 будет. Особенно в части ROW LEVEL LOCKING и организации таблиц. Crip Зачем нужно секционирование? 1 таблица бьется на несколько партиций, каждая из которых формируется из определенного условия ( констрейнта) Это позволяет оптимизатору понимать, что при явном указании в селекте этого констрейнта, ко всем остальным партициям обращаться не нужно! Индекс тут вам не поможет, потому как его селективность будет очень мала. А вообще ты прав, дейтвительно не поможет. Тут как бы многовходовый индекс нужен, а у ASE сейчас будет N маленьких индексов. Да, действительно я был не прав - может и нужная штука . Ну так сделают - оно достаточно нетрудно вроде бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:39 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripИ не только в селективности дело, еще на партиции можно строить свои индексы, отдельно бекапировать и т.д. :)) :)) :)) :)) :)) Над "отдельно бекапировать" долго смеялся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 18:41 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
А что смешного? По крайней мере я так понял из описания фич 15-й версии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 20:51 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
А че кстати в row level locking в ASE сделано лучше чем в MSSQL2000? То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 20:55 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000? То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные. Гм, вообще то для этого уровень repeatable read и предназначен и делать его неявно с read committed по меньшей мере странно - здесь мы ожидаем просто чистое чтение. Надо думать отсюда ноги всех проблем с блокировками у MSSQL и растут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 21:03 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Я не так хорошо знаю Sybase ASE, но после MS SQL2000 все как-то неудобно, недоделано и глюкаво. Единственное это может быть row level locking, но это пожалуй единственный плюс Sybase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2005, 21:06 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Кстати может гуру Sybase ASE подскажут как бороться в нем с дедлоками конвертации? В MSSQL для этого существует хинт updlock, а что делать в Sybase ASE? Пример кода вызывающего дедлок: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 09:27 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
А как это в пределах одной сессии можно дедлок вызвать или я чего то не понял ? В ASA к примеру этот код никаких проблем не вызовет, там придется не мало постараться, чтобы дедлок получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:09 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Извиняюсь - плохо прокомментировал, рассчитывал на людей знающих о чем речь. Код запускается конечно в двух сессиях причем между select и update нужно сделать паузу. Смысл возникновения дедлока в том что селекты делают Shared lock, а последующие апдейты одновременно пытаются перевести shared в update lock и успешно обламываются. В MSSQL решается с помощью хинта в селект with updlock. В Sybase ASE я вижу выход разве что в недокументированнном Update t set @a = a. Но может кто знает способ лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 10:19 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
чем же Update t set @a = a недокументированый ? Да и можно вообще Update t set a = a ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 20:54 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
ASCRUSА как это в пределах одной сессии можно дедлок вызвать или я чего то не понял ? В ASA к примеру этот код никаких проблем не вызовет, там придется не мало постараться, чтобы дедлок получить. Никак. гонит он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 20:54 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000? То что при уровне изоляции read committed не блокируется все записи до конца запроса? Может быть это и хорошо только в MSSQL любой запрос благодаря этому отдельно становится как бы repeatable read, а в ASE получается, что если уровень изоляции не поднять то можно получить несогласованные данные. То, что ты реально можешь добиться блокировки ТОЛЬКО на уровне строк в какой-то таблице, если тебе это надо (правда, возможно, угрохав на это кучу ресурсов сервера (на время транзакции), но это уже другой вопрос - раз надо , значит надо). В MSSQL все решает сам сервер, настроек нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 20:57 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripА че кстати в row level locking в ASE сделано лучше чем в MSSQL2000? То что при уровне изоляции read committed не блокируется все записи до конца запроса? Ты хоть понял, что сказал ? Все блокируется, транзакция не может не блокировать записи. Только блокируются СТРОКИ, и всегда (если настроить) Ну и соотв. дальнейшие твои расс. - ерунда полная, никаких несогласованных данных нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 21:01 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Чего это я гоню? Про ASA не знаю. Говорю про ASE. Вы хотите сказать что дедлока не будет? Еще как будет! Поможет только предваряющий update. Дальше вообще разговор слепого с глухим. Я говорил о том что в MSSQL на уровне изоляции read committed блокируется все строки учавствующие в запросе до конца соответствующего стейтмента, то есть как будто бы устанавливается изоляция repeatable read для отдельного стейтмента. В Sybase ASE это не так, если дополнительно не настраивать то в запросе на уровне read committed происходит только защита от грязного чтения, в результате чего читатели(select в одной сессии) не блокируют писателей(update в другой сессии). Пожалуйста расскажите более подробно в чем я не прав, наверняка виновато мое так сказать "майкрософтовское" мышление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2005, 22:32 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Уточнение - когда я говорил о блокировках в последнем абзаце, то имелись ввиду конечно shared блокировки, которые в read committed не удерживаются до конца транзакции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 09:03 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
CripЧего это я гоню? Не бывает DEADLOCK-а самого с собой. Если ты его видел - это значит, что тебе показалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:44 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
MasterZiv CripЧего это я гоню? Не бывает DEADLOCK-а самого с собой. Если ты его видел - это значит, что тебе показалось. Он имел ввиду, что SELECT и UPDATE в разных сессиях. То есть SELECT на чистом чтении блокирует только обрабатываемую на текущий момент запись и при переходе на следующую натыкается на эклюсивную блокировку UPDATE. В это время UPDATE пытается изменить запись, которая сейчас блокирована SELECT-ом, получается патовая ситуация (дедлок). Я что то типа того понял. Попробую на ASA смоделировать, но что то мне не верится, что я там дедлок получу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:50 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
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, но ... не там, где ты думаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:04 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
ASCRUS Он имел ввиду, что SELECT и UPDATE в разных сессиях. То есть SELECT на чистом чтении блокирует только обрабатываемую на текущий момент запись и при переходе на следующую натыкается на эклюсивную блокировку UPDATE. В это время UPDATE пытается изменить запись, которая сейчас блокирована SELECT-ом, получается патовая ситуация (дедлок). Если это действительно имелось в виду, то я абсолютно согласен - это ситуация DEADLOCK-а. Но она характерна для обоих серверов (ASE и MSSQL), а выходить из нее путем повышения изоляции на SELECT как-то не очень хорошо. Да и все равно Crip решается с помощью хинта в селект with updlock. не поможет - что SHARED, что UPDATE с другим UPDATE несовместимы, и , что самое главное, накладываются они в процессе транзакции последовательно, по мере нахождения нужных записей. А бороться - известно как, путем указания других (возможно одинаковых) последовательностей сканирования таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:13 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
авторЕсли это действительно имелось в виду, то я абсолютно согласен - это ситуация 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 не закончит работу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:32 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
2ASCRUS Не совсем правильно поняли. Сначала в обоих сессиях делается select,при это каждая накладывает shared блокировку. А потом из каждой сессии запускается update, но пройти он не может так как запись заблокирована селектами. Типичная ситуация для блокировки конвертирования. 2MasterZiv Извините, но вы ведете себя как преподаватель, который уже решил какую оценку поставить студенту и пытается только доказать, что именно ее студент и заслуживает. Наша задача не доказать друг другу кто умнее, тем более, что в уровне ваших знаний никто не сомневается, а выяснить истину. Быть может кому-то это еще пригодится, тем более, что людей разбирающихся в Sybase не так много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:41 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Гм, в ASA все легче: на 1 уровне изоляции блокируется текущая запись, обрабатывается, блокировка снимается, берется следующая запись... На 2 уровне во время прохода блокируются все записи, попадающие под условия запроса, блокировка снимается на COMMIT. На 3 уровне изоляции блокируются все страницы, в которые попадают записи, удовлетворяющие условию запроса, таким образом если последняя страница не попадает под блокировку, в БД могут продолжать добавляться записи без каких либо задержек, а так же изменятся те, которые так же лежат на неблокированных страницах (страничная блокировка здесь сделана специально для снижения расхода ресурсов и предотвращения попыток изменения соседних записей, которые могли бы войти в понятие фантомов). Так же для особых случаев есть хинт эклюсивной позаписной блокировки (ни читать ни писать больше никто такие записи не может до выполнения блокирующей сессией оператора COMMIT) и табличной блокировки оператором LOCK TABLE. Если на таблице есть PK или Unique, то это позволяет ASA использовать на них свои виды фантомных и анти-фантомных блокировок и таким образом даже для 3-его уровня изоляции без существенных трудозатрат и понижения скорости позволять другим сессиям производить вставки записей. Ну а все что ниже 3-его уровня изоляции гарантированно блокируется только позаписно и можно спокойно изменять другие записи на тех же страницах, на которых были заблокированны записи тем же 2-ым уровнем изоляции. С точки зрения производительности RowLevel блокировок хочу сказать, что приходилось делать UPDATE на 2-ом уровне изоляции на обьемы по 15 миллионов записей, не сказать что было затрачено слишком много ресурсов и времени на выполнение этой операции, при этом другие сессии продолжали работать с другими записями без проседаний и каких либо остановок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 12:59 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 13:01 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
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, кроме грязного чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 18:24 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
авторЭто что не повышение ? Ну не совсем... Для повышения уровня изоляции служит все-таки другой хинт. Предваряющий update однако помогает в ASE, по поводу MSSQL см. статью. авторКому мне верить , официальной документации или тебе ? Хм... Еще раз сделал тест и получил как раз документированный результат. Впрочем по идее так и должно быть, но у меня где-то по другому получилось. Запутался, что-то :( авторИ еще ты мне так и не сказал , от чего еще нужно защищаться на уровне изоляции READ COMMITED, кроме грязного чтения Да ничего конечно не нужно просто какой-то тест ввел меня в заблуждения по поводу блокировок в MSSQL, тем более что с ним уже почти год не работал, а от этих постоянных разговоров про неудобство блокировочника уже крыша наверное поехала. Не понимаю даже с чего я решил что блокировки удерживаются, ведь всю жизнь писали именно исходя как раз из документированного описания. Спасибо за разъяснения, немного привел порядок в голову. Единственное я тогда не понимаю чем же row level locking в ASE лучше чем в MSSQL2000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 21:08 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Блин, надоело квотировать... Ну не совсем... Для повышения уровня изоляции служит все-таки другой хинт. Это именно оно и есть. Повышение. Только не в терминах ANSI isolation, а просто по жизни. Да и не вдруг ты сможешь сказать, какой это уровень в ANSI будет, там вообще такого нет, чтобы изоляция одной таблицы была бы выше других. Предваряющий update однако помогает в ASE, по поводу MSSQL см. статью. Да не помогает, причем ни там, ни там. То же самое будет, главное сканирование с разных концов таблицы обеспечить. Экслюзивная блокировка таблицы только помогает. Ну да ладно, не суть, от DEADLOCKов вообще говоря никогда полностью не избавишься. А вот я могу сказать , чем ASE "хуже" MSSQL - на нем такого вот типа запрос для генерации следующего значения ключа в таблице Код: plaintext 1. Единственное я тогда не понимаю чем же row level locking в ASE лучше чем в MSSQL2000? Завтра напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 22:59 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Я тоже должен покаяться - я тут говорил про несовместимость SharedLock и UpdateLock. Так вот писал UpdateLock, а имел в виду на самом деле ExclusiveLock. Т.е не тот , который на фазе сканирования при UPDATE накладывается, а который на фазе изменения уже. Да прочитал я статью - почти ничего нового для себя не почерпнул (т.е. мои знания MSSQL не так и устарели), окромя одной вещи - что для блокировки строки или страницы в кластерной таблице используется key lock. Вот это интересно, но им (MS-у) это ничего кроме разве что экономии lock-ов особенно не дает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 22:59 |
|
||
|
Аля partiotioned view или partiotion by table
|
|||
|---|---|---|---|
|
#18+
Ну по поводу Update lock и Exclusive lock я тоже местами напутал... авторДа не помогает, причем ни там, ни там. Как сказать... В MSSQL львиную долю дедлоков удавалось убирать именно таким способом, хотя согласен, что от всех не спасешься, надо все-таки транзакции максимально укорачивать, но профилактика по-моему не повредит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 09:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=55&tid=2013934]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 177ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...