Страница 1 из 1

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

Добавлено: 19 сен 2007, 12:40
natrix
такая ситуация
ось - winxp
сервер - fb2.0.1
компоненты - fibplus6.1
размер бд ~ 300мб

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

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

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

Добавлено: 19 сен 2007, 13:47
mdfv
А транзакция какая?
Данные меняются?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 20 сен 2007, 11:59
hvlad
Без воспроизводимого примера считаю дальнейшие выяснения бессмысленными