Форум: "Базы";
Текущий архив: 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