powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Результат запроса по локальной сети
25 сообщений из 58, страница 1 из 3
Результат запроса по локальной сети
    #38872371
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста, кто знает. У меня FB 2.5, приложение С#.net 2013 , использую последний провайдер FirebirdSql.Data.FirebirdClient.dll 4.6.1 . Если с помощью IBExpert с того же компьютера в локальной сети, этот запрос отрабатывается около 100 ms, а из приложения 15 секунд. Результат запроса около 600 записей из пяти легких полей. Пробовал ридером и адаптером, результат одинаков. Смотрел в отладчике, насколько я понял, запрос отправляется на сервер и выполняется на сервере мгновенно, а проблема в получении результата запроса. Может есть какой-то другой способ, получить результат не по записям а единой таблицей?
Код: c#
1.
2.
3.
4.
5.
DataTable dt = new DataTable();
using (FirebirdSql.Data.FirebirdClient.FbDataReader fdr = com.ExecuteReader())
                {
                    dt.Load(fdr, LoadOption.OverwriteChanges);                    
                }


Проблема не в одном запросе, в моем приложении таких много нужно, но работает это всегда одинаково долго. Подскажите пожалуйста, что я делаю не так, или в какой стороне искать решение.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872414
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Chatlaninn!
You wrote on 5 февраля 2015 г. 15:06:17:

Chatlaninn> Помогите пожалуйста, кто знает. У меня FB 2.5, приложение С#.net 2013 ,
> использую последний провайдер FirebirdSql.Data.FirebirdClient.dll 4.6.1
> . Если с помощью IBExpert с того же компьютера в локальной сети, этот
> запрос отрабатывается около 100 ms, а из приложения 15 секунд. Результат
> запроса около 600 записей из пяти легких полей.
в IBExpert фетчишь все записи до упора?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872427
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это обычный select, который в SQL редакторе IBExpert мгновенно показывает результат, всю таблицу целиком.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872431
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

можно посмотреть этот обычный SELECT и DDL таблиц
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872439
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

попробуй посмотреть трейсом что там за кулисами творится
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872450
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
select ID, DDPRIEM, ID_PACIENT, FIO, ID_KASSIR, KAS_FIO, ID_DOKTOR, DOK_FIO, NOMER 
from v_priems 
where (ddpriem between '15.12.2014 00:00' and '05.02.2015 23:59') order by ddpriem


В данном случае источник данных это вьюха, но насколько я понимаю, проблема не на сервере и не в запросе, так как локально приложение работает без задержек, потому как не по сети, проблемы начинаются, когда это же приложение получает результаты по локальной сети. Может я не прав, но почему то мне кажется, что это из за того, что провайдер .net каждую запись результата запроса с сервера берет по отдельности, по очереди.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872451
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисChatlaninn,

попробуй посмотреть трейсом что там за кулисами творится

Не нужно, .Net при Load грузит все записи ( фетчит ) как уже написали, ibexpert только то что на экран, в winforms нет штатных компонентов, которые позволяли бы грузить частями по запросу при прокрутке. Так что если человек не понимает модель заложенную в эти DataSource-ы Microsoft-ом то ему проще будет взять "Delphi и его компоненты" ;)
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872456
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn
Код: plsql
1.
2.
3.
select ID, DDPRIEM, ID_PACIENT, FIO, ID_KASSIR, KAS_FIO, ID_DOKTOR, DOK_FIO, NOMER 
from v_priems 
where (ddpriem between '15.12.2014 00:00' and '05.02.2015 23:59') order by ddpriem


В данном случае источник данных это вьюха, но насколько я понимаю, проблема не на сервере и не в запросе, так как локально приложение работает без задержек, потому как не по сети, проблемы начинаются, когда это же приложение получает результаты по локальной сети. Может я не прав, но почему то мне кажется, что это из за того, что провайдер .net каждую запись результата запроса с сервера берет по отдельности, по очереди.

Сколько записей во view по днанному запрсу?

[quot Chatlaninn]
Код: plsql
1.
2.
3.
select count(*) from (select ID, DDPRIEM, ID_PACIENT, FIO, ID_KASSIR, KAS_FIO, ID_DOKTOR, DOK_FIO, NOMER 
from v_priems 
where (ddpriem between '15.12.2014 00:00' and '05.02.2015 23:59') order by ddpriem )
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872460
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всего 620 записей получается
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872464
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В других случаях, когда я из одной таблицы выбираю ФИО и id, но записей так же много, так же долго обрабатывается.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872470
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChatlaninnВ других случаях, когда я из одной таблицы выбираю ФИО и id, но записей так же много, так же долго обрабатывается.

А какие параметры в этот момент у сети? ( ping до сервера, и скорость передачи )?
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872476
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

620 записей это мало. И я не понимаю как они могут грузится 15 секунд. То что .net через провайдер адаптер грузит все записи, а не фетчит по одной я знаю. Ты пробовал в IBE жмакать кнопочку fetchAll?
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872478
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
средний ping 1msec
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872481
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

