Ведение журнала запросов Microsoft JET SQL или «Как мне отладить программу моего клиента?»

Эта проблема:

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

Теперь эта программа в большинстве случаев работает очень медленно при использовании с двумя или более пользователями, поэтому я попытался заглянуть за занавеску и найти источник проблемы.

Некоторые моменты о программе, которые я выяснил на данный момент:

  • Написано на VB 6.0
  • Он использует защищенную паролем базу данных Access-DB (Access 2000 MDB), которая находится в папке на компьютере одного пользователя.
  • Эта папка является общей по сети и используется всеми другими пользователями.
  • Он использует msjet40.dll версии 4.00.9704 для связи с доступом. Я думаю, это ADO?

Я также использовал Монитор процесса для отслеживания доступа к файлам и выяснил, почему программа такая медленная: она выполняет тысячи операций чтения с mdb-файлом, даже когда программа простаивает. По сети это, конечно, очень медленно:

Трассировка монитора процессов http://img217.imageshack.us/img217/1456/screenshothw5.png

Настоящий вопрос:

Есть ли способ отслеживать запросы, отвечающие за активность чтения? Можно ли установить флаг трассировки? Подключение JET DLL? Я предполагаю, что программа выполняет несколько дорогостоящих запросов, которые заставляют JET читать много данных в процессе.

PS: Я уже пытался разместить mdb на файловом сервере нашей компании, но добился того, что доступ к нему был даже медленнее, чем через локальный общий ресурс. Я также безуспешно пытался изменить механизмы блокировки (гибкая блокировка) на клиенте.

Я хочу знать, что происходит, и мне нужны неопровержимые факты и предложения для разработчика нашего клиента, чтобы помочь ему / ей сделать программу быстрее.

Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
3
0
3 761
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Без помощи разработчиков это невозможно. Извиняюсь.

Первый вопрос: у вас есть копия MS Access 2000 или лучше?

Если так: Когда вы говорите, что MDB «защищен паролем», вы имеете в виду, что когда вы пытаетесь открыть его с помощью MS Access, вы получаете запрос только на пароль, или он запрашивает у вас имя пользователя и пароль? (Или дать вам сообщение об ошибке, в котором говорится: «У вас нет необходимых разрешений для использования объекта foo.mdb.»?)

Если это последнее (безопасность на уровне пользователя), найдите соответствующий файл .MDW, который идет вместе с MDB. Если вы его нашли, то это «информационный файл рабочей группы», который используется в качестве «ключа» для открытия MDB. Попробуйте создать ярлык на рабочем столе с такой целью, как:

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"

Затем MS Access должен запросить ваше имя пользователя и пароль, которые (надеюсь) совпадают с тем, что запрашивает приложение VB6. Это, по крайней мере, позволит вам открыть файл MDB и посмотреть на структуру таблицы, чтобы увидеть, есть ли какие-либо очевидные недостатки дизайна.

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

Не могли бы вы запустить сниффер пакетов (например, Wireshark) в сети и наблюдать за трафиком между одним пользователем и хост-машиной?

Хм, не уверен, что увижу там что-нибудь полезное, но попробовать стоит.

VVS 25.04.2009 20:56

Если он использует соединение ODBC, вы можете включить для этого ведение журнала.

  1. Запустите администратор источника данных ODBC.
  2. Выберите вкладку Tracing.
  3. Нажмите кнопку Начать трассировку сейчас.
  4. Выберите Применить или ОК.
  5. Запустите приложение на некоторое время.
  6. Вернитесь к администратору ODBC.
  7. Выберите вкладку «Трассировка».
  8. Нажмите кнопку «Остановить отслеживание сейчас».
  9. Трассировку можно просмотреть в месте, которое вы изначально указали в поле Путь к файлу журнала.
Ответ принят как подходящий

Чтобы ваши грязные руки точно узнали, что Access делает за кулисами запросов, есть недокументированная функция под названием JETSHOWPLAN - при включении в реестре он создает текстовый файл showplan.out. Подробности в эта статья TechRepublicчередовать, краткое содержание здесь:

The ShowPlan option was added to Jet 3.0, and produces a text file that contains the query's plan. (ShowPlan doesn't support subqueries.) You must enable it by adding a Debug key to the registry like so:

\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET.0\Engines\Debug

Under the new Debug key, add a string data type named JETSHOWPLAN (you must use all uppercase letters). Then, add the key value ON to enable the feature. If Access has been running in the background, you must close it and relaunch it for the function to work.

When ShowPlan is enabled, Jet creates a text file named SHOWPLAN.OUT (which might end up in your My Documents folder or the current default folder, depending on the version of Jet you're using) every time Jet compiles a query. You can then view this text file for clues to how Jet is running your queries.

We recommend that you disable this feature by changing the key's value to OFF unless you're specifically using it. Jet appends the plan to an existing file and eventually, the process actually slows things down. Turn on the feature only when you need to review a specific query plan. Open the database, run the query, and then disable the feature.

Для отслеживания кошмарных проблем это непревзойденно - это то, что вы получаете в своих больших дорогих промышленных базах данных - эта функция крутая - она ​​прекрасна и пушистая - это мой друг… ;-)

Вау, я очень надеялся получить такой ответ, и вот он :) Большое спасибо!

VVS 25.04.2009 20:54

Другие вопросы по теме