powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избежать временных таблиц
103 сообщений из 103, показаны все 5 страниц
Избежать временных таблиц
    #38778320
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Есть запрос вида:
Код: sql
1.
2.
3.
4.
5.
select t1.*
from sp_tree1(:parent_tree1) tr1
       sp_tree2(:parent_tree2) tr2,
       table1 t1
where (t1.group_id1 = tr1.group_id1) and (t1.group_id2 = tr2.group_id1)



Запрос тупит т.к. sp_tree1 и sp_tree2 большие деревья. Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос:
Код: sql
1.
2.
3.
4.
5.
select t1.*
from tmp_tree1 tr1,
       tmp_tree2 tr2,
       table1 t1
where (t1.group_id1 = tr1.group_id) and (t1.group_id2 = tr2.group_id)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778323
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос:
Вместо решения обычно принято озвучивать задачу...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778325
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778327
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778333
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

для начала перепиши на нормальный ANSI JOIN
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778342
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПосоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
Показать пока нет возможности, основная проблема в том, что sp_tree1 и sp_tree2 в первом варианте sql-запросы вызываются часто и соответственно они части внутри дергают таблицы tree1 и tree2, структура которых такая:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE TREE1 (
    GROUP_ID    INTEGER NOT NULL,
    PARENT         INTEGER,
    NAME  VARCHAR(64),
    SEQUENCE_ID    INTEGER NOT NULL,
    DESCRIPTION    VARCHAR(4096)
);

ALTER TABLE TREE1 ADD CONSTRAINT PK_TREE1 PRIMARY KEY (GROUP_ID);

ALTER TABLE TREE1 ADD CONSTRAINT FK_TREE1 FOREIGN KEY (PARENT) REFERENCES TREE1 (GROUP_ID) ON DELETE CASCADE ON UPDATE CASCADE;
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778348
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисдля начала перепиши на нормальный ANSI JOIN
в смысле так?:

Код: sql
1.
2.
3.
4.
select t1.*
from sp_tree1(:parent_tree1) tr1
       join table1 t1 (t1.group_id1 = tr1.group_id1)
       join sp_tree2(:parent_tree2) tr2 (t1.group_id2 = tr2.group_id1)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778351
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012, сколько записей в tree1, tree2?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778354
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanfedorov2012, сколько записей в tree1, tree2?
в среднем около 4 тыс.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778362
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012wadmanfedorov2012, сколько записей в tree1, tree2?
в среднем около 4 тыс.
Всего? И сколько мс запрос выполняется?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778367
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanfedorov2012пропущено...

в среднем около 4 тыс.
Всего? И сколько мс запрос выполняется?
несколько минут, просто в table1 несколько миллионов
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778370
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778374
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета
Потому что планы строятся разные, потому и просил планы и статистику...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778439
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПотому что планы строятся разные, потому и просил планы и статистику...
Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778441
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012не хотелось бы прибегать к временным таблицам
Альтернативой является перепроектирование базы. Ты готов на это пойти?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778443
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012wadmanПотому что планы строятся разные, потому и просил планы и статистику...
Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения?
Третий раз: для ответа на этот вопрос недостаточно информации.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778473
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Симонов Денисдля начала перепиши на нормальный ANSI JOIN
в смысле так?:

Код: sql
1.
2.
3.
4.
select t1.*
from sp_tree1(:parent_tree1) tr1
       join table1 t1 (t1.group_id1 = tr1.group_id1)
       join sp_tree2(:parent_tree2) tr2 (t1.group_id2 = tr2.group_id1)



нет, ключевое слово ON потерял. Мог бы и проверить сначала.

Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2 = tr2.group_id1



План запроса где?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778493
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2 = tr2.group_id1




вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778494
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovАльтернативой является перепроектирование базы. Ты готов на это пойти?..
Нет, а в чем суть перепроектирования бы заключалась - внедрять view?
wadmanТретий раз: для ответа на этот вопрос недостаточно информации.
Т.е.вы намекаете на то, что средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) увеличить скорость не получиться
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778500
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????
нет, конечно же
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778501
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????Если в плане будет MERGE - да
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778503
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я на что намекаю... Или пусть программист к обсуждению подключится.
wadmanfedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778506
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если добавить в дерево порядок обхода (и индексы на эти поля, понятно дело), то можно без хранимых процедур:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select t1.*
from TREE1 tp1
join tree1 tc1 on tc1.nleft between tp1.nleft and tp1.nright
join tree1 tp2 on tp2.id = :parent_tree2
join tree1 tc2 on tc2.nleft between tp2.nleft and tp2.nright
join table1 t1 on t1.group_id1 = tc1.group_id1 and t1.group_id2 = tc2.group_id1
where
  tp1.id = :parent_tree1 and
  1=1
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Нет, а в чем суть перепроектирования бы заключалась - внедрять view?

Изменение формата хранения деревьев, более тщательное выделение сущностей, нормализация.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778526
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mСимонов Денис
Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2 = tr2.group_id1




вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????

зависит от плана запроса. Поэтому и спрашиваю. Хотя даже с MERGE здесь будет жопа.

ибо

fedorov2012просто в table1 несколько миллионов
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778541
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanВот я на что намекаю
Вот план, для запроса:

Код: sql
1.
2.
3.
4.
select t1.*
from sp_tree1(:parent_tree1) tr1
       join table1 t1 (t1.group_id = tr1.group_id)
PLAN SORT (JOIN (TREE1 INDEX (PK_TREE1), SP_TREE1 NATURAL)(TR INDEX (FK_TREE1))(T1 INDEX (FK_TABLE1)))
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778545
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее запрос такой:
Код: sql
1.
2.
3.
select t1.*
from table1 t1
       join sp_tree1(:parent_tree1) tr1 on (t1.group_id = tr1.group_id)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778550
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

план не того запроса приводишь. Этот запрос наверняка быстро выполняется
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778560
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
план не того запроса приводишь. Этот запрос наверняка быстро выполняется
да, быстро - но он работает медленнее если написать так:

Код: sql
1.
2.
3.
4.
5.
select t1.*
from table1 t1
       join tmp_tree1 tr1 on (t1.group_id = tr1.group_id)

PLAN SORT (JOIN (TR1 NATURAL, T1 INDEX (FK_TABLE1)))
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778562
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

приведи план вот этого запроса

Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2 = tr2.group_id1
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778564
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e
Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778566
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
приведи план вот этого запроса

нет возможности, мой вывод применения sp_tree постом выше
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778567
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

ты достал. Тебе говорят что может в определённых условиях. Где план?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778571
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012он работает медленнее если написать так:
Врёшь. Приведённый запрос не может давать такой план: в нём нет места сортировке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778574
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТебе говорят что может в определённых условиях
спокойствие, я понял что FB может,но видать в простых случаях - на более сложных запросах оптимизатор слабоват
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778575
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать
для оптимизатора процедура всегда "черный ящик", просто потому что там может быть условное ветвление, туча разных запросов, которые могут выполняться, а могут не выполняться, или вообще может не быть никаких запросов.

http://www.ibase.ru/devinfo/dataaccesspaths.htm

fedorov2012на более сложных запросах оптимизатор слабоват
нужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778579
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВрёшь.

Нет - в ХП (sp_tree1) есть сортировка
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778580
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

ты не хочешь решения проблемы.

Тебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу. Правда будут потери производительности на сортировке миллионов записей t1.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778586
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvнужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами.
Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов, никто не мешает понять что параметр parent_tree1 не меняется на всем протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет.
Идиотами никого не считаю, FB - вещь мощная, но оптимизатор мог быть и по умнее, я уверен в старших версиях разработчика внесут эти исправления
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778590
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу.
Ответь да или нет - можно ли в самом sql-запросе поменять (местами или еще как-то), чтобы в плане был MERGE?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778592
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

тройка вместо MERGE может использоваться HASH.

Но я сомневаюсь, что это сильно поможет.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778598
fedorov2012Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e
Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос

Попробуй как так
Код: plsql
1.
2.
3.
4.
select   t1.*
from   t1
  join (select group_id1 from  sp_tree1(:parent_tree1) ) as tr1 (group_id1) on (t1.group_id1 = tr1.group_id1)
  join (select group_id1 from sp_tree2(:parent_tree2) ) as tr2 (group_id1) on (t1.group_id2 = tr2.group_id1)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778599
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1+0 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2+0 = tr2.group_id1



