powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аля partiotioned view или partiotion by table
25 сообщений из 45, страница 1 из 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
25 сообщений из 45, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Аля partiotioned view или partiotion by table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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