powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Каким образом выполяется count(*) и как его можно потимизировать
25 сообщений из 57, страница 2 из 3
Каким образом выполяется count(*) и как его можно потимизировать
    #39556487
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby Z.А ты вы...=> А то вы...
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39556492
only if you have
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtendernb: это не параллельный дмл!так откуда ему взяться.
vldbA DML statement can be parallelized only if you have explicitly enabled parallel DML in the session or in the SQL statement.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39556594
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby Z.AlexFF__|пропущено...

Ты хочешь, чтобы я за тебя проверил?
Мне не надо, я знаю как это работает )
А вот ты с помощью тестов мог бы увидеть, как форсирование parallel dml позволяет системе самой определить DOP на твоей "непараллеливаемой" таблице с ALTER TABLE TAB NOPARALLEL;
Если конечно система решит параллелить, чего, впрочем, не трудно добиться.Ну молодец, что знаешь. Хотя тогда должен бы знать, что тут и проверять нечего и тесты никакие не нужны, и форсирование parallel dml ну никакой совершенно роли не играет в этом случае. Или я не понял что "это" ты знаешь как работает?
Ок, потрачу пару минут, а то малограмотные персонажи уже задолбали вводить всех в заблуждение.

Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
SQL> select name, value from v$ses_optimizer_env where sid = sys_context('USERENV', 'SID') and name = 'parallel_query_mode'
NAME                                     VALUE
---------------------------------------- -------------------------
parallel_query_mode                      enabled


create table TAB parallel 4 as select * from dba_objects;


select count(*) from TAB;

Plan hash value: 2670378475
---------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | E-Rows | Cost (%CPU)| E-Time   |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |        |  2352 (100)|          |        |      |            |
|   1 |  SORT AGGREGATE        |          |      1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |          |        |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |      1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |      1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          |  84000 |  2352   (0)| 00:00:25 |  Q1,00 | PCWC |            |
|*  6 |       TABLE ACCESS FULL| TAB      |  84000 |  2352   (0)| 00:00:25 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------


ALTER TABLE TAB NOPARALLEL;

select count(*)  from TAB;

Plan hash value: 1464076394
--------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows | Cost (%CPU)| E-Time   |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |        |   408 (100)|          |
|   1 |  SORT AGGREGATE    |      |      1 |            |          |
|   2 |   TABLE ACCESS FULL| TAB  |  84000 |   408   (1)| 00:00:05 |
--------------------------------------------------------------------


alter session force parallel query;

select count(*)   from TAB;

Plan hash value: 2670378475
---------------------------------------------------------------------------------------------------------
| Id  | Operation              | Name     | E-Rows | Cost (%CPU)| E-Time   |    TQ  |IN-OUT| PQ Distrib |
---------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT       |          |        |   588 (100)|          |        |      |            |
|   1 |  SORT AGGREGATE        |          |      1 |            |          |        |      |            |
|   2 |   PX COORDINATOR       |          |        |            |          |        |      |            |
|   3 |    PX SEND QC (RANDOM) | :TQ10000 |      1 |            |          |  Q1,00 | P->S | QC (RAND)  |
|   4 |     SORT AGGREGATE     |          |      1 |            |          |  Q1,00 | PCWP |            |
|   5 |      PX BLOCK ITERATOR |          |  84000 |   588   (0)| 00:00:07 |  Q1,00 | PCWC |            |
|*  6 |       TABLE ACCESS FULL| TAB      |  84000 |   588   (0)| 00:00:07 |  Q1,00 | PCWP |            |
---------------------------------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39556678
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|Ок, потрачу пару минут, а то малограмотные персонажи уже задолбали вводить всех в заблуждение.

на скоко "потоков" распараллелил из плана можно узнать?

.....
stax
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39556689
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxAlexFF__|Ок, потрачу пару минут, а то малограмотные персонажи уже задолбали вводить всех в заблуждение.

на скоко "потоков" распараллелил из плана можно узнать?

.....
stax
Система сама решает, на моей БД
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select sql_id, px_servers_executions from v$sql where sql_text like 'select count(*)   from TAB%'
  2  /
SQL_ID        PX_SERVERS_EXECUTIONS
------------- ---------------------
ctf6wxn6uxyqk                    16

