Как снять длительный запрос ?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 13:59

Merlin писал(а):А мож таки проще не заниматься хернёй? А тратить умственные усилия на то, чтоб запросы летали мухами и миллионых резалтсетов не получалось?
К сожалению, задача стоит как раз и выбирать миллионы(!) записей и последовательно фильтровать их до приемлемого количества.
Аналитическая такая задачка. :)

См. например тут http://www.interbase-world.com/ru/articles/2350.php

С заказчиком особо не поспоришь...

Что делать, я уже определился.
Теперь вопрос в технических деталях...

Повторяюсь - как прервать запрос, выполняющийся в потоке, без закрытия программы, "выдергивания вилки из розетки"? и т.п.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2006, 14:08

Да не надо мне туда смотреть, мы с автором давно всё перетёрли, и до статьи и сразу после... Нормальная статья, есть пара закидонов по вьюношескому задору... Однако каунтов по каждому чиху, полных фетчей и прочей хрени с целью показа прогрессбаров-мультиков там нету.

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 14:19

Однако каунтов по каждому чиху, полных фетчей и прочей хрени с целью показа прогрессбаров-мультиков там нету.
Про прогрессбары & мультики кажется никто и не говорил?.. :wink:

Про полные фетчи - тем более...

А вот про каунты - пользователь однозначно заявляет - ХАЧУ!!!
Ну и пусть с ним,... если дождётся... 8)

А пока отобралась первая партия - с десяток записей из наших милионов, он может передумать и отфильтровать ещё по каким то полям.
А каунт-то наш считается ещё!
Вот его и надо "прибить" - и запустить следующий каунт - по новому набору...

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2006, 14:23

Нда... Говорят, соловей, когда поёт, ни хрена не слышит, только себя, можно палкой забить... Кстати, вопрос выбора инструмента тоже входит в понятие профессионализма. Если мне не изменяет память, у благородного дона почти статическое хранилище для кубоверчения? Ну так MS SQL ему в руки, он и каунты мнгновенно берёт из праймари и готовые аналитические инструменты имеет, раз с блокировками проблем не предвидится.

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 14:30

Merlin писал(а):Нда... Говорят, соловей, когда поёт, ни хрена не слышит, только себя, можно палкой забить... Кстати, вопрос выбора инструмента тоже входит в понятие профессионализма. Если мне не изменяет память, у благородного дона почти статическое хранилище для кубоверчения? Ну так MS SQL ему в руки, он и каунты мнгновенно берёт из праймари и готовые аналитические инструменты имеет, раз с блокировками проблем не предвидится.
Именно так оно и есть!
MS SQL говорите?
В принципе, тоже дело...
Но... это ж надо заново всё писать, с нуля и на другом инструментарии!
И не в этой конференции... 8)
А время, думаете, резиновое ?
Да и заказчик уже с программой работает...
И вот я, по вашему совету, прихожу к нему и предлагаю перейти с бесплатного FireBird на платный MS SQL?!
Да и к тому же обождать пару недель или месяцев для переписывания уже готового решения?
Думаю, тут не только палкой получить можно! 8)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2006, 14:35

Нет, я искренне полагаю, что в FB щас быстренько отменят версионность и переделают на блокировочник, чтоб у тебя каунт для ползунков мнгновенно щщытался... Мрак.

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 14:40

Нет, я искренне полагаю, что в FB щас быстренько отменят версионность и переделают на блокировочник, чтоб у тебя каунт для ползунков мнгновенно щщытался... Мрак.
ПАЧИМУ, ДА?!
8)

Непорядок!
Надо исправить!
Разобраться и доложить об исполнении!!! :P

Вопрос был задан вполне конкретный:
Как отменить уже запущенный SQL-запрос?

Не надо передёргивать...

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 15 дек 2006, 14:47

Kyarginski писал(а):Как отменить уже запущенный SQL-запрос?
Ну и вот тебе конкретный ответ:

Код: Выделить всё

DELETE FROM TMP$STATEMENTS WHERE TMP$ATTACHMENT=?
Только не спрашивай почему это не работает на FB1.5...

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 14:59

Dimitry Sibiryakov писал(а): Ну и вот тебе конкретный ответ:

Код: Выделить всё

DELETE FROM TMP$STATEMENTS WHERE TMP$ATTACHMENT=?
Только не спрашивай почему это не работает на FB1.5...
Спасибо, Добрый человек!
Про 1.5 спрашивать не буду, т.к. работаю с версией 2... :)

Уточнение:

После того, как я оборвал на клиенте из другого потока соединение
IBDatabase_Stream.Connected := False;

Я освобождаю ресурсы сервера вызовом

DELETE FROM TMP$STATEMENTS WHERE TMP$ATTACHMENT=?

Правильно я Вас понял?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 15 дек 2006, 15:15

