powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тонкая настройка UNION и UNION ALL
15 сообщений из 15, страница 1 из 1
Тонкая настройка UNION и UNION ALL
    #32118294
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я люблю Oracle. Товарищ любит MSSQL.
Поставила я на старую тачку Personal Oracle 8i. Он на нее же MSSQL.

Закачали мы одну и ту же таблу (1000 СТРОК) с одним длинным varchar2.
и придумали тупейший тест...

1. SELECT B FROM A
UNION
SELECT B FROM A
UNION | и так 100 раз
SELECT B FROM A |

2. SELECT B FROM A
UNION ALL
SELECT B FROM A
UNION ALL | и так 100 раз
SELECT B FROM A |

Первый тест мне дал результат порядка 4 секунд.
Игрища с
sort_area_size = 33554432
sort_area_retained_size = 524288
sort_multiblock_read_count=4096
дали результат.
Смотрим план - 100 fullscanов объединяются и потом все это SORT MERGE c
выбрасыванием дубликатов...
Мне кажется, что это ни совсем правильно... Имхо правльнее делать в
конце что-то наподобии
Sort Hash Unique.... то есть сортировать не сами данные...а их хеши..
Как заставить оптимизатор это делать? Нашла похожий недокументируемы
параметр _sortmerge_inequality_join_off
turns off sort-merge join on inequality
но тут не помогает и не совсем понятен.

Второй тест мне дал результат порядка 20 секунд.
Как я понимаю единственный параметр влияющий на скорость ОБЪЕДИНЕНИЯ
ПРИ UNION ALL -
db_file_multiblock_read_count
УВЕЛИЧИВАЛА ДО 64 - помогает слабо...
Что еще можно сделать в плане "математики" для ускорения?
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32118336
Divan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для такого тупого запроса 4 секунды это ж здорово!!!!
)
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32118338
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
говорю же быстрее "сортировать" хеш-таблицу...как в лежащей рядом проге на с++
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119686
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voobsche neploho by ANALYZE TABLE sdelat i index po polu B postroit.
(esly eto ne sdelano)

krome togo, ispolzuya alter session ustanovit OPTIMIZER_MODE = ALL_ROWS
(eto moget zastavit optimizator ispolzovat HASH JOIN metod kak prioritetniy)
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119878
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю при OPTIMIZER_MODE = ALL_ROWS даже если статистики не будет - возможен хэш-джойн. И попробуй установить db_file_multiblock_read_count = 4
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119882
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению план это не меняет...
и соответсвенно результат тоже...((
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119929
У МЕНЯ НИКАКОЙ hash сортировки в плане не выходят...
даже при ALL_ROWS
Может Ваши планы покажете? я его сохраню и натравлю....

db_file_multiblock_read_count = 4 - 128 не помогает
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119969
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дай скрипты, а то самому лениво...
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32119993
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DROP TABLE a
/

CREATE TABLE a
(b VARCHAR2(100))
PCTFREE 0
PCTUSED 40
INITRANS 1
MAXTRANS 255
/

CREATE UNIQUE INDEX i_a_b ON a
(
b ASC
)
PCTFREE 0
INITRANS 2
MAXTRANS 255
/

INSERT INTO a
(B)
VALUES
('E6C9B203-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B204-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B205-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B206-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B207-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B208-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B209-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20A-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20B-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20C-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20D-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20E-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20F-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B210-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B211-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B212-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B213-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B214-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B215-4FD0-11D7-9AF1-008048EE5877')
/

INSERT INTO a
(B)
VALUES
('E6C9B203-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B204-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B205-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B206-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B207-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B208-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B209-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20A-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20B-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20C-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20D-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20E-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B20F-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B210-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B211-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B212-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B213-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B214-4FD0-11D7-9AF1-008048EE5877')
/
INSERT INTO a
(B)
VALUES
('E6C9B215-4FD0-11D7-9AF1-008048EE5877')
/

SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
UNION SELECT B FROM A
/
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120047
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего у меня вышло... (хотя вставились ессно не все строки, индекс то уникальный)

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=179732 Card=15253504
Bytes=549126144)

1 0 SORT (UNIQUE) (Cost=179732 Card=15253504 Bytes=549126144)
2 1 UNION-ALL
3 2 TABLE ACCESS (FULL) OF 'A' (Cost=86 Card=155648 Bytes=
5603328)

4 2 TABLE ACCESS (FULL) OF 'A' (Cost=86 Card=155648 Bytes=
5603328)
...........
... и поскакал...
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120124
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 0 SORT (UNIQUE) (Cost=179732 Card=15253504 Bytes=549126144)

КЛЮЧЕВАЯ ФРАЗА....У МЕНЯ ТОЖЕ САМОЕ....ТУТ ТУТ ПРОИСХОДИТЬ СОРТИРОВКА ЗНАЧЕНИЙ(sort merge join)...А МОЖНО СЕТЬ ПРОСТО СОРТИРОВАТЬ ХЕШИ (sort HASH join)
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120145
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я чего-то недопонимаю, но ни одного упоминания об merge join я не вижу...
SORT UNIQUE Operation sorting a set of rows to eliminate duplicates
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120154
Памела
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а по какому алгоритму он отбрасывает....ты читал?
SORT MERGE JOIN
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120215
Um
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь дать ссылку на доку?
...
Рейтинг: 0 / 0
Тонкая настройка UNION и UNION ALL
    #32120480
ShgGena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Pamella

>>> КЛЮЧЕВАЯ ФРАЗА....У МЕНЯ ТОЖЕ САМОЕ....ТУТ ТУТ ПРОИСХОДИТЬ СОРТИРОВКА ЗНАЧЕНИЙ(sort merge join)...А МОЖНО СЕТЬ ПРОСТО СОРТИРОВАТЬ ХЕШИ (sort HASH join)

sort HASH join - ne suschestvuet v Oracle
NOTE - i veroyatno ne suschestvuet v prirode poskolku eto 2(DBA) raznih algoritmicheskih etapa
1) hash join
2) sort
heshirovanite - kak algoritm - ne predusmatrivaet uporadochennost a skoree naoborot,
pridusmatrivaet psevdosluchaynost

v to vremya kak SORT-MERGE (sortirovka sliyaniem) vipolnyaet etu rabotu za 1(ODIN) etap.

Mne kagetsya nado zakryt temu.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тонкая настройка UNION и UNION ALL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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