SQL> 
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39556713
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|Staxпропущено...

на скоко "потоков" распараллелил из плана можно узнать?

.....
stax
Система сама решает, на моей БД
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select sql_id, px_servers_executions from v$sql where sql_text like 'select count(*)   from TAB%'
  2  /
SQL_ID        PX_SERVERS_EXECUTIONS
------------- ---------------------
ctf6wxn6uxyqk                    16

SQL> 


спасибо, понял где смотреть

.....
stax
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39557961
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|Bobby Z.пропущено...
Ну молодец, что знаешь. Хотя тогда должен бы знать, что тут и проверять нечего и тесты никакие не нужны, и форсирование parallel dml ну никакой совершенно роли не играет в этом случае. Или я не понял что "это" ты знаешь как работает?
Ок, потрачу пару минут, а то малограмотные персонажи уже задолбали вводить всех в заблуждение.
Код: plsql
1.
планы почиканы за ненадобностью


Ой, как я люблю вот таких напыщенных самонадеянных всезнаек, круче которых только варёные яйца. :) Ну исполать те, многограмотный ты наш Капитан Очевидность, показал нам, неучам, что делает force parallel, что б мы делали вообще без тебя, Кэп... Теперь погугли event 10384, level 16384 - может откроешь для себя, что план выполнения запроса не всегда соответствует тому, как он на самом деле выполняется (другими словами, карта местности не есть сама местность).

Хотя, учитывая вот это: AlexFF__|staxна скоко "потоков" распараллелил из плана можно узнать?
Система сама решает, на моей БД ... 16непохоже, чтоб ты на самом деле знал, как "это" работает, иначе знал бы, хотя бы в простых случаях, как "система сама решает". Ничего не зная о вот этой твоей БД, рискну предположить, что она не кластеризована, parallel_degree_policy=manual, resource manager не активен, остальные parallel* параметры по умолчанию. Тогда она, скорее всего, бегает на 8-ми ядрах (cpu_count=8). Угадал?

И, кстати, запланированный DOP можно из плана узнать, из V$SQL_PLAN.OTHER_XML. V$SQL.PX_SERVERS_EXECUTIONS немного не про то (точнее, вообще не про то).
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558048
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobby Z.И, кстати, запланированный DOP можно из плана узнать, из V$SQL_PLAN.OTHER_XML. V$SQL.PX_SERVERS_EXECUTIONS немного не про то (точнее, вообще не про то).
И опять приходится поправлять малограмотных персонажей.
Именно потому, что даже параллельный план может выполняться в один поток (например выбран весь parallel_max_servers), реальное число потоков пишется в V$SQL.PX_SERVERS_EXECUTIONS.
P.S. Ты не стесняйся, пиши еще, если что непонятно =)
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558523
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|реальное число потоков пишется в V$SQL.PX_SERVERS_EXECUTIONS.
Лезу в v$px_session, вижу degree=32, req_degree=32.
Смотрю v$sql.px_server_executions - 31.

Прокомментируете?
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558527
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousAlexFF__|реальное число потоков пишется в V$SQL.PX_SERVERS_EXECUTIONS.
Лезу в v$px_session, вижу degree=32, req_degree=32.
Смотрю v$sql.px_server_executions - 31.
А с этим как быть?
Лезу в v$px_session, вижу degree=16, req_degree=16.
Смотрю v$sql.px_server_executions = 7004

Ы?
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558529
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousА с этим как быть?А что неясно?RTFMTotal number of executions performed by parallel execution servers (0 when the statement has never been executed in parallel)Алекса слегка занесло.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558544
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Elic]andrey_anonymousА с этим как быть?А что неясно?RTFM
Да все как бы ясно.
Не сдержался :)
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558692
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicАлекса слегка занесло.Слегка? А мне сослепу показалось, что он вообще поворота не заметил... :D
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558693
Bobby Z.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|P.S. Ты не стесняйся, пиши еще, если что непонятно =)Да ладно, чо уж, ты и так достаточно наобъяснял, чтоб я к тебе больше не прислушивался ещё лет несколько пока ты опыта набираешься, спасибо.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558696
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
да всем уже тут хватит чепуху писать...

