|
|
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
Я люблю 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 - помогает слабо... Что еще можно сделать в плане "математики" для ускорения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2003, 14:01 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
Для такого тупого запроса 4 секунды это ж здорово!!!! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2003, 14:30 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
говорю же быстрее "сортировать" хеш-таблицу...как в лежащей рядом проге на с++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2003, 14:32 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 19:30 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
Я думаю при OPTIMIZER_MODE = ALL_ROWS даже если статистики не будет - возможен хэш-джойн. И попробуй установить db_file_multiblock_read_count = 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 09:51 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
к сожалению план это не меняет... и соответсвенно результат тоже...(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 09:56 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
У МЕНЯ НИКАКОЙ hash сортировки в плане не выходят... даже при ALL_ROWS Может Ваши планы покажете? я его сохраню и натравлю.... db_file_multiblock_read_count = 4 - 128 не помогает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 10:37 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
дай скрипты, а то самому лениво... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 11:24 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
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 / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 11:43 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
чего у меня вышло... (хотя вставились ессно не все строки, индекс то уникальный) 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) ........... ... и поскакал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 12:38 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
1 0 SORT (UNIQUE) (Cost=179732 Card=15253504 Bytes=549126144) КЛЮЧЕВАЯ ФРАЗА....У МЕНЯ ТОЖЕ САМОЕ....ТУТ ТУТ ПРОИСХОДИТЬ СОРТИРОВКА ЗНАЧЕНИЙ(sort merge join)...А МОЖНО СЕТЬ ПРОСТО СОРТИРОВАТЬ ХЕШИ (sort HASH join) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 13:36 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
Может я чего-то недопонимаю, но ни одного упоминания об merge join я не вижу... SORT UNIQUE Operation sorting a set of rows to eliminate duplicates ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 14:00 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
а по какому алгоритму он отбрасывает....ты читал? SORT MERGE JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 14:05 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
Можешь дать ссылку на доку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 14:56 |
|
||
|
Тонкая настройка UNION и UNION ALL
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 18:37 |
|
||
|
|

start [/forum/search_topic.php?author=GUEST002&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
234ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 444ms |
| total: | 787ms |

| 0 / 0 |