Так по идее должен быть план MERGE. Но будет ли он быстрее сказать не могу
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778600
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Нет - в ХП (sp_tree1) есть сортировка
В этом случае она отображалась бы в другом месте плана. А у тебя в плане она стоит крайней
слева, что означает последнюю операцию после всех выборок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778608
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012никто не мешает понять что параметр parent_tree1 не меняется на всем
протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет.
Она и дёргается однократно, поэтому в плане TR1 NATURAL. Покажи статистику индекса
FK_TABLE1 и результат SHOW DATABASE из isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов

Есть. Причём весьма жёсткие.

Если мой ХШ не врёт, ты пытаешься из таблицы выбрать записи, которые принадлежать
одновременно двум заданным группам (или любой их подгруппе). В этом случае обломись,
структура твоей БД совершенно не подходит для таких запросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778641
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас я в качестве временной таблицы использую свою в базе, но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее. В связи с чем вопрос - что нужно посмотреть для примера работы с этими таблица
README.common_table_expressions.txt
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778646
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

CTE к временным таблицам никаким боком не относится. А вот выкинуть твои рекурсивные процедуры и переписать на рекурсивные запросы возможно поможет.

По времянкам README.global_temporary_tables
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778653
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее
Интересный слух... Источник сомнению не подлежит?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778678
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GLOBAL TEMPORARY TABLE - судя по описанию эти так называемые временные таблицы также физически существуют в БД. Мне, казалось, что вызвал функцию FB передал нужные параметры и все.

Похоже ближе COMMON TEMPORARY TABLE:
Код: sql
1.
2.
3.
4.
5.
with TBL as (select * from sp_tree1(:parent_tree1))

select tr1.*
from table1 t1
       join tbl tr1 on tr1.group_id=t1.group_id
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778689
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвыкинуть твои рекурсивные процедуры и переписать на рекурсивные
запросы возможно поможет.
Если мой ХШ прав, то наверняка поможет денормализовать ключ дерева и выкинуть из запроса
обращение к нему вообще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778717
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ХШ - это что?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778721
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

ещё раз повторю CTE не имеет отношения к временным таблицам. Считай это вьюхой создаваемой на лету.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778741
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012ХШ - это что?
Хрустальный Шар у особо продвинутых экстрасенсов
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778744
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012COMMON TEMPORARY TABLE
CTE = Common TABLE Expressions

а временные таблицы - это Global Temporary Tables, GTT.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778761
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvвременные таблицы - это Global Temporary Tables, GTT.
Есть ли преимущество использование FBшных временных таблиц, перед собственной
У меня такая где SESSION_ID - уникальное значение сессии (выполняемого sql-запроса)
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE TMP_TABLE (
    SESSION_ID  ID /* ID = INTEGER NOT NULL */,
    TMP_ID      ID /* ID = INTEGER NOT NULL */
);
CREATE INDEX TMP_TABLE_IDX1 ON TMP_TABLE (SESSION_ID);
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778777
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

есть. Как минимум не надо ломать голову с SESSION_ID

Почитай уже Firebird 2.1 Release Notes
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778782
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
есть. Как минимум не надо ломать голову с SESSION_ID

А с т.зр. скорости работы - можно сказать, что использование временных таблиц FB предпочтительнее, потому что они быстрее работают.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778802
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

c GTT у тебя мусор так не будет копиться. Следовательно и проблемы производительности при его сборке пропадут.

Но вообще это не панацея. Лучше уж оптимизировать алгоритм так чтобы не нужно было GTT задействовать.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778828
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
c GTT у тебя мусор так не будет копиться. Следовательно и проблемы производительности при его сборке пропадут.

Правильно написал:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE GLOBAL TEMPORARY TABLE TBL
ON COMMIT PRESERVE ROWS   
AS SELECT * FROM SP_TREE1(:parent_tree1)

select * 
from table1 t1
       join tbl on t1.group_id=tbl.group_id
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778845
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

