|
17.03.2010, 08:49 | #1 |
Участник
|
Да, согласен, такое может быть.
|
|
17.03.2010, 09:09 | #2 |
Участник
|
|
|
17.03.2010, 12:16 | #3 |
Moderator
|
Не претендую на истину в последней инстанции, но с точки зрения стоимости владения дешевле один раз настроить регулярное обновление статистики, отключить использование хинтов и настроить перестроение фрагментированных индексов, чем каждый раз править кусок кода. Кроме того, какого-то рационального объяснения приведенному методу не существует. Он МОГ теоретически срабатывать для Oracle до версии 7.10 включительно при использовании rule based optimizer. Для MS SQL метод бессмысленнен для любой версии и любых условий. Даже если он сработает - это единичное совпадение, на основании которого нельзя делать выводов.
Последний раз редактировалось fed; 17.03.2010 в 12:20. |
|
17.03.2010, 14:25 | #4 |
Moderator
|
Есть такая передача - Малахов Плюс. Дык там народ тоже делиться рассказами что после того как он попил отвара чертополоха или посыпал подушку пеплом от дубовой коры у него прошел геморой или радикулит.
Надо бы Малахову предложить сделать туда отдельную секцию Малахов+АйТи, в которой народные целители делились бы их собственными секретами повышения производительности SQL-запросов путем перестановки условий, уточняли бы, какой заговор следует читать в процессе закрытия склада и какие именно дни по лунному календарю наиболее благоприятны для построения книги продаж... P.S. Я обычно не стебусь над другими участниками и не перехожу на личности. Но как-то уж у автора теории ник очень уж не соответствует взглядам на принципы оптимизации СУБД. Последний раз редактировалось fed; 17.03.2010 в 14:29. |
|
|
За это сообщение автора поблагодарили: Vadik (1). |
17.03.2010, 14:49 | #5 |
Участник
|
Цитата:
Сообщение от fed
Есть такая передача - Малахов Плюс. Дык там народ тоже делиться рассказами что после того как он попил отвара чертополоха или посыпал подушку пеплом от дубовой коры у него прошел геморой или радикулит.
Надо бы Малахову предложить сделать туда отдельную секцию Малахов+АйТи, в которой народные целители делились бы их собственными секретами повышения производительности SQL-запросов путем перестановки условий, уточняли бы, какой заговор следует читать в процессе закрытия склада и какие именно дни по лунному календарю наиболее благоприятны для построения книги продаж... P.S. Я обычно не стебусь над другими участниками и не перехожу на личности. Но как-то уж у автора теории ник очень уж не соответствует взглядам на принципы оптимизации СУБД. |
|
17.03.2010, 15:08 | #6 |
Moderator
|
Ладно - расскладываю по шагам:
1. Сделано наблюдение о повышении производительности после замены порядка условий в запросе.(Возможно вполне справедливое). 2. Попыток использования доступных средств анализа ситуации (попросту говоря - посмотреть план запроса до и после) сделано не было (документация по тому как это делать входит в BOL) 3. Попыток проанализировать возможные причины повышения производительности после смены порядка полей сделано не было. (Документация по оптимизатору запросов входит в BOL). 4. Был сделан вывод что повышение производительности связано с изменением порядка полей. (Уверждение спорное, поскольку причины низкой производительности не были выявлены). 5. Был сделан вывод о применимости подхода в общем случае. 6. Не было попыток сравнить чем этот подход лучше/хуже альтернативных (например - обновления статистики или отключения хинтов). Пункты 4 и 5 - просто классические логические ошибки (попытка сделать вывод о причинно-следственной связи последовательных событий и некорректное обобщение от частного случая к общему). Пункты 2,3 и 6 говорят, на мой взгляд, об отсутствии инженерного подхода к проблеме. А народные целители, у которых прошла болячка после того как они попили какой-то отвар совершают абсолютно такие же ошибки в рассуждениях: 1. Болячка прошла после того как попили отвар. 2. Анализа причин возникновения болячки и попыток проверить действительно ли она прошла (может только симптомы пропали) не делается 3.Попыток проанализировать причины положительного эффекта сделано не было (Чертополох повышает секрецию желчи, повышение секреции желчи разжижает стул, жидкий стул снижает нагрузку на геморройные узлы) 4. Был сделан вывод что прохождение болячки связано с приемом отвара (возможно болячка прошла из за того что больной сменил пищевой режим или стал больше двигаться). 5. Был сделан вывод о применимости метода в общем случае. 6. Не было сделано анализа применимости метода в сравнении с альтернативами (возможно проще недельку попринимать дешовые таблетки из аптеки, чем месяц париться со сбором, приготовлением и приемом чертополоха). |
|
17.03.2010, 15:44 | #7 |
NavAx
|
Вот пристали к человеку...
ЕЩЁ РАЗ!!! Проблема в DAX, она считает себя умнее SQL!!! Вот вам доказательства, DAX3 KR кажется 2 SP4 Standart: X++: static void Job1(Args _args) { InventTrans InventTrans; ; select InventTrans where InventTrans.InventTransId == "л00000380"; info(InventTrans.InventTransId); select InventTrans where InventTrans.InventTransId == "л00000380" && InventTrans.ItemId == "СвОф-1000" && InventTrans.StatusIssue == StatusIssue::OnOrder && InventTrans.DateStatus == 30\04\2006 && InventTrans.StatusReceipt == StatusReceipt::None; info(InventTrans.InventTransId); select InventTrans where InventTrans.StatusReceipt == StatusReceipt::None && InventTrans.StatusIssue == StatusIssue::OnOrder && InventTrans.ItemId == "СвОф-1000" && InventTrans.DateStatus == 30\04\2006 && InventTrans.InventTransId == "л00000380"; info(InventTrans.InventTransId); } X++: SELECT A.ITEMID,A.STATUSISSUE,A.DATEPHYSICAL,A.QTY,A.COSTAMOUNTPOSTED,A.CURRENCYCODE,A.TRANSTYPE,A.TRANSREFID,A.INVOICEID,A.VOUCHER,A.DATEEXPECTED,A.DATEFINANCIAL,A.COSTAMOUNTPHYSICAL,A.INVENTTRANSID,A.STATUSRECEIPT,A.PACKINGSLIPRETURNED,A.INVOICERETURNED,A.PACKINGSLIPID,A.VOUCHERPHYSICAL,A.COSTAMOUNTADJUSTMENT,A.QTYSETTLED,A.COSTAMOUNTSETTLED,A.VALUEOPEN,A.DIRECTION,A.DATESTATUS,A.COSTAMOUNTSTD,A.DATECLOSED,A.DEL_CONFIGID,A.INVENTTRANSIDFATHER,A.COSTAMOUNTOPERATIONS,A.ITEMROUTEID,A.ITEMBOMID,A.INVENTTRANSIDRETURN,A.PROJID,A.PROJCATEGORYID,A.INVENTDIMID,A.INVENTDIMFIXED,A.DATEINVENT,A.CUSTVENDAC,A.TRANSCHILDREFID,A.TRANSCHILDTYPE,A.TIMEEXPECTED,A.REVENUEAMOUNTPHYSICAL,A.ASSETID,A.PROJADJUSTREFID,A.DEL_TAXAMOUNTPHYSICAL,A.ASSETBOOKID,A.INVENTREFTRANSID,A.COSTAMOUNTSECCURPOSTED_RU,A.COSTAMOUNTSECCURPHYSICAL_RU,A.COSTAMOUNTSECCURADJUSTMENT_RU,A.DATECLOSEDSECCUR_RU,A.QTYSETTLEDSECCUR_RU,A.COSTAMOUNTSETTLEDSECCUR_RU,A.VALUEOPENSECCUR_RU,A.COSTAMOUNTSTDSECCUR_RU,A.RECVERSION,A.RECID FROM INVENTTRANS A WITH( INDEX(I_177TRANSIDIDX)) WHERE ((DATAAREAID=?) AND (INVENTTRANSID=?)) OPTION(FAST 20) X++: SELECT A.ITEMID,A.STATUSISSUE,A.DATEPHYSICAL,A.QTY,A.COSTAMOUNTPOSTED,A.CURRENCYCODE,A.TRANSTYPE,A.TRANSREFID,A.INVOICEID,A.VOUCHER,A.DATEEXPECTED,A.DATEFINANCIAL,A.COSTAMOUNTPHYSICAL,A.INVENTTRANSID,A.STATUSRECEIPT,A.PACKINGSLIPRETURNED,A.INVOICERETURNED,A.PACKINGSLIPID,A.VOUCHERPHYSICAL,A.COSTAMOUNTADJUSTMENT,A.QTYSETTLED,A.COSTAMOUNTSETTLED,A.VALUEOPEN,A.DIRECTION,A.DATESTATUS,A.COSTAMOUNTSTD,A.DATECLOSED,A.DEL_CONFIGID,A.INVENTTRANSIDFATHER,A.COSTAMOUNTOPERATIONS,A.ITEMROUTEID,A.ITEMBOMID,A.INVENTTRANSIDRETURN,A.PROJID,A.PROJCATEGORYID,A.INVENTDIMID,A.INVENTDIMFIXED,A.DATEINVENT,A.CUSTVENDAC,A.TRANSCHILDREFID,A.TRANSCHILDTYPE,A.TIMEEXPECTED,A.REVENUEAMOUNTPHYSICAL,A.ASSETID,A.PROJADJUSTREFID,A.DEL_TAXAMOUNTPHYSICAL,A.ASSETBOOKID,A.INVENTREFTRANSID,A.COSTAMOUNTSECCURPOSTED_RU,A.COSTAMOUNTSECCURPHYSICAL_RU,A.COSTAMOUNTSECCURADJUSTMENT_RU,A.DATECLOSEDSECCUR_RU,A.QTYSETTLEDSECCUR_RU,A.COSTAMOUNTSETTLEDSECCUR_RU,A.VALUEOPENSECCUR_RU,A.COSTAMOUNTSTDSECCUR_RU,A.RECVERSION,A.RECID FROM INVENTTRANS A WITH( INDEX(I_177STATUSITEMIDX)) WHERE ((DATAAREAID=?) AND (((((INVENTTRANSID=?) AND (ITEMID=?)) AND (STATUSISSUE=?)) AND (DATESTATUS=?)) AND (STATUSRECEIPT=?))) OPTION(FAST 20) X++: SELECT A.ITEMID,A.STATUSISSUE,A.DATEPHYSICAL,A.QTY,A.COSTAMOUNTPOSTED,A.CURRENCYCODE,A.TRANSTYPE,A.TRANSREFID,A.INVOICEID,A.VOUCHER,A.DATEEXPECTED,A.DATEFINANCIAL,A.COSTAMOUNTPHYSICAL,A.INVENTTRANSID,A.STATUSRECEIPT,A.PACKINGSLIPRETURNED,A.INVOICERETURNED,A.PACKINGSLIPID,A.VOUCHERPHYSICAL,A.COSTAMOUNTADJUSTMENT,A.QTYSETTLED,A.COSTAMOUNTSETTLED,A.VALUEOPEN,A.DIRECTION,A.DATESTATUS,A.COSTAMOUNTSTD,A.DATECLOSED,A.DEL_CONFIGID,A.INVENTTRANSIDFATHER,A.COSTAMOUNTOPERATIONS,A.ITEMROUTEID,A.ITEMBOMID,A.INVENTTRANSIDRETURN,A.PROJID,A.PROJCATEGORYID,A.INVENTDIMID,A.INVENTDIMFIXED,A.DATEINVENT,A.CUSTVENDAC,A.TRANSCHILDREFID,A.TRANSCHILDTYPE,A.TIMEEXPECTED,A.REVENUEAMOUNTPHYSICAL,A.ASSETID,A.PROJADJUSTREFID,A.DEL_TAXAMOUNTPHYSICAL,A.ASSETBOOKID,A.INVENTREFTRANSID,A.COSTAMOUNTSECCURPOSTED_RU,A.COSTAMOUNTSECCURPHYSICAL_RU,A.COSTAMOUNTSECCURADJUSTMENT_RU,A.DATECLOSEDSECCUR_RU,A.QTYSETTLEDSECCUR_RU,A.COSTAMOUNTSETTLEDSECCUR_RU,A.VALUEOPENSECCUR_RU,A.COSTAMOUNTSTDSECCUR_RU,A.RECVERSION,A.RECID FROM INVENTTRANS A WITH( INDEX(I_177STATUSITEMIDX)) WHERE ((DATAAREAID=?) AND (((((STATUSRECEIPT=?) AND (STATUSISSUE=?)) AND (ITEMID=?)) AND (DATESTATUS=?)) AND (INVENTTRANSID=?))) OPTION(FAST 20) Последний раз редактировалось raz; 17.03.2010 в 15:45. Причина: 1 |
|
|
За это сообщение автора поблагодарили: Vadik (1), Logger (4), Ace of Database (1). |
17.03.2010, 15:59 | #8 |
Moderator
|
Может быть глобальное отключение хинтов (возможное и в трешке кстати), более эффективно чем ручное переупорядочивание полей в запросах ?
|
|
17.03.2010, 16:12 | #9 |
NavAx
|
|
|
17.03.2010, 16:18 | #10 |
Moderator
|
|
|
17.03.2010, 16:11 | #11 |
----------------
|
предлагаю с поста 52 Нужен совет: Oracle или MS SQL
отрезать обсуждение в другую ветку raz хорошая попытка, только у них INDEX hint отрезан, так как Аксапта старая, а база в режиме 90. |
|
17.03.2010, 16:20 | #12 |
NavAx
|
2 fed
Ты имеешь ввиду это? Цитата:
HINT_INDEX (1) – если параметр включен, будут работать операторы INDEX HINT из X ++ кода. Кроме того, при использовании FORCELITERALS имеет побочное действие – при использовании SELECT по одной таблице с условиями в части WHERE по индексированному полю использование этого индекса будет указано в запросе автоматически;
PS. Посоветуй "идеальный" hints, я посмотрю запросы. |
|
17.03.2010, 16:31 | #13 |
Moderator
|
Цитата:
Сообщение от raz
2 fed
Ты имеешь ввиду это? отсюда http://axapta.mazzy.ru/lib/indexhints/ PS. Посоветуй "идеальный" hints, я посмотрю запросы. Да и кстати - разговор то не про хинты, а вообще о разнице между инженерным и знахарским подходом к решению проблем. Последний раз редактировалось fed; 17.03.2010 в 16:58. Причина: синтаксис |
|
17.03.2010, 16:43 | #14 |
Участник
|
У меня всегда хинты были выключены.
Трассировку своих запросов показывать не хочу по политическим причинам. Вот что показывает трассировка запросов, которые привел raz: для запроса №1: PHP код:
PHP код:
Для эксперимента, я включил хинты. И они стали попадать в запрос - так же как у raz'а. для запроса №1: PHP код:
PHP код:
Пока не поменял порядок полей в запросе - не ускорилось выполнение. Последний раз редактировалось Ace of Database; 17.03.2010 в 16:48. |
|
17.03.2010, 16:49 | #15 |
Moderator
|
Цитата:
Сообщение от Ace of Database
У меня всегда хинты были выключены.
Трассировку своих запросов показывать не хочу по политическим причинам. Вот что показывает трассировка запросов, которые привел raz: Для эксперимента, я включил хинты. И они стали попадать в запрос - так же как у raz'а. Но у меня всегда хинты были выключены. То есть, все-таки последовательность важна. Возможно, у меня слетала статистика запросов или индексы. Но у меня обновление статистики работает регулярно как и реиндексация. Пока не поменял порядок полей в запросе - не ускорилось выполнение. Коротко говоря - есть возможность вытащить из MS SQLного кэша запросов текст и план исполнения некоторого количества запросов которые недавно исполнялись. По плану запроса можно будет понять что изменилось и попытаться построить теории - почему изменилось... |
|
17.03.2010, 16:51 | #16 |
Administrator
|
На 4.0 (хинты отключены в конфиг утилите АОСа) джоб raz-а не вставил никаких указаний по индексам в планы запроса. Вывод - DAX не посчитала себя умнее SQL Server (SQL Server 2005 SP3)
__________________
Возможно сделать все. Вопрос времени |
|
17.03.2010, 17:03 | #17 |
Участник
|
Цитата:
Просто я сейчас проверил, что у меня работает включение хинтов. |
|
17.03.2010, 16:48 | #18 |
NavAx
|
Цитата:
|
|
17.03.2010, 16:22 | #19 |
Участник
|
По поводу подстановки хинтов ядром - Как работает индекс и кеш запросов?
__________________
Axapta v.3.0 sp5 kr2 |
|
17.03.2010, 17:06 | #20 |
----------------
|
Ace of Database
можешь показать скриншот настройки РАБОЧЕГО АОСа закладка Database (там нет серверов-баз-паролей) ? |
|
Теги |
index hint, sql server, оптимизация |
|
Похожие темы | ||||
Тема | Ответов | |||
Параметры запросов БД | 3 | |||
Владельцы таблиц в БД аксапты | 11 | |||
Оптимизация запросов | 6 | |||
Оптимизация запросов | 3 | |||
Просмотр SQL запросов к БД с помощью файла Log | 3 |
|