08.09.2009, 11:33 | #1 |
Гость
|
Как убрать знаки вопроса в мониторе запросов SQL?
Цитата:
SELECT A.DESCRIPTION,A.NUM,A.DIMENSIONCODE,A.INCHARGE,A.COMPANYGROUP,A.RECVERSION,A.RECID FROM DIMENSIONS A WITH( NOLOCK) WHERE ((DATAAREAID=?) AND ((((DIMENSIONCODE=?) AND (NUM=?)) AND ((DIMENSIONCODE=?) OR (DIMENSIONCODE=?))) AND ((DIMENSIONCODE=?) OR (DIMENSIONCODE=?)))) ORDER BY A.DATAAREAID,A.DIMENSIONCODE,A.NUM OPTION(FAST 1)
На любом примере, который приводят тут на форуме - вместо ? стоят значения, у меня - нет. База вертится на сервере, АОС там же. Локально запускаю "тонкий" клиент. |
|
08.09.2009, 11:53 | #2 |
Участник
|
это срабатывает механизм кеширования запросов.
поробнее http://axapta.mazzy.ru/lib/literals_vs_placeholders/ "убирать", скорее всего, не надо. |
|
|
За это сообщение автора поблагодарили: (1). |
08.09.2009, 11:58 | #3 |
Гость
|
Цитата:
Сообщение от mazzy
это срабатывает механизм кеширования запросов.
поробнее http://axapta.mazzy.ru/lib/literals_vs_placeholders/ "убирать", скорее всего, не надо. Цитирую кусок из статьи: Цитата:
В утилите Profiler отсылаемые Аксаптой на сервер запросы будут выглядеть так:
|
|
08.09.2009, 12:10 | #4 |
Moderator
|
Может Вам надо просто временно добавить в код что-то типа query.literals(1) ?
|
|
08.09.2009, 12:11 | #5 |
Administrator
|
В настройках АОСа (конфиг утилита, закладка Tracing) поставьте на время опытов галку SQL Statements и галку Bind variables. Рестартаните АОС и увидите - там будут проходить реальные значения. Только на время включенной галки будет немного ниже производительность - но если у Вас запрос не безумный (по скорости выполнения) и Вы не рабочей БД с большим кол-вом пользователей - то разницу Вы не заметите.
Я так понял - Вам это нужно. Нет?
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: glibs (1), alex55 (1), Kabardian (2). |
08.09.2009, 12:21 | #6 |
Administrator
|
Добавьте в параметры командной строки у АОСа -INTERNAL=COMMENTS Тогда в запросы АОС будет добавлять комментарии с реальными значениями параметров. В логе выглядеть это будет примерно так:
X++: SELECT COUNT(A.RECID) FROM INVENTTRANS A WHERE ((DATAAREAID=?/*'mld'*/) AND ((INVOICEID=?/*'CN00000058'*/) AND (DATEFINANCIAL=?/*2007/6/12*/)))
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|
За это сообщение автора поблагодарили: mazzy (5), glibs (1), kvan (3), Vadik (1), belugin (5), sukhanchik (7), AlexeyS (2), Lucky13 (2), aidsua (1), oip (5), alex55 (1), S.Kuskov (1), player (1). |
08.09.2009, 12:33 | #7 |
Administrator
|
2Maxim Gorbunov: А при этом план перестраиваться при каждом исполнении запроса не будет? Т.е. это вообще можно получается можно добавить на рабочей БД и забыть про знаки вопросов?
__________________
Возможно сделать все. Вопрос времени |
|
08.09.2009, 13:02 | #8 |
Administrator
|
Если честно, не изучал этот вопрос. Логически поразмыслив, а с чего бы ей план пересчитывать? Запрос ведь остается тот же, только комментарии меняются.
Я обычно этот параметр только на тестовую среду ставлю и на разработку. На рабочей как правило трассировка все равно отключена.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
08.09.2009, 13:02 | #9 |
Модератор
|
Цитата:
2 Maxim Gorbunov: а ты уверен в том, что это работает на версиях старше 3.0 ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
08.09.2009, 13:10 | #10 |
Administrator
|
Это я все понимаю логически. Просто если план не пересчитывается (что логично) - то установка этого параметра на рабочую БД никоим боком не скажется на производительности, зато очень хорошо скажется на удобстве (времени) исследования (в случае чего)
__________________
Возможно сделать все. Вопрос времени |
|
08.09.2009, 13:17 | #11 |
Administrator
|
Цитата:
Проверил на 2009 SP1. Работает
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 08.09.2009 в 13:33. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Vadik (1). |
08.09.2009, 13:49 | #12 |
Administrator
|
Хм... По-моему, в запрос они тоже подставляются. По крайней мере, в SQL Profiler'е я их видел Другое дело, что это комментарии, и оптимизатор их все равно игнорирует.
Да. И на 4ке, и на 5ке
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
08.09.2009, 15:12 | #13 |
Участник
|
По-моему при повторном использовании запросов ядро аксапты и параметры от использованных запросов показывает - то есть ненастоящие. Так что аккуратнее с этим.
Чтобы всегда актуальные параметры показывал, нужно запретить повторное использование запросов (для этого был еще один ключ командной строки - на память не помню - где то описан на форуме), тогда в логе параметры будут актуальные, но это также скажется негативно на производительности. |
|
08.09.2009, 15:39 | #14 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: sukhanchik (5). |
08.09.2009, 15:53 | #15 |
Administrator
|
Цитата:
А если хочется чтобы не врали - извольте регулярно перестраивать план запроса. Проще говоря - использование данного параметра командной строки вместе с параметром NoCursorReuse (а иначе зачем нам негарантированно верная информация) фактически совпадает с галочкой Bind variables конфигурации АОСа. А галочку ставить удобнее
__________________
Возможно сделать все. Вопрос времени |
|
09.09.2009, 00:07 | #16 |
Участник
|
Часто мне бывает удобно отловить интересующий меня запрос средством трассировки, подставить в нём значения вместо плэйсхолдеров и выполнить его в утилите для непосредственного доступа к базе данных. Обычно этих самых значений бывает большое количество, и подставлять их ручками не удобно и долго. Поэтому на досуге я сделал маленькую доработку для автоматизации подстановки значений вместо плэйсхолдеров и запуска любимой утилиты с загрузкой текста запроса. На форме "Журнал трассировки операторов SQL", которая удобно вызывается из инфолога, я добавил новый пункт в меню "Функции", который и делает вышеописанные манипуляции. Можно индивидуально для каждого пользователя настраивать вызываемое внешнее приложение. Протестировано под Oracle, использование MS SQL также предусмотрено.
|
|
|
За это сообщение автора поблагодарили: mazzy (2), ena_ax (1), player (1). |
Теги |
aos, ax2009, ax3.0, ax4.0, bind variables, database log, faq, sql, законченный пример, как правильно, полезное, трассировка |
|
|