нет. Может всё таки в синтаксис оператора создания таблиц уже заглянуть?

Нету в FB возможности так делать
Код: sql
1.
CREATE TABLE tablename AS SELECT ...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778869
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисНету в FB возможности так делать
Код: sql
1.
CREATE TABLE tablename AS SELECT ...


В инструкции FB нет примера, большая просьба напишите как должно выглядеть в моем случае

p.s. юзад здесь тоже ничего не дало http://www.forum.mista.ru/topic.php?id=582653
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778879
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

в каком в "твоем случае"? И пример есть
http://www.firebirdsql.org/refdocs/langrefupd21-ddl-table.html
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779054
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvв каком в "твоем случае"?

Я что-то запутался c CREATE GLOBAL TEMPORARY.
Что-то подобное с помощью CREATE GLOBAL TEMPORARY можно сделать в одном sql-запросе или же CREATE GLOBAL TEMPORARY работает только в рамка скрипта и запускать его нужно в execute block :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE GLOBAL TEMPORARY TABLE TBL (GROUP_ID integer)
ON COMMIT PRESERVE ROWS;
COMMIT;

inert into TBL(GROUP_ID)
SELECT GROUP_ID FROM SP_TREE1(:parent_tree1);

select t1.* 
from table1 t1
       join tbl on t1.group_id=tbl.group_id;
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779056
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GTT создаётся (как и обычная таблица) разово, а используется - по мере надобности.
Данные в таблицы живут или до фиксации транзакции (по умолчанию) или до закрытия соединения (on commit preserve row).
Таким образом, каждое подключение к БД может работать с индивидуальным набором данных в одноимённой временной таблице.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779060
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается FB физически а не виртуально создает TEMPORARY TABLE

kdvИ пример есть http://www.firebirdsql.org/refdocs/langrefupd21-ddl-table.html
Кстати в примере после отработки create global temporary table стоит commit. Вопрос - тогда как же будет удаляться temporary table вручную самому вызывать drop. Какой замудренный механизм, не ужели нельзя было сделать по принципу "execute block" для хранимой процедуры, который работает как обычный sql-запрос, а не скрипт.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779063
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovТаким образом, каждое подключение к БД может работать с индивидуальным набором данных в одноимённой временной таблице.
Ну тогда особой разницы между моим tmp_table нет, мне казалось, что у FB temporary table виртуальная.
Кстати обычную таблицу, уже имеющуюся в БД, можно ли сконвертировать как-то в temporary table?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779074
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Ну тогда особой разницы между моим tmp_table нет
Есть:
1) Подумай как ты удаляешь из своих таблиц данные отпавших коннектов.
2) Как ты добьёшься от своих таблиц быть в ОЗУ, не сбрасываясь на диск без крайней
необходимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779079
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovfedorov2012Ну тогда особой разницы между моим tmp_table нет
Есть:
1) Подумай как ты удаляешь из своих таблиц данные отпавших коннектов.

С этим все просто - использование tmp_table у меня идет для запросов на select и транзакцию я не commit, поэтому данные никогда физически в tmp_table не сохранятся
fedorov20122) Как ты добьёшься от своих таблиц быть в ОЗУ, не сбрасываясь на диск без крайней
необходимости.

А разве данные будут сбрасываться на диск, если запрос делается в транзакции, которая в итоге не коммититься?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779093
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012С этим все просто - использование tmp_table у меня идет для запросов на select и транзакцию я не commit, поэтому данные никогда физически в tmp_table не сохранятся
Ну так работай с временной таблицей чего противишся-то?

fedorov2012А разве данные будут сбрасываться на диск, если запрос делается в транзакции, которая в итоге не коммититься?
В общем случае да, в твоем частном случае иногда(а может и всегда) вполне возможно что и нет
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779098
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати обычную таблицу, уже имеющуюся в БД, можно ли сконвертировать как-то в temporary table?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779100
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

нет
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779101
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
нет
а можно TEMPORARY TABLE использовать как обычную таблицу т.е. вставлять/удалять туда значение коммитить их?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779104
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

