![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить тексты SQL-запросов (InterBase)
-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. Функция существующих индексов - обеспечение уникальности значений в полях.