IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
natrix
- Сообщения: 13
- Зарегистрирован: 19 сен 2007, 12:10
Сообщение
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
Без воспроизводимого примера считаю дальнейшие выяснения бессмысленными