Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

Как определить тексты 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.037 c
2-1139385465
nap<>
2006-02-08 10:57
2006.02.26
Как усыпить приложение


15-1138950093
TUser
2006-02-03 10:01
2006.02.26
LINUX: рук-во администратора


15-1138860793
ANB
2006-02-02 09:13
2006.02.26
Поздравляю себя с рождением вчера (01.02.2006) дочки


15-1139395548
M@D
2006-02-08 13:45
2006.02.26
Активная дириктория &amp; Delphi


6-1132064989
Kullibin
2005-11-15 17:29
2006.02.26
Работа с компонентами FastNet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский