Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

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

 
-SeM-   (2005-12-28 15:58) [0]

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


 
Johnmen ©   (2005-12-28 16:04) [1]

см. ехе"шник. Вполне реально наковырять в нём вид запросов.


 
Sergey13 ©   (2005-12-28 16:05) [2]

А структура БД понятна или тоже темный лес? Я к тому, что можно просто глянуть какие индексы есть и попробовать строить "недостающие".


 
-SeM-   (2005-12-28 16:43) [3]

Johnmen ©   (28.12.05 16:04) [1]
:) Первое, что я делал. Смотри З.Ы.

Sergey13 ©   (28.12.05 16:05) [2]
Со своей колокольни структура вызывает нарекания, но изменить не дано - ехе"шник то готовый. Да и индексы какие-то есть, но вьюхи пришлось оптимизировать, т.к. даже существующие индексы не использовались. Увидеть бы "авторов" - что сказать нашлось бы :( А сейчас как раз и занят тем, что в угадайку играю.


 
Sergey13 ©   (2005-12-28 16:47) [4]

2 [3] -SeM-   (28.12.05 16:43)
Добавление индекса - это не то изменение структуры, которое катастрофично повлияет на прикладу. Тем более, что запросы, даже если ты их выцепишь, все равно не поменяешь.


 
Johnmen ©   (2005-12-28 16:53) [5]

>-SeM-   (28.12.05 16:43) [3]
>:) Первое, что я делал. Смотри З.Ы.

Ну и причём здесь ЗЫ?
Все динамически создаваемые тексты запросов можно обнаружить в ехе.
Вот если и имена полей в запросе динамически, то тогда намного сложнее. Но тоже решаемо, ведь эти имена тоже строки и тоже лежат там же...


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

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


 
Alexandr ©   (2005-12-28 17:13) [7]

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


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

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


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

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


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

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


 
Val ©   (2005-12-28 17:35) [11]

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

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

?


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

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" дает не маленькое кол-во вариантов (заметь реальные запросы намного сложнее вышеприведенных) .


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

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


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

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

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


 
Desdechado ©   (2005-12-28 18:38) [15]

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


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

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


 
Sergey13 ©   (2005-12-29 09:20) [17]

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

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


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

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


 
Sergey13 ©   (2005-12-29 09:36) [19]

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


 
Desdechado ©   (2005-12-29 11:11) [20]

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


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

Desdechado ©   (29.12.05 11:11) [20]

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

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


 
dioman ©   (2005-12-29 11:57) [22]


> -SeM-   (28.12.05 15:58)


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


 
-SeM-   (2005-12-29 12:05) [23]

dioman ©   (29.12.05 11:57) [22]

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

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

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

Увы.


 
ECM ©   (2005-12-29 12:11) [24]

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

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


 
ECM ©   (2005-12-29 12:14) [25]

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.042 c
15-1139082481
Труп Васи Доброго
2006-02-04 22:48
2006.02.26
RXMemoryData


3-1135763536
Id
2005-12-28 12:52
2006.02.26
Сверка паролей


1-1138346092
Rem
2006-01-27 10:14
2006.02.26
Поиск ошибок в библиотеке компонентов


2-1139141002
hey
2006-02-05 15:03
2006.02.26
Абракадабра при копировании русских букв из ячеек грида


15-1139144906
Yeg
2006-02-05 16:08
2006.02.26
Тригонометрическое уравнение