Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить тексты SQL-запросов (InterBase)


Страницы:   1 2

-SeM- ©   (2005-12-28 15:58:00) 

Есть приложение (без исходников), используемое стандартные компоненты для доступа к Interbase. Есть подозрение, что отсутствуют необходимые или неоптимальны индексы в базе, т.к. с увеличением кол-ва записей в таблицах уменьшается быстродействие запросов и, как следствие, приложения. Каким образом можно определить текст SQL-запросов, используемых приложением? Принимаются любые варианты, вот только пытать авторов и BTSQLMonitor не предлагать.
З.Ы. Ресурсы тоже отпадают - запросы формируются динамически.


ECM   (2005-12-29 12:14:00) [1]

З.Ы.
> Привет Серегей!

Сорри  -> Сергей :))


ECM   (2005-12-29 12:11:00) [2]

Привет Серегей!
Это конечно несколько громоздко, но можно попробовать сделать следующее:
- переименовать клиентскую библиотеку gds32.dll/fbclient.dll (например в gds33.dll)
- нарисовать свою gds32.dll (fbclient.dll) которая будет просто передавать вызовы в настоящую (gds33);
- дополнительно при вызове isc_dsql_prepare (в пятом параметре) будем получать указатель на текст запроса и збрасывать в файл

Всех с наступающим(и)!


-SeM-   (2005-12-29 12:05:00) [3]

dioman ©   (29.12.05 11:57) [22]

> но проще вскрыть себе вены

Вот и я об этом :(

> что-то типо лога сессий

Увы.


dioman   (2005-12-29 11:57:00) [4]


> -SeM-   (28.12.05 15:58)


можно использовать дизассемблер и отладчик и посмотреть как формируется запрос. но проще вскрыть себе вены.
а в интербэейз можно включить что-то типо лога сессий?? смотреть какой клиент с какой машины с каким запросом ломится?
просто в Oracle есть .. может и в ib что-то подобное


-SeM-   (2005-12-29 11:54:00) [5]

Desdechado ©   (29.12.05 11:11) [20]

> > Пробовать другие не вижу смысла.
> проблема твоя

Объясню почему. Принцип подключения клиента к монитору (или монитора к клиенту) во всех SQL-мониторах, IMHO, одинаков. Если две программы не видят клиента есть ли смысл искать третью?


Desdechado   (2005-12-29 11:11:00) [6]

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


Sergey13   (2005-12-29 09:36:00) [7]

2[18] -SeM-   (29.12.05 09:30)
> Играть в угадайку?
Почему нет? Для 36 таблиц это не так уж и долго, ИМХО. Начни с тех, что побольше.


-SeM-   (2005-12-29 09:30:00) [8]

Sergey13 ©   (29.12.05 09:20) [17]
:) Так вот в том и состоит вопрос - как узнать какие индексы необходимы.
Зная текст запроса это не было бы проблемой. Для тех же вьюх дополнительные индексы уже построены - текст то доступен.
Или ты предлагаешь создать все РK? Как я могу создать FK, если о связях таблиц могу только догадываться? Играть в угадайку?


Sergey13   (2005-12-29 09:20:00) [9]

2[6] -SeM-   (28.12.05 17:10)
>В базе 36 таблиц, 5 вьюх (использующих по 2-3 таблицы) и 48 индексов из которых ни одного FK или PK. Функция существующих индексов - обеспечение уникальности значений в полях.

Ну так дострой нужные индексы. ФК - обязательно. Любой уникальный в принципе можно сделать первичным, хотя вроде и не обязательно.


-SeM-   (2005-12-29 09:13:00) [10]

Desdechado ©   (28.12.05 18:38) [15]
Это тот SQL Monitor, который в стандартной поставке? Если да - не видит клиента.


Desdechado   (2005-12-28 18:38:00) [11]

Может, используется локальный протокол?
Тогда попробуй IB perfomance monitor, он SQL тоже мониторит именнопо локальному протоколу


-SeM-   (2005-12-28 17:54:00) [12]

Desdechado ©   (28.12.05 17:47) [13]
Спасибо, но BTSQLMonitor (Blaze Top SQL Monitor от Devrace) на этом приложениине отлавливает. Пробовать другие не вижу смысла.

2All
Что скажете на [10]?


Desdechado   (2005-12-28 17:47:00) [13]

посмотри на ibase.ru и ibphoenix.com
там много разных утилит, в том числе и SQL-мониторов всяких
я как-то пользоался, правда, давно было, не помню названий


-SeM-   (2005-12-28 17:46:00) [14]

Val ©   (28.12.05 17:35) [11]
Не вызывает сомнений, что запросы (в упрощенном виде - только 2 поля) :
'SELECT * FROM V_TABLE_TYPE2 WHERE VAL_1=12'
'SELECT * FROM V_TABLE_TYPE2 WHERE VAL_2=780'
'SELECT * FROM V_TABLE_TYPE2 WHERE VAL_1=12 AND VAL_2=780'
'SELECT * FROM V_TABLE_TYPE2 WHERE VAL_1=12 OR VAL_2=780'
несколько разные. В этом примере можно было и обойтись одним индексом.
А какой должен быть индекс, если в этой таблице 19 полей? И в комбинации с 'OR' и 'AND' дает не маленькое кол-во вариантов (заметь реальные запросы намного сложнее вышеприведенных) .


Val   (2005-12-28 17:35:00) [15]

> [10] -SeM-   (28.12.05 17:31)
возможно я чего-то недопонимаю, но чем поможет извлечение запросов с помощью чего-бы-то-ни-было, если они все-равно вернутся в виде

> строки из ехе 'SELECT * FROM V_TABLE_TYPE2', 'WHERE ', 'VAL_1=',
> 'VAL2=', 'VAL3=' ... (практически все поля таблицы)...,
> ' AND ', ' OR '.

?


-SeM-   (2005-12-28 17:31:00) [16]

Пока вас озадачивал, пришла мысль. Возможно ли такое?
В готовый ехе'шник внедряем dll'ку, которая при LoadLibrary создает екземпляр IBSQLMonitor и с помощью которого вылавливаем тексты запросов.
Ваши мысли?


-SeM-   (2005-12-28 17:22:00) [17]

Alexandr ©   (28.12.05 17:13) [7]
Нет, ну мужики вы только тему читаете? Говорю же - не подходит.


-SeM-   (2005-12-28 17:19:00) [18]

Johnmen ©   (28.12.05 16:53) [5]
Повторюсь еще раз - пройденый этап.
Предложи решение: строки из ехе 'SELECT * FROM V_TABLE_TYPE2', 'WHERE ', 'VAL_1=', 'VAL2=', 'VAL3=' ... (практически все поля таблицы)..., ' AND ', ' OR '.
Задача имет решение? Не создавать же на каждое поле индекс.


Alexandr   (2005-12-28 17:13:00) [19]

посмотри в ресурсах у exe
наверняка просто компоненты на форме лежат :)
увидишь много интересного


-SeM-   (2005-12-28 17:10:00) [20]

Sergey13 ©   (28.12.05 16:47) [4]
Может я что-то не так сказал или ты не так понял, но как раз и вопрос в том, что зная используемые запросы создать необходимые индексы.
В базе 36 таблиц, 5 вьюх (использующих по 2-3 таблицы) и 48 индексов из которых ни одного FK или PK. Функция существующих индексов - обеспечение уникальности значений в полях.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо