Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Простите чайника: параллелизация (АSА 12) / 25 сообщений из 35, страница 1 из 2
28.12.2012, 19:50
    #38096612
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Простите за несколько наивный вопрос: должна ли АSА распараллелить такой запрос:

select functionX(), id from table1

(в table1 более 30000 записей)

Можно ли АСА заставить? ;)

Я склонен думать, что паралелить такой запрос не будет ни одна база (ни Оракл, ни МS, ни др). И для распараллеливания надо переписать запрос например используя напр. union. Типa

select functionX(), id from table1 where id <10000
union all
select functionX(), id from table1 where id >=10000 and id <20000
union all
select functionX(), id from table1 where id >=20000
...
Рейтинг: 0 / 0
28.12.2012, 22:52
    #38096728
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
чуть поправлюсь - оригиналный запрос типа

select functionX(id),id from table1

functionX исполняется долго (>5сек). На сервере 2 cpu, ASA бeрет 40+ treads. загрузка CPU <5%...
...
Рейтинг: 0 / 0
29.12.2012, 10:49
    #38096984
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1Я склонен думать, что паралелить такой запрос не будет ни одна база (ни Оракл, ни МS, ни др).
с чего бы это? сиквел вполне может такое изобразить - сканирование таблицы в несколько потоков
...
Рейтинг: 0 / 0
29.12.2012, 11:55
    #38097043
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
ну алгоритм параллельности эмпирический, поэтому лчше оптимизатору прозрачно намекнуть на это, чем надеяться на чудо.
так что делайте через union all и то не факт что оно всегда будет параллелиться.
...
Рейтинг: 0 / 0
29.12.2012, 14:55
    #38097254
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1,

Можно поподробнее про внутренности функции? Может там проблемы или есть возможность считать сразу для всех значений id?
Если механизм вычисления для каждого id однотипный, то проще написать отдельную процедуру, в которой вычислять значения сразу для всех нужных id (т.е. не на уровне каждой записи).
А потом уже из процедуры select
...
Рейтинг: 0 / 0
29.12.2012, 21:10
    #38097510
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
antandЕсли механизм вычисления для каждого id однотипный, то проще написать отдельную процедуру, в которой вычислять значения сразу для всех нужных id (т.е. не на уровне каждой записи).
А потом уже из процедуры selectА еще лучше будет сделать compute поле.
...
Рейтинг: 0 / 0
29.12.2012, 22:47
    #38097553
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
White Owl,

я в тайне надеюсь что там у автора в функции не 2х2 ,, а что то поинтереснее .. к тому же зависящее не только от исходной таблицы. Все же на каждое значение что то 5 сек происходит:)
...
Рейтинг: 0 / 0
03.01.2013, 12:11
    #38099165
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Ggg_oldну алгоритм параллельности эмпирический, поэтому лчше оптимизатору прозрачно намекнуть на это, чем надеяться на чудо.
.

А как намекнуть (в АСА)?
...
Рейтинг: 0 / 0
03.01.2013, 12:16
    #38099171
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
antand,

внутренности процедуры еще досконально не анализировал (процедура не моя). Но кода там немного есть - точно не 2Х2 :)

сделать view - да, думал о такой вожмозности. Пока хочы понять - то что нет распаралеливания гльк кода или АСЫ.

Или вообще - проблема лицензионного кода - типа лицензия не позволяет использовать больше цпу
...
Рейтинг: 0 / 0
03.01.2013, 13:18
    #38099240
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
под намекнуть я имел ввиду код с юнионами из вашего первого сообщения.
Но так как аса имеет автоматический механизм формирования планов, то в зависимости от текущей нагрузки сервера не факт что план будет параллельным всегда.
Почитайте здесь: http://dcx.sybase.com/index.html#1201/en/dbusage/parallelism.html
...
Рейтинг: 0 / 0
03.01.2013, 13:52
    #38099276
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Ggg_old,

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

select id, functio1(id) from table1
union all
select id, functio2(id) from table2

аса берет один цпу а потом когда идет fetching - загрузается другой цпу (на первом загрузка становится = 0)
functio2 - копия functio1 на таблице табле2

table2 копия таблицы table1
...
Рейтинг: 0 / 0
03.01.2013, 14:53
    #38099322
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Ggg_old,