если GTT будет уровня транзакции то после коммита твои вставленные записи тютю, если уровня соединения, то останутся но ровно до тех пор, пока есть соединение. При дисконнекте он тоже тютю.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779109
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
если GTT будет уровня транзакции то
т.е. когда я делаю CREATE GLOBAL TEMPORARY TABLE я должен четко сказать какая у меня ON COMMIT {DELETE или PRESERVE} ROWS (delete т.е. после коммита транзакции данные удалятся)?

можно ли использовать индексы и т.п. т.е. правильно ли я понимаю TEMPORARY TABLE от обычной TABLE в FB особо ничем не отличается (только тем, что описано ранее) ?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779110
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

индексы можно. Есть нюансы с FK. Ну прочитай про них уже.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779163
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
индексы можно. Есть нюансы с FK. Ну прочитай про них уже.
Спасибо почитал, только вот не нахожу ответа на такой вопрос - у меня есть ХП в которых есть обращение к моей tmp_table. Сейчас я хочу удалить свою tmp_table и создать CREATE GLOBAL TEMPORARY TABLE с таким же именем, нужно ли перекомпилировать эти ХП или им без разницы какая tmp_table - GLOBAL TEMPORARY TABLE или обычная стандартная?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779173
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Сейчас я хочу удалить свою tmp_table
Попробуй и ответ придёт сам собой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779177
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну да, drop'нуть не получиться пока ХП пустыми не сделаешь
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779263
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем после многочасовой работы заставил sql-запрос летать без использования временных таблиц (в среднем 50 миллисекунд) . Но вот беда стоит включить сортировку (order by) как запрос начинает тормозить (конечно выполняется теперь быстрее чем раньше) и время составляет 48 сек. Что подскажите сделать?
Может этот вопрос вынести в отдельный топик?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779265
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
48 сек выполнения - на выходе 40 тыс. записей с 20 полями
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779282
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Ну тогда особой разницы между моим tmp_table нетРазница появится как только "моя tmp_table" потребуется нескольким клиентам.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779350
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012 Что подскажите сделать?

показать запросы и планы
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779580
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mпоказать запросы и планы
запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t2.*
from sp_tree1(:p) tr1,
     sp_tree2(:p2) tr2,
     table1 t1,
     table2 t2,
     table3 t3
where t2.nm_id=t1.nm_id
      and t1.group_id=tr2.group_id
      and t2.group_id=tr1.group_id
      and t3.nm_id=t2.nm_id
order by t2.nm_id



План c order by:
Код: sql
1.
PLAN SORT (JOIN (JOIN (TREE1 INDEX (PK_TREE1), SP_TREE1 NATURAL, TR1 INDEX (FK_TREE1_1)), TREE2 INDEX (PK_TREE2))(SP_TREE2 NATURAL)(MN INDEX (FK_TREE2))JOIN (T2 INDEX (FK_TABLE2_2), T1 INDEX (PK_TABLE1))(T3 INDEX (PK_TABLE3)))



План без order by:
PLAN JOIN (JOIN (TREE1 INDEX (PK_TREE1), SP_TREE1 NATURAL, TR1 INDEX (FK_TREE1_1)), TREE2 INDEX (PK_TREE2))(SP_TREE2 NATURAL)(MN INDEX (FK_TREE2))JOIN (T2 INDEX (FK_TABLE2_2), T1 INDEX (PK_TABLE1))(T3 INDEX (PK_TABLE3))[/SRC]
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779592
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

откуда тут уже 3 таблицы появилось, раньше была 1 и join с 2мя ХП. Только не говори, что это те временные таблицы, которые ты в процедурах заполнил.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779624
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

твои запросы ещё ни разу не соответствовали твоим планам, хватит врать уже...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779640
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,

откуда тут уже 3 таблицы появилось, раньше была 1 и join с 2мя ХП. Только не говори, что это те временные таблицы, которые ты в процедурах заполнил.
просто я старался не усложнять запрос и в топик вешал саму суть.