точнее с сервера то фетчит он их один фиг также. А вот DataTable будет заполнен до упора пока они не кончатся в курсоре
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872490
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В IBExpert Execute and fetch all
Plan
PLAN JOIN (JOIN (SORT (JOIN (V_PRIEMS TP NATURAL, V_PRIEMS TPAC INDEX (PK_T_PACIENT))), V_PRIEMS TUS INDEX (PK_T_USER)), V_PRIEMS TOS INDEX (PK_T_SOTR))

------ Performance info ------
Prepare time = 16ms
Execute time = 2s 137ms
Avg fetch time = 0,11 ms
Current memory = 34 658 256
Max memory = 37 926 152
Memory buffers = 2 048
Reads from disk to cache = 400
Writes from cache to disk = 0
Fetches from cache = 342 173
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872507
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

ну вот 2s 137ms это уже совсем не 100ms. А теперь надо запустить трейс и посмотреть что за дополнительные запросы идут при заполнении DataTable. Вполне возможно что скорость можно увеличить если заранее создать все поля таблицы DataTable.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872522
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисChatlaninn,

ну вот 2s 137ms это уже совсем не 100ms. А теперь надо запустить трейс и посмотреть что за дополнительные запросы идут при заполнении DataTable. Вполне возможно что скорость можно увеличить если заранее создать все поля таблицы DataTable.

в
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
public FbCommand(string cmdText, FbConnection connection, FbTransaction transaction)
            : base()
        {
            this.namedParameters = new List<string>();
            this.updatedRowSource = UpdateRowSource.Both;
            this.commandType = CommandType.Text;
            this.designTimeVisible = true;
            this.commandTimeout = 30;
            this.fetchSize = 200;


Можно переопределить на > 620
( вроде public )
p.s. Про IBExpert вроде писали что там время не совсем верное
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81Можно переопределить на > 620
Можно. Но это не поможет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872542
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNikolayV81Можно переопределить на > 620
Можно. Но это не поможет.


? не разбирался, а почему не поможет?
( я к тому что совсем проблему в 2 сек. не решит, это понятно, но м не 10 же? )
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872545
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81,

в IBE отражает не время выполнения запроса, а время за которое сам IBE получил все данные которые он запросил, когда не жмакают Fetch All он запрашивает не все данные. Естественно туда могут входить и часть запросов к системным таблицам.

Вообще у ТС какой-то странный результат, когда я пробовал .NET он у меня грузил 60000 записей за 30-50 секунд. И эти записи были довольно широкими. Конечно потом я отказался от загрузки такого количества записей в структуры типа DataTable. А тут какие то жалки 600 записей за 15 секунд.

Хотя мне видится что тут есть поле деятельности для улучшения самой вьюхи. Можно её раскрыть?
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872555
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikolayV81а почему не поможет?
Потому что, даже если этот параметр действительно используется при обращении к серверу
(что не факт), это изменение заменит четыре раунд-трипа на один. При пинге в миллисекунду
результат будет в пределах погрешности измерения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872557
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не ругайтесь пожалуйста, вьюха на скорую руку, так как все в спешке, проект горит.
Сейчас создал поля DataTable а потом Load-ил те же самые 15 секунд, правда в этот раз проверял на VMware
CREATE OR ALTER VIEW V_PRIEMS(
ID,
DDPRIEM,
ID_PACIENT,
FIO,
DDROGD,
ID_KASSIR,
KAS_FIO,
ID_DOKTOR,
DOK_FIO,
NOMER)
AS
select tp.id,tp.ddpriem, tp.id_pacient, tpac.fio, tpac.ddrogd, tp.id_kassir, tus.fio as "kas_fio",tp.id_doktor,tos.fio as "dok_fio",tp.nomer
from t_priems tp
left outer join t_pacient tpac on tp.id_pacient = tpac.id
left outer join t_user tus on tp.id_kassir = tus.id
left outer join t_sotr tos on tos.id = tp.id_doktor
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872571
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

а теперь ответь на кой тебе тотальный LEFT OUTER JOIN. У тебя что приёмы могут быть без пациента?
LEFT JOIN не даёт оптимизатору подумать.
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872577
Chatlaninn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там нигде не должно быть Null, это я на всякий случай, пока тестовый режим, сейчас убрал все эти join, а результат такой же. Получается проблема все же в самом приложении, как то я не так load делаю...
...
Рейтинг: 0 / 0
Результат запроса по локальной сети
    #38872586
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chatlaninn,

1. Замени все LEFT JOIN на просто JOIN, если там они реально не требуются.
2. Проверь в IBE свой запрос он при FetchAll. Он может быть будет выполняться быстрее
3. Покажи как ты инициализируешь и создаёшь FbCommand com
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Результат запроса по локальной сети
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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