Staxна скоко "потоков" распараллелил из плана можно узнать?лучше всего смотреть в отчет RTSM(real time sql monitor'a), т.е. px_servers_requested,px_servers_allocated,px_maxdop в v$sql_monitor (параллельные выполнения всегда туда попадают без учета "_sqlmon_threshold") там и причина даунгрейда будет, а при отладке/дебаге - в v$pq_sesstat или если совсем глубоко то врубать px_trace

1. про v$sql_plan.other_xml - это тупо для плана этого чайлда, а реальное выделение слейвов происходит в рантайме, соответственно один и тот же чайлд мог в разное время выполняться с разными доп (не будем усложнять про v$sql_plan_statistics_all.last_xxx + statistics_level, так как это все равно не работает с реально параллельными планами, т.к. туда попадают статистики координатора)
2. про v$sql.px_servers_executions - andrey_anonymous уже тоже подсказал
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558752
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderлучше всего смотреть в отчет RTSM(real time sql monitor'a)
Это все хорошо, вот только монитор не всегда включен по умолчанию, да и отчеты доступны не долго.
А вот что однократный запрос может писать неверные значения в v$sql.px_servers_executions, это интересно.
Если ты или andrey_anonymous приведете кейс - буду благодарен.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558763
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexFF__|,

уровень параллельности потом можно узнать из dba_hist_active_sess_history = px_flags/2097152
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558768
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pihelAlexFF__|,
уровень параллельности потом можно узнать из dba_hist_active_sess_history = px_flags/2097152
Ты точно читал мой вопрос?
AlexFF__|А вот что однократный запрос может писать неверные значения в v$sql.px_servers_executions, это интересно.
Если ты или andrey_anonymous приведете кейс - буду благодарен.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558849
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__| однократный запросну начались прыжки в стороны...

AlexFF__|неверные значения в v$sql.px_servers_executionsзначит ты так и не понял, про что тебе намекали....
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558855
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderAlexFF__| однократный запросну начались прыжки в стороны...
AlexFF__|Ок, потрачу пару минут, а то малограмотные персонажи уже задолбали вводить всех в заблуждение.
...
Код: sql
1.
2.
3.
4.
5.
select count(*) from TAB;
...
select count(*)  from TAB;
...
select count(*)   from TAB;



xtenderзначит ты так и не понял, про что тебе намекали....
Я начинаю подозревать тебя в пустословии.
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558875
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|,

ох, тяжкий ты человек... еще раз: v$sql агрегирует для чайлда... у тебя кстати в примере их было 3, хотя и два из них были с одинаковыми планами. И если ты еще не сталкивался, то иногда оракл для одного параллельного выполнения создает несколько чайлдов...

AlexFF__|Ок, потрачу пару минут, ак чему это было я вообще не понимаю...
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558878
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
я бы еще понял, если бы ты сразу четко добавил "для однократного выполнения" когда советовал, но сейчас это реально выглядит как прыжки в сторону...
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558889
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|pihelAlexFF__|,
уровень параллельности потом можно узнать из dba_hist_active_sess_history = px_flags/2097152он то тебе чем не угодил? уж из шаред пула твой одиночный запуск раньше вымоет чем из ash... только чуть правильнее с trunc: https://www.freelists.org/post/oracle-l/detect-parallel-queries-that-have-been-serialized,3
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558905
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderк чему это было я вообще не понимаю...
Все, что я сделал в топике, это поправил:
Bobby Z.
Код: plsql
1.
ALTER TABLE TAB NOPARALLEL;

приведёт к тому, что запросы без хинтов будут выполняться последовательно.
Потом привел тест со специально разными sql_id:
Код: sql
1.
2.
3.
4.
5.
select count(*) from TAB;
...
select count(*)  from TAB;
...
select count(*)   from TAB;


И на вопрос, как я в этих тестах узнавал реальные параллели, ответил про px_servers_executions.

И в ответ от вас я узнал:
что значения в v$sql агрегируются
существует sql monitor
ash попадает в историю
Ну ок, полезная информация, только зачем она здесь?
...
Рейтинг: 0 / 0
Каким образом выполяется count(*) и как его можно потимизировать
    #39558915
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AlexFF__|,

ладно-ладно... брейк
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Каким образом выполяется count(*) и как его можно потимизировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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