Текущий запрос - это реальный мой запрос (только названия таблиц переименованы)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779644
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Планы между собой отличаются только наличием или отсутствием SORT в начале
Без order by выполняется запрос на порядки быстрее
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779676
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а нефиг сортировать широкие выборки. Попробуй

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with mysource as (
select t2.id AS id
from sp_tree1(:p) tr1,
     sp_tree2(:p2) tr2,
     table1 t1,
     table2 t2,
     table3 t3
where t2.nm_id=t1.nm_id
      and t1.group_id=tr2.group_id
      and t2.group_id=tr1.group_id
      and t3.nm_id=t2.nm_id
order by t2.nm_id)
select t2.*
from mysource
left join t2 on mysource.id = t2.id



где id - PK таблицы t2
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779689
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Без order by выполняется запрос на порядки быстрееФетч первой записи - это ещё не выполнение запроса.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779704
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисгде id - PK таблицы t2
Спасибо

Симонов Дениса нефиг сортировать широкие выборки. Попробуй
А как быть, на клиенте корячиться с сортировкой - или на клиенте выделить в отдельную опцию - "Отсортировать", как правило в этом случае как поступают?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779708
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

так помогло?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779754
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
так помогло?
неа, да и как оно могло помочь если в with такой же order by стоит
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779762
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

не совсем. Там я сортирую более узкую выборку. Соответсвенно она требует меньше temp пространства, а потом присоединяю её к твоей табличке.

В прочем Влад тебе правильно сказал. Ты без сортировки кнопочку Fetch All жмакни
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779875
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
не совсем. Там я сортирую более узкую выборку. Соответсвенно она требует меньше temp пространства, а потом присоединяю её к твоей табличке.

может FB можно сказать мол сделай сортировку 1ым 100 записям
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38779909
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012может FB можно сказать мол сделай сортировку 1ым 100 записям
Сказать можно
Код: sql
1.
2.
3.
select * from
  (select first 100 * from)
order by


вот только эту первую сотню сначала надо четко определить
дабы при следующем запуске она не оказалась совсем другой сотней
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38780024
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все равно не понятно почему order by медленно сортирует да еще и по индексированному полю - ведь матем. т. зр это быстрая операция
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38780078
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012все равно не понятно почему *order by* медленно сортирует да еще и по
индексированному полю
Потому что:
1) Сортировка внешняя.
2) Индекс у таблицы, а сортируется конечный набор данных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38780146
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012все равно не понятно почему order by медленно сортирует да еще и по индексированному полю - ведь матем. т. зр это быстрая операция

order by - не сортирует, он только говорит что результирующий набор должен быть отсортирован а каким образом это другое
зы. возможно ты и сможешь добиться в плане запроса не SORT а ORDERED (или как его там) но это не значит что будет быстрее
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38780230
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, за оказанную помощь в решении моего вопроса
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38787176
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovfedorov2012все равно не понятно почему *order by* медленно сортирует да еще и по
индексированному полю
Потому что:
1) Сортировка внешняя.
2) Индекс у таблицы, а сортируется конечный набор данных.

Firebird 2.5.3 - исправили ошибку с сортировкой на больших данных (прирост 30%). А вы говорите, все правильно, все хорошо - а оказывается ошибка ( http://tracker.firebirdsql.org/browse/CORE-4353]) + ко всему много других ошибок связанных с "order by" http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes253.html#rnfb253-subrelease]
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38787479
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Dimitry Sibiryakovпропущено...

Потому что:
1) Сортировка внешняя.
2) Индекс у таблицы, а сортируется конечный набор данных.

Firebird 2.5.3 - исправили ошибку с сортировкой на больших данных (прирост 30%). А вы говорите, все правильно, все хорошо - а оказывается ошибка ( http://tracker.firebirdsql.org/browse/CORE-4353]) + ко всему много других ошибок связанных с "order by" http://www.firebirdsql.org/file/documentation/release_notes/html/rlsnotes253.html#rnfb253-subrelease]
И у тебя теперь гораздо быстрее выполняется запрос????
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38787488
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mИ у тебя теперь гораздо быстрее выполняется запрос????
Да - написал же прирост 30% (разработчику FB пишут может быть до 50%).
Раньше с сортировкой запрос выполнялся 60 сек, теперь 40 сек - протестил.
...
Рейтинг: 0 / 0
103 сообщений из 103, показаны все 5 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избежать временных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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