|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Юристишко-выпускникок., мы Вам верим - индексы бьются у Вас каждый день. Ты бы уж писал что у тебя они вообще не бьются. Юристишко-выпускникпри чем здесь УПАКОВКА? какое отношение имеет создание индексов к УПАКОВКЕ таблиц? почему нужно паковать все таблицы? 1. Обе операции требуют монопольного доступа. 2. PACK таблицы без индексов происходит быстро, индексы дольше создаются. Если нет помеченных то очень быстро (а они не каждый день появляются) Поэтому я так делаю Код: plaintext 1. 2. 3. 4.
Я так и не могу понять что в этом ненормального? Кстати кроме воплей что это "ужас" других аргументов не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:23 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЯ так и не могу понять что в этом ненормального? Кстати кроме воплей что это "ужас" других аргументов не было. А ненормально здесь то, что у Вас нигде не упоминается ни архивирование, ни бэкап. И в неком ближайшем будущем, когда вы уже раз 20 упакуете таблицу, бухгалтер тетя Соня припрется к Вам в 17:27 и скажет: - А чегой-то моего клиента (документа, платежки...) нигде нету? Я точно вводила. Затем редактировала, и снова вводила. Точно. А сегодня гляжу - нету нигде. А значит - Ваша программа глючит! И фиг с два Вы отвертитесь, что это не так. И про то, был ли не был такой клиент - уже и узнать-то не получится... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:33 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima Tок., мы Вам верим - индексы бьются у Вас каждый день. Ты бы уж писал что у тебя они вообще не бьются. [/quot] не имеет отношения к обсуждаемой теме, (существуют люди, которые верят в летающие тарелки) Юристишко-выпускникпри чем здесь УПАКОВКА? какое отношение имеет создание индексов к УПАКОВКЕ таблиц? почему нужно паковать все таблицы? 1. Обе операции требуют монопольного доступа. 2. PACK таблицы без индексов происходит быстро, индексы дольше создаются. Если нет помеченных то очень быстро (а они не каждый день появляются) Поэтому я так делаю Код: plaintext 1. 2. 3. 4.
Я так и не могу понять что в этом ненормального? Кстати кроме воплей что это "ужас" других аргументов не было.[/quot] не имеет отношения к обсуждению. необходимости сущ-я бинарных индексов и т.д. .. воплей не было - были замечания, затем домыслы убого кулинара-теоретика, который не имеет отношения к реальной разработке, мечущегося по форумам и пытающегося для каких-то целей учить реальных разработчиков, при этом трактуя все про то кто и как мыслит себе в угоду. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:36 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosDima TЯ так и не могу понять что в этом ненормального? Кстати кроме воплей что это "ужас" других аргументов не было. А ненормально здесь то, что у Вас нигде не упоминается ни архивирование, ни бэкап. Тынц ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:40 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima T, Принято. Вопрос снят. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:42 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TBanditosпропущено... А ненормально здесь то, что у Вас нигде не упоминается ни архивирование, ни бэкап. Тынц начинаем опять по кругу, обосновываем необходимость бубнов. ну т.е. всегда делаем бекап, пакуем, индексируем. и так каждый день? пользователям мануал пишем куда жать? иными словами: если приложение написано на фокспро, то судьба юзера жать на большую кнопку и никак иначе? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:47 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
BanditosИ в неком ближайшем будущем, когда вы уже раз 20 упакуете таблицу, бухгалтер тетя Соня припрется к Вам в 17:27 и скажет: - А чегой-то моего клиента (документа, платежки...) нигде нету? Я точно вводила. Затем редактировала, и снова вводила. Точно. А сегодня гляжу - нету нигде. А значит - Ваша программа глючит! И фиг с два Вы отвертитесь, что это не так. И про то, был ли не был такой клиент - уже и узнать-то не получится... Ну найду я помеченную на удаление платежку и что это изменит? Скажу была, но ее кто-то удалил. Тут же спросят кто? И что дальше? В итоге все-равно крайний разработчик. Это кстати тот вопрос с которого топик начался. Если принципиально надо хранить все что ввели, то не надо встроенные средства пометки на удаление использовать. Тут я это и писал. И не только я ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:50 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima T2. PACK таблицы без индексов происходит быстро, индексы дольше создаются.Дольше чего? Если нет помеченных то очень быстро"очень быстро" к чему относится? К PACK или к созданию индексов? (а они не каждый день появляются) Поэтому я так делаю Код: plaintext 1. 2. 3. 4.
Я так и не могу понять что в этом ненормального? А общее время команд меньше чем Pack с индексами? Почему рассматривается только время упаковки? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:53 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Юристишко-выпускникпользователям мануал пишем куда жать? Зачем вообще куда-то жать? есть планировщик, который все делает. В мануал пишем как из планировщика запускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 17:54 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Sergey SizovDima T2. PACK таблицы без индексов происходит быстро, индексы дольше создаются.Дольше чего? Если нет помеченных то очень быстро"очень быстро" к чему относится? К PACK или к созданию индексов? Вроде по-русски написал. Уточняю: Индексы дольше создаются чем PACK таблицы без индексов PACK таблицы без индексов происходит очень быстро если нет помеченных на удаление. Sergey SizovА общее время команд меньше чем Pack с индексами? Почему рассматривается только время упаковки? Некорректное сравнение. При наличии помеченных на удаление происходит переиндексация, при отсутствии помеченных переиндексации не происходит. Время упаковки потому что обсуждаем упаковку. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:08 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЮристишко-выпускникпользователям мануал пишем куда жать? Зачем вообще куда-то жать? есть планировщик, который все делает. В мануал пишем как из планировщика запускать. ок. разрабатываем софт. отдаем пользователю. на его ПК мы должны настроить планировщик? мы не пойдем простым путем? т.е. мы настолько параноидальны, что топчимся по работающим таблицам и ищем проблем? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:08 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TВремя упаковки потому что обсуждаем упаковку. ладно, пора убегать, нужно уж определиться: делать мен во всех своих разработках большую кнопку и планировщик (гы, хз как оно работает) т.е. просто по-любому? всегда пакуем? если софт на фокспро и используем родные таблицы, то всегда пакуем и никак по-другому? если софт на фокспро и используем таблицы, то размер всех этих таблиц всегда в 4 млн.записей? + уж добью до конца - пусть кулинар чего-нить придумает еще про меня: если софт на фокспро и используем родные таблицы, то эти таблицы всегда в сети и т.д. ? если софт на фокспро и используем родные таблицы, то пользователь не станет задавать вопрос, а че это Ваше приложение такое творит, что мечется по нашему диску как шальное (упаковка приводит к созданию нового ф-ла, а старый переим-ся) ну я про битые сектора там, еще чего на диске умалчиваю ...? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:19 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TSergey Sizovпропущено... Дольше чего?пропущено... "очень быстро" к чему относится? К PACK или к созданию индексов? Вроде по-русски написал.Вот именно - вроде. Есть еще такое понятие как согласование слов в предложении. Уточняю: Индексы дольше создаются чем PACK таблицы без индексов PACK таблицы без индексов происходит очень быстро если нет помеченных на удаление. Sergey SizovА общее время команд меньше чем Pack с индексами? Почему рассматривается только время упаковки? Некорректное сравнение. При наличии помеченных на удаление происходит переиндексация, при отсутствии помеченных переиндексации не происходит.Поо показанному Вами коду это не скажешь. Индексация там безусловная.Время упаковки потому что обсуждаем упаковку.А почему только упаковку, если Вы все время сравниваете с индексацией? Кстати, в приведенном Вами коде происходит тройное полное сканирование таблицы. Упаковка с индексами это делает вроде бы за один проход. Вам диски и сеть не жалко? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:20 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
ладно, ребята, с Вами весело. наверное правиль, что убили фокспро. но я вот для Вены сделаю фенечку,- успокоюсь насовсем. а так, конечно радует еще как ни странно, что в обсуждение "впрягаются" "помошники", спасибо помогло сдержаться - а то бы матюги писал - уже набрал в 25 этажей, но сдержался. странно, я ведь злой и ругаюсь матом, а ваш кулинар-теоретик словесную жвачку не жует, но учит детей гадостям. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:28 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЯ тебе показал что бывает при битом индексе.Хм, думаете, это большая неожиданность? Подменять руками его не обязательно, достаточно того что комп на котором выполнится "UPDATE чего-нибудь" успеет записать изменение в DBF и не успеет в CDX (или наоборот), по любой причине: железо, сетка, пользователь задачу снял. Это редкость, но бывает, т.к. запись последовательно происходит, сначала один файл, затем второй. И если это произойдет, то ближайшей переиндексации результаты запросов будут с ошибкой, если это будет долго продолжаться, то это приведет к тому что какой-нибудь пользователь это увидит и поправит согласно своим возможностям (т.е. усугубит проблему), и потом эти косяки надо будет кому-то разгребать. Я этим "кем-то" был уже несколько раз.А кто таким не был? Поэтому предпочитаю минимизировать интервал с момента сбоя до исправления.Обычно устраняют причины сбоя, а не его последствия. У меня есть возможность индексировать базу каждый день, поэтому я ей пользуюсь.А еще у Вас есть возможность не индексировать базу каждый день, но Вы почему-то этой возможностью не пользуетесь. Все это к тому, что Вы далеко не первый и наверняка не последний, кто сталкивался с описанными проблемами. Просто другие устраняют причины проблем и о проблеме забывают. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:35 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Sergey Sizov, перечитай пожалуйста топик, кто за что агитирует, а то в меня моими же камнями... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:43 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TSergey Sizov, перечитай пожалуйста топик, кто за что агитирует, а то в меня моими же камнями...Я его читал. И если я задаю вопросы, то значит в прочитанном я не нахожу достаточно прочной и однозначной причинно-следственной связи. Я могу понять сравнение упаковки при наличии индексов и упаковки без индексов с последующим созданием индексов. В обоих случаях имеем одинаковые состояния системы и до операции, и после операции. Я НЕ могу понять сравнение упаковки при наличии индексов и просто упаковки без индексов. До операции имеем индексы, после операции индексов не имеем. Потом таки индексы безусловно делаются и состояние системы приходит в исходное. Но время на индексацию почему-то выкидываем из сравнения. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 18:54 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Юристишко-выпускникесли софт на фокспро и используем родные таблицы, то всегда пакуем и никак по-другому? По-любому. Пакуем и точка. Юристишко-выпускникесли софт на фокспро и используем таблицы, то размер всех этих таблиц всегда в 4 млн.записей? + уж добью до конца - пусть кулинар чего-нить придумает еще про меня: если софт на фокспро и используем родные таблицы, то эти таблицы всегда в сети и т.д. ? Тормоза начинают быть заметными при сетевом использовании, поэтому исходим из наихудшего варианта. Размеры тестовых таблиц чтоб не в микросекундах сравнивать. Юристишко-выпускникесли софт на фокспро и используем родные таблицы, то пользователь не станет задавать вопрос, а че это Ваше приложение такое творит, что мечется по нашему диску как шальное (упаковка приводит к созданию нового ф-ла, а старый переим-ся) ну я про битые сектора там, еще чего на диске умалчиваю ...? Так это ж хорошо что мечется, а то будет писать в один и тот же сектор и тогда точно сектору поплохеет, а так равномерный износ диска. Тему необходимости использования PACK предлагаю закрыть на этом. Кому надо все аргументы за и против прочитают выше. PS поизучал странные результаты "select count(*) from ..", пришел к выводу что таблица вообще не используется при наличии двух индексов. Стоит только добавить еще чего-нибудь внутрь селекта (например "select count(*), max(ID) from ..") так результаты сразу начинают быть близкими: Время без хитрого индекса (при помеченных) > Времени с хитрым индексом (при помеченных) > Время без хитрого индекса (после PACK) Эту тему тоже предлагаю закрыть, т.к. каждый доказал то, что ему важнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 19:02 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Sergey SizovDima TSergey Sizov, перечитай пожалуйста топик, кто за что агитирует, а то в меня моими же камнями...Я его читал. И если я задаю вопросы, то значит в прочитанном я не нахожу достаточно прочной и однозначной причинно-следственной связи. Я могу понять сравнение упаковки при наличии индексов и упаковки без индексов с последующим созданием индексов. В обоих случаях имеем одинаковые состояния системы и до операции, и после операции. Я НЕ могу понять сравнение упаковки при наличии индексов и просто упаковки без индексов. До операции имеем индексы, после операции индексов не имеем. Потом таки индексы безусловно делаются и состояние системы приходит в исходное. Но время на индексацию почему-то выкидываем из сравнения. Почему? Спор был принципиально применять PACK или нет, я за то чтоб применять, оппоненты против. Аргументы выше. Про скорость PACKа упомянул по причине что его присутствие незначительно замедлит. Что касается этого кода: Код: plaintext 1.
Код: plaintext 1. 2. 3. 4.
PS Давай тему PACKа закроем, я его использовал, использую и буду использовать. Особенности использования немного оффтопик. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 19:10 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TЧто касается этого кода: Код: plaintext 1.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 19:18 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Sergey SizovВот это утверждение мне кажется сильно спорным. На чем оно основано? Код: plaintext 1.
Можешь на моем примере с битым индексом проверить. Filemon.exe еще есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 20:33 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Banditos Некоторые замечания для справки. Как уже заметил Dima T , при определенных условиях, вместо создания новой временной таблицы FoxPro просто переоткрывает уже существующую с наложенным фильтром. Это на порядки более быстрая операция, чем создания новой таблицы. Чтобы этого избежать, нужно добавить опцию NOFILTER. Проверить, чем же является полученный курсор в реальности можно при помощи функции DBF(). В условиях Вашего примера, это будет так Код: plaintext 1. 2.
Я прогнал Ваш тест с NOFILTER на локали для курсора и он показал, что факт использования или не использования индекса по Deleted() не оказывает вообще никакого влияния на время выполнения выборки. Если же выполнить тест по сети для таблицы, то результаты похожи на результаты Dima T . Правда разница на порядок меньше, но не суть. Только вот, что из этого следует-то? Только то, что и было сказано до этого. Индекс по Deleted() ускоряет выполнение выборки, если записей, помеченных как удаленные, относительно много. В Вашем примере 30% от общего объема. По-моему, против этого никто и не возражал. Спор шел вокруг того, а действительно ли в реальных задачах следует доводить дело до того, чтобы записей, помеченных как удаленные стало так много? Еще раз сошлюсь на то, о чем, по моему мнению, идет спор http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=830283&msg=10312202 PS: Не стоит "шашкой махать" и доказывать что "я самый умный, а все вокруг - идиоты". Я все-таки надеюсь, что Вы хотите не "себя доказать", а разобраться в ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 21:08 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Dima TПроверил твой запрос, код теста тут: (...) Тут похоже какой-то баг оптимизатора на подобных запросах, т.к. совсем без индексов и с индексом только по ID время одинаковое. Еще более интересные результаты получаются, если в таблице вообще нет записей, помеченных как удаленные. Т.е. в этом же самом тесте не давать команду Код: plaintext
Как ни странно, но результаты будут примерно такими же. Наличие индекса по Deleted() дает ускорение. Однако, если вместо Count(*) сделать выборку, результат которой будет содержать относительно большое количество записей, ну, хотя бы такое Код: plaintext
Такой запрос вернет 100тысяч записей, что, учитывая мизерный размер одной записи, не займет много времени. В этом случае результаты сразу же выравниваются и приходят к ожидаемым значениям. С индексом по Deleted(), как при отстутсвии записей, помеченных как удаленные, так и при удалении 33% записей, выборка выполняется медленнее, чем без него. Также произойдет резкое ускорение запроса с Count(*) в случае наличия удаленных записей при настройке SET DELETED OFF Похоже, действительно, функция Count(*) работает только по индексам, если запрос полностью оптимизируем . Только это, скорее, не баг, а фича. Поскольку реально ускоряет работу. Следовательно, в тестовых примерах недопустимо использование Count(*), поскольку она, скорее, вводит в заблуждение ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2011, 21:31 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
ВладимирМСледовательно, в тестовых примерах недопустимо использование Count(*), поскольку она, скорее, вводит в заблуждение + стопитьсот а в реальных приложениях не использовать запросы с сортировкой, суммированием, группировкой и т.д. еще раз доказывает пристрастие кулинара-теоретика, не имеющего отношения к разработке эксплуатируемых приложений, к лживым выводам, удобных для навязывания своих мыслей детям. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2011, 07:23 |
|
Выделить удаленные записи в Grid
|
|||
---|---|---|---|
#18+
Нашел альтернативу использованию PACK. Задумка такая: заменяем в удаленных записях значение полей используемых в индексах на заведомо несуществующие. Таким образом при выборке по индексу он даст только не помеченные на удаление записи. PRIMARY KEY можно не трогать, т.к. он уникальный, а запросы с указанием значения помеченного на удаление - нарушение целостности. Для тестов сделал repl in with 0 for deleted() Потестил немного, результаты по убыванию скорости выполнения: 1. без хитрого индекса после PACKа 2. без хитрого индекса с 33% помеченных на удаление (без PACKа) 3. с хитрым индексом после PACKа 4. с хитрым индексом с 33% помеченных на удаление (без PACKа) Реально все три варианта почти равны (разница по времени 1-2%) Еще польза от такого подхода - быстрое нахождение помеченных записей (IndexSeek) и их восстановление (RECALL) для повторного использования. (По BINARY индексу IndexSeek() не работает), т.е. можно организовать работу с минимальным количеством помеченных совсем без PACKа раз уж столько претензий к нему. Какие будут доводы против такого подхода? Мне мысль понравилась, обязательно использую в каком-нибудь проекте, чтобы на реальной проге посмотреть. PS Доводы про то что вдруг чего-то нужное случайно пометили просьба не приводить, исходим из того что если пометили - значит запись не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2011, 08:18 |
|
|
start [/forum/topic.php?fid=41&msg=37145749&tid=1584516]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 148ms |
0 / 0 |