тормоза при DataSet.Close

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

тормоза при DataSet.Close

Сообщение natrix » 19 сен 2007, 12:40

такая ситуация
ось - winxp
сервер - fb2.0.1
компоненты - fibplus6.1
размер бд ~ 300мб

так вот. в базе есть ХП, возвращающая дохрена строк (~миллиона). в программе (через TpFIBDataSet) делаю из неё (ХП) селект, открытие проходит примерно за 7-8 секунд, фетчу 100 записей (вообще меньше секунды) и закрываю. а вот закрывается сей датасет больше минуты, причём загрузка ЦП в 100% происходит процессом сервера. вопрос : что всё это время делает сервер?

заранее спасибо за ответ!

зы, в факах и на форуме подобных тем не нашёл.. =)))

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 19 сен 2007, 13:47

А транзакция какая?
Данные меняются?

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

Сообщение Dimitry Sibiryakov » 19 сен 2007, 14:23

Сервер, подико-ся вычищает весь этот миллион, осевший в темпе из-за того, что ты выдал select from SP() order by...

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

Сообщение kdv » 19 сен 2007, 14:25

что-то с трудом верится. если запрос выполнить в IBExpert (SQL Editor), а потом выполнить там же нечто вроде select * from rdb$database - будет то же самое?
есть подозрение, что в момент закрытия датасета в твоем приложении на самом деле происходит выборка записей с сервера.

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 19 сен 2007, 14:27

mdfv писал(а):А транзакция какая?
Данные меняются?
read commited. данные не меняются.. пробовал и с рид-онли транзакцией - тот же результат

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 19 сен 2007, 14:28

Dimitry Sibiryakov писал(а):Сервер, подико-ся вычищает весь этот миллион, осевший в темпе из-за того, что ты выдал select from SP() order by...
order by я не делал... хм.

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 19 сен 2007, 14:55

kdv писал(а):что-то с трудом верится. если запрос выполнить в IBExpert (SQL Editor), а потом выполнить там же нечто вроде select * from rdb$database - будет то же самое?
есть подозрение, что в момент закрытия датасета в твоем приложении на самом деле происходит выборка записей с сервера.
в эксперте то же самое..
попробовал сделать "select first(100) ..." - теперь закрывается мгновенно.. видимо сервер и правда всё это время чистил пёрышки =)))

всем большое спасибо.. хотя всё-равно странно как-то..

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 сен 2007, 15:48

Dimitry Sibiryakov писал(а):Сервер, подико-ся вычищает весь этот миллион, осевший в темпе из-за того, что ты выдал select from SP() order by...
Ну ты эта - совсем уж за идиотов не держи тех кто сервер писал :)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 сен 2007, 15:52

natrix писал(а):попробовал сделать "select first(100) ..." - теперь закрывается мгновенно.. видимо сервер и правда всё это время чистил пёрышки =)))

всем большое спасибо.. хотя всё-равно странно как-то..
Бредим-с
После фетча 100 записей (без first) сервер что-то ещё делает ?

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 19 сен 2007, 16:35

hvlad писал(а):
natrix писал(а):попробовал сделать "select first(100) ..." - теперь закрывается мгновенно.. видимо сервер и правда всё это время чистил пёрышки =)))

всем большое спасибо.. хотя всё-равно странно как-то..
Бредим-с
После фетча 100 записей (без first) сервер что-то ещё делает ?
нет. (это я не про "бредим-с", возможно и так)
только после закрытия датасета (или по ролбэку транзакции) начинает тупить с минуту (100% загрузки цп)

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

Сообщение WildSery » 19 сен 2007, 17:21

natrix писал(а):только после закрытия датасета (или по ролбэку транзакции) начинает тупить с минуту (100% загрузки цп)
А если сделать commit?

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 19 сен 2007, 17:27

WildSery писал(а):
natrix писал(а):только после закрытия датасета (или по ролбэку транзакции) начинает тупить с минуту (100% загрузки цп)
А если сделать commit?
такая же фигня.....

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

Сообщение kdv » 19 сен 2007, 19:20

такая же фигня.....
темните вы. прямо мистика какая-то. больно надо серверу данными орудовать. Он бы если хотел, этих баз век бы не видел.

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

Сообщение Merlin » 19 сен 2007, 20:06

Ну почему же. Он там может делать то, что автор прописал в событиях BeforeClose и AfterClose датасета. А ещё посредством тонкого обращения с высокоинтеллектуальными компонентами можно добиться того, что при закрытии последнего датасета в транзакции она коммитится, а если она умочательная и единственная у датабазе-компонента, то закрывается коннект. А тут, во всяком случае, классика, частенько действительно бросается то ли мусор собирать, то ли ещё какой порядок наводить. А ещё поди свою лепту вносят Касперский и сыстем рестор на ХР.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 20 сен 2007, 00:45

natrix писал(а):только после закрытия датасета (или по ролбэку транзакции) начинает тупить с минуту (100% загрузки цп)
Супер или классик ? Если супер, то как ведёт себя классик ?

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 20 сен 2007, 09:26

kdv писал(а):
такая же фигня.....
темните вы. прямо мистика какая-то. больно надо серверу данными орудовать. Он бы если хотел, этих баз век бы не видел.
резонно =))) но всё же..

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 20 сен 2007, 09:29

Merlin писал(а):Ну почему же. Он там может делать то, что автор прописал в событиях BeforeClose и AfterClose датасета. А ещё посредством тонкого обращения с высокоинтеллектуальными компонентами можно добиться того, что при закрытии последнего датасета в транзакции она коммитится, а если она умочательная и единственная у датабазе-компонента, то закрывается коннект. А тут, во всяком случае, классика, частенько действительно бросается то ли мусор собирать, то ли ещё какой порядок наводить. А ещё поди свою лепту вносят Касперский и сыстем рестор на ХР.
в событиях ничего не прописано, транзакции пробовал и комит, и ролбэк делать, антивирей не стоИт, ибо глупо... такие дела =)))

natrix
Сообщения: 13
Зарегистрирован: 19 сен 2007, 12:10

Сообщение natrix » 20 сен 2007, 09:36

hvlad писал(а):
natrix писал(а):только после закрытия датасета (или по ролбэку транзакции) начинает тупить с минуту (100% загрузки цп)
Супер или классик ? Если супер, то как ведёт себя классик ?
аналогично ведёт....

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 20 сен 2007, 11:59

Без воспроизводимого примера считаю дальнейшие выяснения бессмысленными

Ответить