Правильно я Вас понял?
ничего ты не понял.

во-первых, в IB 7.x запрос выглядит следующим образом:

Код: Выделить всё

update tmp$attachments 
set tmp$state='SHUTDOWN'
where tmp$attachment_id = ...
во вторых, tmp$attachments это коннекты, а не запросы. Если отменять запрос, то это в таблице tmp$statements.

в третьих,
После того, как я оборвал на клиенте из другого потока соединение
IBDatabase_Stream.Connected := False;
делаю вывод что автор вопроса теоретик, и на практике ничего не проверял. Если у тебя висит запрос, выполняемый на сервере, ты из "другого потока" не можешь ничего отрубить, ты можешь только загубить коннект.
И теоретик из тебя тоже плохой - исходному автору вопроса в угрожающей форме намекали на прочтение www.ibase.ru/ibfaq.htm про threads. Мне начать и тебе угрожать на эту же тему?

Ну и в четвертых - обрубать коннекты, на клиенте и на сервере, только ради того чтобы снять запрос select count, который считает скроллбар - это такая муть, что ....

если ты не смог объяснить заказчику, что в многопользовательской среде нет понятия "количество записей", или что select count использовать вообще нехорошо, то ты сам и будешь дальше мучиться с этим делом.

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 15:32

Злые вы! Уйду я от вас!.. (с) :)

Я про FB версии 2 у вас спрашивал!
А вы мне про что?
Про IB 7.x !

Не... так не пойдёт...

Ты не смог!
Ты не сумел!
Конечно не смог!.. пока не смог...
Но смогу, рано или поздно, с вашей или без вашей помощи!
На фиг я тогда сюда припёрся?! :evil:

Помогли бы лучше, чем ругаться...

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2006, 15:35

Поскорей бы уже... А то мне нужен молоток, но он дорогой, но есть халявные пассатижи, ну когда же, когда мне их наконец переделают на халяву в молоток...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 дек 2006, 15:51

Кьяргинский, нечего тут возмущаться.
Тебя выдумывать (или подбирать брошенную) довольно-таки дурацкую концепцию никто не заставлял. А ты пошёл ещё дальше - реализовал бОльшую часть на первом попавшемся сервере, а теперь завяз в "мелочах" и дёргаешься, и рычишь на нас, что помочь не можем. А как помочь, если и консерваторию считаем неправильной, и функционал сервера не особо способствует работоспособности этой консерватории...
Кто ж так делает - сперва начнём, а потом подумаем, что дальше...

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 16:01

WildSery писал(а): Тебя выдумывать (или подбирать брошенную) довольно-таки дурацкую концепцию никто не заставлял. А ты пошёл ещё дальше - реализовал бОльшую часть на первом попавшемся сервере, а теперь завяз в "мелочах" и дёргаешься, и рычишь на нас, что помочь не можем. А как помочь, если и консерваторию считаем неправильной, и функционал сервера не особо способствует работоспособности этой консерватории...
Кто ж так делает - сперва начнём, а потом подумаем, что дальше...
Ну что Вы?
Никто на Вас, таких хороших, всё знающих и умеющих и не собирался "рычать"!
Я просто пытаюсь получить ответы на свои вопросы...
Если у Вас нет ответов, что ж, буду искать дальше...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 дек 2006, 16:06

Чтобы не портил людям настроение, вот тебе мудрый проктологический совет.
Вместо

Код: Выделить всё

select count(*) from table1 where ...
тебе нужно писать типа так:

Код: Выделить всё

execute block returns (cnt int)
as begin
  cnt=0;
  for select :cnt+1 from table1 where ...
  into cnt do
    if (gen_id(gen1, 0)=1) then begin
      cnt=-1; leave;
    end
  suspend;
end
Перед запуском ставишь генератор в 0. Прерывать выполнение такого count(*) командой

Код: Выделить всё

alter sequence gen1 restart with 1;

Kyarginski
Сообщения: 36
Зарегистрирован: 12 дек 2006, 12:59

Сообщение Kyarginski » 15 дек 2006, 16:11

Супер!
Неплохая идея!
Попробую применить...

Спасибо.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 15 дек 2006, 16:55

Я ж говорю - соловей. Идея на первой странице топика с полгода как болтается, а гугель поди десятка три изложений покажет...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 15 дек 2006, 17:25

Merlin писал(а):Идея на первой странице топика с полгода как болтается
А в статье про генераторы сколько? :lol:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 дек 2006, 11:31

Я про FB версии 2 у вас спрашивал!
А вы мне про что?
Про IB 7.x !
тогда не надо писать, что ты мол выполняешь
"DELETE FROM TMP$STATEMENTS WHERE TMP$ATTACHMENT=? "
говорю же, теоретик. Если б ты попробовал то, что тебе говорят, то сразу бы возмутился, мол, "почему не работает".

Ответить