когда смотрю план запроса - вижу, что селект разделяется на 4 паралельные ветви (я 'того и хочу).

select

DT DT DT DT

получается - АСА его распараллеливает , но почему-то выполняет только на одном цпу?
...
Рейтинг: 0 / 0
03.01.2013, 15:31
    #38099360
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
скажу сразу, я не спец по этому вопросу, но будет лучше, если вы запостите на форум полный план. Может у вас в параметрах сервере жестко задано ограничение в один поток на задачу. Надо смотреть.
...
Рейтинг: 0 / 0
03.01.2013, 15:34
    #38099367
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
и еще, что у вас за сервер, что за дисковый массив? может у вас один диск, так что толку от множества процессоров не будет, т.е. все заткнется на дисковых операциях.
и еще, вы читали инфу по ссылкечто я дал? ALTER DATABASE CALIBRATE PARALLEL READ делали?
...
Рейтинг: 0 / 0
03.01.2013, 16:00
    #38099383
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
ALTER DATABASE CALIBRATE PARALLEL READ делал, по ссылке - читал ;-)
...
Рейтинг: 0 / 0
03.01.2013, 16:03
    #38099386
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
запостить план попробую (не так просто - в реальном случае много процедур и сделать план не легко)
...
Рейтинг: 0 / 0
03.01.2013, 16:04
    #38099387
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
а вы запостите план тестового запроса, такого как вы приводили с юнионами.
...
Рейтинг: 0 / 0
03.01.2013, 17:08
    #38099435
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
чтобы исключить диски, я сделал другое.

create function emu () returns bigint
begin
declare i BIGINT ;
declare i2 BIGINT ;
SET i = -3000000;
WHILE i <= 3000000 LOOP
SET i = i + 1;
SET i2 = -3000000;
WHILE i <= 10000000 LOOP
SET i2 = i2 + 1;
END LOOP;
END LOOP;
return i
end

go

create function emu2 () returns bigint
begin
declare i BIGINT ;
declare i2 BIGINT ;
SET i = -3000000;
WHILE i <= 3000000 LOOP
SET i = i + 1;
SET i2 = -3000000;
WHILE i <= 10000000 LOOP
SET i2 = i2 + 1;
END LOOP;
END LOOP;
return i
end

go

далее. запустил

select emu()
union
select emu2();

загружен только один core ;-( может глупо - но хотелось бы загрузки 2 core...

план прицепил. так понимаю - оптимизатор параллелит, но выполнение идет на одном коре.

тоже если запустить
select emu()
select emu2()
go


аса запускается так:
dbsrv12 -gn80 -gtc 8 -gnl 80 -c 700 demo.db

демо.дб - демо база от аса 12.0.1
...
Рейтинг: 0 / 0
03.01.2013, 17:20
    #38099445
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
plan
...
Рейтинг: 0 / 0
03.01.2013, 17:24
    #38099448
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
попытка добавить план
...
Рейтинг: 0 / 0
03.01.2013, 17:41
    #38099454
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1,
...
Рейтинг: 0 / 0
03.01.2013, 17:42
    #38099455
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1,
...
Рейтинг: 0 / 0
03.01.2013, 17:42
    #38099456
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1,
...
Рейтинг: 0 / 0
03.01.2013, 17:42
    #38099457
Костя_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
Костя_1,
...
Рейтинг: 0 / 0
03.01.2013, 20:08
    #38099567
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простите чайника: параллелизация (АSА 12)
чему у вас равен параметр сервера: max_query_tasks http://dcx.sybase.com/index.html#1201/en/dbadmin/dboptions-s-5481804.html

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

Если же вам надо сделать именно то, что вы сделали, т.е. внутри хранимки запустить два независимых блока кода параллельно, то можно попробовать другой гарантированно работающий финт - запустить обе функции через trigger event. Тогда они сработают параллельно, и надо будет только засинхронизировать момент их окончания и потом слить. Вот эта статья талантливого и офигенного инженера Брека Картера вам будет архиинтересной и в тему: http://sqlanywhere.blogspot.com/2012/12/intra-procedure-parallelism_5.html
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Простите чайника: параллелизация (АSА 12) / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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