|
Простите чайника: параллелизация (А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 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
и еще, из плана видно, что у вас один физический процессор и 8логических, навенео 8ми ядреный процессор? Странным кажется, что у вас минимальное кол-во потоков - 80, это многовато как мне кажется для одного процессора (но это к проблеме напрямую не относится, а вообще - замечание для настройки сервера на будущее). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 20:10 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
max_query_task пробовал и 0 и 8 и другое. разницы нет. также - не заметил разницы от смены -gnl и от update до последнего EBF я сужу по картинке - кажется, что оптимайзер параллелит запрос на 2 потока - "DUMMY" кстати, ради интереса попробовал запустить свои процедуры на IQ 15x. IQ стоит на машине с 4 core. когда выполняется select emu() union сelect emu2() загружаются все 4 cor'a ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 00:54 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
костя, во здесь: http://dcx.sybase.com/index.html#1201/en/dbusage/queryopt-s-4716396.html Написано: Following is a list of circumstances in which a query can not take advantage of parallelism, either at optimization or execution time: the server computer does not have multiple processors t he server computer is not licensed to use multiple processors. You can check this by looking at the NumLogicalProcessorsUsed server property. However, note that hyperthreaded processors are not counted for intra-query parallelism so you must divide the value of NumLogicalProcessorsUsed by two if the computer is hyperthreaded. the max_query_tasks option is set to 1 the priority option is set to background the statement containing the query is not a SELECT statement the value of ActiveReq has been greater than, or equal to, the value of NumLogicalProcessorsUsed at any time in the recent past (divide the number of processors by two if the computer is hyperthreaded) there are not enough available tasks. а у тебя как-раз один процессор и 8 логических процессоров, так что внутренний параллелизм именно на том серваке не катит. Так что либо пошаманить с лицензией, либо сделать как написано у брека картера в статье. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 01:50 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
хотя не, могу ошибаться. так что за процессор стоит на сервере? И еще, там нет в плане никакой параллельности. У параллельности другие индикации в плане: http://dcx.sybase.com/index.html#1201/en/dbusage/abbreviations-plan-queryopt.html попробуй еще по-быстрому поставить максимальный уровень оптимизации в запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 01:56 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Ggg_old, ну спасибо Ggg :-) ;-) ;-) иду проверять! есть что! у меня просто 3 сервера 1: мой ноут 2цпу по 4 кора. 2: ремоте vmvare 4 core/цпу 3: real server - вижу 32 кора нда... надо наверное начать с вопроса ь почему аса видит 1 physical cpu with 8 cores вместо 2 physical with 4cores ?..... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 02:24 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
Breck Cartner вкинул классный свлект для проверки использует ли АСА все коры (правильна ли лицензия): SELECT COUNT_BIG(*) FROM SYSCOLUMN AS A CROSS JOIN SYSCOLUMN AS B CROSS JOIN SYSCOLUMN AS C; У меня загружаются все коры. значит надо искать как распараллелить исходный запрос... видимо union распараллелить не помогает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 10:40 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
а какой план у этого запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 11:41 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 11:52 |
|
Простите чайника: параллелизация (АSА 12)
|
|||
---|---|---|---|
#18+
ага, таки параллелит. Может тогда уровень оптимизации попробовать втопить до максимума? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2013, 12:01 |
|
|
start [/forum/topic.php?all=1&fid=55&tid=2010025]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 475ms |
0 / 0 |