|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Простите за несколько наивный вопрос: должна ли А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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 19:50 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
чуть поправлюсь - оригиналный запрос типа select functionX(id),id from table1 functionX исполняется долго (>5сек). На сервере 2 cpu, ASA бeрет 40+ treads. загрузка CPU <5%... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2012, 22:52 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1Я склонен думать, что паралелить такой запрос не будет ни одна база (ни Оракл, ни МS, ни др). с чего бы это? сиквел вполне может такое изобразить - сканирование таблицы в несколько потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 10:49 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
ну алгоритм параллельности эмпирический, поэтому лчше оптимизатору прозрачно намекнуть на это, чем надеяться на чудо. так что делайте через union all и то не факт что оно всегда будет параллелиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 11:55 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1, Можно поподробнее про внутренности функции? Может там проблемы или есть возможность считать сразу для всех значений id? Если механизм вычисления для каждого id однотипный, то проще написать отдельную процедуру, в которой вычислять значения сразу для всех нужных id (т.е. не на уровне каждой записи). А потом уже из процедуры select ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 14:55 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
antandЕсли механизм вычисления для каждого id однотипный, то проще написать отдельную процедуру, в которой вычислять значения сразу для всех нужных id (т.е. не на уровне каждой записи). А потом уже из процедуры selectА еще лучше будет сделать compute поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 21:10 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
White Owl, я в тайне надеюсь что там у автора в функции не 2х2 ,, а что то поинтереснее .. к тому же зависящее не только от исходной таблицы. Все же на каждое значение что то 5 сек происходит:) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2012, 22:47 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Ggg_oldну алгоритм параллельности эмпирический, поэтому лчше оптимизатору прозрачно намекнуть на это, чем надеяться на чудо. . А как намекнуть (в АСА)? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 12:11 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
antand, внутренности процедуры еще досконально не анализировал (процедура не моя). Но кода там немного есть - точно не 2Х2 :) сделать view - да, думал о такой вожмозности. Пока хочы понять - то что нет распаралеливания гльк кода или АСЫ. Или вообще - проблема лицензионного кода - типа лицензия не позволяет использовать больше цпу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 12:16 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
под намекнуть я имел ввиду код с юнионами из вашего первого сообщения. Но так как аса имеет автоматический механизм формирования планов, то в зависимости от текущей нагрузки сервера не факт что план будет параллельным всегда. Почитайте здесь: http://dcx.sybase.com/index.html#1201/en/dbusage/parallelism.html ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 13:18 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Ggg_old, интерестно то, что я не могу (может тупой :-)) написать что-то искуственное для того что бы увидеть загруженными несколько цпу.... не получается... написал что-то типа select id, functio1(id) from table1 union all select id, functio2(id) from table2 аса берет один цпу а потом когда идет fetching - загрузается другой цпу (на первом загрузка становится = 0) functio2 - копия functio1 на таблице табле2 table2 копия таблицы table1 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 13:52 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Ggg_old, когда смотрю план запроса - вижу, что селект разделяется на 4 паралельные ветви (я 'того и хочу). select DT DT DT DT получается - АСА его распараллеливает , но почему-то выполняет только на одном цпу? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 14:53 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
скажу сразу, я не спец по этому вопросу, но будет лучше, если вы запостите на форум полный план. Может у вас в параметрах сервере жестко задано ограничение в один поток на задачу. Надо смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 15:31 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
и еще, что у вас за сервер, что за дисковый массив? может у вас один диск, так что толку от множества процессоров не будет, т.е. все заткнется на дисковых операциях. и еще, вы читали инфу по ссылкечто я дал? ALTER DATABASE CALIBRATE PARALLEL READ делали? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 15:34 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
ALTER DATABASE CALIBRATE PARALLEL READ делал, по ссылке - читал ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 16:00 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
запостить план попробую (не так просто - в реальном случае много процедур и сделать план не легко) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 16:03 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
а вы запостите план тестового запроса, такого как вы приводили с юнионами. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 16:04 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
чтобы исключить диски, я сделал другое. 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:08 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
plan ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:20 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
попытка добавить план ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:24 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1, ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:41 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1, ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:42 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1, ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:42 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Костя_1, ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 17:42 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
чему у вас равен параметр сервера: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 20:08 |
|
|
start [/forum/topic.php?fid=55&fpage=13&tid=2010025]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 186ms |
0 / 0 |