powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Простите чайника: параллелизация (АSА 12)
35 сообщений из 35, показаны все 2 страниц
Простите чайника: параллелизация (АSА 12)
    #38096612
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за несколько наивный вопрос: должна ли А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
Простите чайника: параллелизация (АSА 12)
    #38096728
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чуть поправлюсь - оригиналный запрос типа

select functionX(id),id from table1

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

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

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

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

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

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

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

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

select

DT DT DT DT

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

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
Простите чайника: параллелизация (АSА 12)
    #38099445
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
plan
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099448
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попытка добавить план
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099454
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Костя_1,
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099455
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Костя_1,
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099456
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Костя_1,
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099457
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Костя_1,
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099567
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чему у вас равен параметр сервера: 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
Простите чайника: параллелизация (АSА 12)
    #38099570
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще, из плана видно, что у вас один физический процессор и 8логических, навенео 8ми ядреный процессор? Странным кажется, что у вас минимальное кол-во потоков - 80, это многовато как мне кажется для одного процессора (но это к проблеме напрямую не относится, а вообще - замечание для настройки сервера на будущее).
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099763
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
max_query_task пробовал и 0 и 8 и другое. разницы нет. также - не заметил разницы от смены -gnl и от update до последнего EBF

я сужу по картинке - кажется, что оптимайзер параллелит запрос на 2 потока - "DUMMY"

кстати, ради интереса попробовал запустить свои процедуры на IQ 15x. IQ стоит на машине с 4 core. когда выполняется

select emu()
union
сelect emu2()

загружаются все 4 cor'a
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099796
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
костя, во здесь: 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 логических процессоров, так что внутренний параллелизм именно на том серваке не катит. Так что либо пошаманить с лицензией, либо сделать как написано у брека картера в статье.
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099798
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя не, могу ошибаться. так что за процессор стоит на сервере?
И еще, там нет в плане никакой параллельности.
У параллельности другие индикации в плане: http://dcx.sybase.com/index.html#1201/en/dbusage/abbreviations-plan-queryopt.html
попробуй еще по-быстрому поставить максимальный уровень оптимизации в запросе.
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099811
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 ?.....
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099865
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Breck Cartner вкинул классный свлект для проверки использует ли АСА все коры (правильна ли лицензия):

SELECT COUNT_BIG(*) FROM SYSCOLUMN AS A CROSS JOIN SYSCOLUMN AS B CROSS JOIN SYSCOLUMN AS C;

У меня загружаются все коры. значит надо искать как распараллелить исходный запрос... видимо union распараллелить не помогает
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099886
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какой план у этого запроса?
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099893
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38099898
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, таки параллелит. Может тогда уровень оптимизации попробовать втопить до максимума?
...
Рейтинг: 0 / 0
Простите чайника: параллелизация (АSА 12)
    #38100112
Костя_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

хочется сказать "Ой-ли". ;) сканирование ок, но здесь сканирование с "тяжелой/не понятной" функцией.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Простите чайника: параллелизация (АSА 12)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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