|
|
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Всем привет! Такая вот проблемка... В течение некоторого времени были проблемы с сервером и при входе в программу (программа локально на компе, база на сервере) появлялось сообщение "запись находится вне заданного диапазона" или что-то такое. Как я понял при анализе ситуации - это слетал индексный файл. После переиндексации все восстанавливалось. Но это обнаруживалось только при входе в программу при открытии индексированного файла. Вопрос. Техника у нас не очень надежная, так вот есть ли возможность в процессе работы (не выходя/входя в программу) отслеживать такую ситуацию? Кстати, раньше я просто переиндексировал систему (не reindex, а просто переиндексация по новой). После этого перед переиндексацией я стал удалять индексные файлы. И пока, тьфу-тьфу, работает. Здесь может быть животное порыто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 09:53 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
1. Если индексы создаются заново, то их лучше предварительно удалить DELETE TAG ALL, т.к. без этого предыдущий (замененный) индекс остается в индексном файле, но не используется (мусор вобщем). 2. По максимуму отказаться от монопольного открытия таблиц, т.к. при вылете клиента изменяющего что-то монопольно в таблице индекс почти всегда портится, а иногда и таблица. 3. Если есть возможность надо сделать ежедневную индексацию. Например по заданию на сервере по ночам, или если сервер на ночь выключается, то при включении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 10:54 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Сорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"... А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"? Не могу въехать - что за фигня?! Причем на одной из машин... Какие настройки??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 11:35 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
2DimaT на 1. Теперь я просто удаляю индексные файлы. на 2. Монопольного доступа на таблицы ни у кого нет. Дается только для переиндексации, базе никто не сидит. на 3. Так и сделано. Каждое утро, тот кто первый запускает программу, автоматом попадает на переиндексацию. При этом создается на время переиндексации временный файл, наличие которого пресекает вход другим пользователям. После переиндексации он удаляется. НО.В том-то и загвоздка, что я боюсь слета индекса в процессе работы и того, что не удастся это вовремя обнаружить! Ведь тогда может быть катастрофа - не работать поиск или, что хуже работать неправильно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 11:43 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"... А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"? Не могу въехать - что за фигня?! Причем на одной из машин... Какие настройки??? Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы. Варианты возникновения: USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так. StandD... НО.В том-то и загвоздка, что я боюсь слета индекса в процессе работы и того, что не удастся это вовремя обнаружить! Ведь тогда может быть катастрофа - не работать поиск или, что хуже работать неправильно! Тогда сделай какую-нибудь систему контроля корректного выхода. Например объект где в Init() - добавление записи в таблицу активных пользователей, установка флага активности и ее блокировка (при вылете блокировка снимается автоматом), в Destroy() снятие флага и снятие блокировки записи. И проверку - блокировки нет, а флаг есть значит пользователь вышел некорректно, возможна порча индексов При запуске проги создается объект, желательно с private datasession (чтобы случайно таблицу не закрыть в процессе работы), проверяется наличие некорректных выходов - в случае наличия - сообщение пользователю "Надо индексировать". При нормальном выходе (даже при прерывании по ошибке в коде) объект уничтожается и снимает флаг активности, а при зависании компа или пропадании сетки флаг активности останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 12:38 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
2DimaT В принципе у меня создается таблица активных пользователей, которые попадают в нее при входе и удаляются при корректном выходе. Т.о. если пользователь неактивен,а запись о нем есть - это признак некорректного выхода и намек на необходимость переиндексации. Но это при вылете пользователя из программы. Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 12:44 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandD... Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает. Например? Средствами VFP испортить индексы невозможно, фокс сам следит за их целостностью, за исключением одной ситуации: индекс не структурный (имя файла CDX не совпадает с именем DBF), таблица открывается без индекса и изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 12:58 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Dima T StandD... Но ведь возможен вариант невылета, но угробливания индекса. Вот что меня смущает. Например? Средствами VFP испортить индексы невозможно, фокс сам следит за их целостностью, за исключением одной ситуации: индекс не структурный (имя файла CDX не совпадает с именем DBF), таблица открывается без индекса и изменяется. А вот это уже интересно... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо? И второе - насчет изменения таблицы при отключенном индексе - надо проверить, не мой ли косяк! Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:01 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо?Плохо только тем что надо следить чтобы индексы всегда открывались. А чем не устроили одноименные индексы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:05 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Dima T StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо?Плохо только тем что надо следить чтобы индексы всегда открывались. А чем не устроили одноименные индексы? Открываются... А одноименные не делаю черт его знает почему. Когда-то что-то навеяло. Теперь всегда индексный файл именую как filedbf+"i". Традиция, блин... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:11 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Если отказался от структурных индексов только из-за проблем с индексированием при серьезном слете индексов, то это лечится пропуском ошибок: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:16 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Спасибо, пробую разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 13:34 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandD... Дело в том, что имена индексных файлов у меня не совпадают с именами таблиц! Насколько это плохо? Еще один подводный камень в данной ситуации - использование команд SQL (SELECT, UPDATE, INSERT, DELETE) приводит к автоматическому открытию таблицы (если она не открыта ранее) и индексы в твоем случае не откроются, т.е. SELECT - будет тормозить, а UPDATE, INSERT, DELETE приведут к необходимости индексации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 14:17 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Понял, приму к сведению! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2007, 17:16 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandDТехника у нас не очень надежная, так вот есть ли возможность в процессе работы (не выходя/входя в программу) отслеживать такую ситуацию? Пробовал технику, рекомендуемую на UT. Проблемы с индексами иногда обнаруживались, иногда нет. Мой частный вывод - автоматизировать данный процесс нельзя. Можно только немного "уменьшить" вероятность его появления методами описанными выше - ежедневным удалением и пересозданием индекса. P.S. Причина, по которой у нас возникала пробема - часть таблиц открывалась на изменение в FPW2.6 а часть в VFP 9.1 c буферизацией. Отсюда и получался "развал" индекса (то есть неправильное построение ветки индекса), потому как FPW2.6 и более поздние версии FoxPro имеют отличия в построении b-trees... В общем этот bug вроде как был уже исправлен в VFP 9.1... Но многие фирмы продолжают использовать FPW2.6... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 10:55 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
2 Sergey Ch Спасибо за информацию. Индексы уже давно утром убиваю и создаю. В общем-то, что-то вроде нащупал. В программе ведется протокол действий пользователей (где-то по 4-5 тыс. записей в день). Так вот по времени в протоколе локализовал один компьютер, на котором сразу после переиндексации вошли в программу и индексы слетели через несколько минут (в это время на других компах программа не была запущена). Нашел на нем вирус, убил. Пока тихо. Возможно ли разрушение индекса вирусом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 11:05 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandD... Пока тихо. Возможно ли разрушение индекса вирусом? Теоретически - да, практически - маловероятно, почитай описание вируса, я такого ни разу не видел, да и смысла портить индексы у вирусописателя нет, только если какой шизанутый враг dbf-а писал. А кроме лечения вируса никакие изменения не проходили? exe обновил? локально что-нибудь снес и поновой записал? неверно это помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 12:56 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Dima TТеоретически - да, практически - маловероятно, почитай описание вируса, я такого ни разу не видел, да и смысла портить индексы у вирусописателя нет, только если какой шизанутый враг dbf-а писал. А кроме лечения вируса никакие изменения не проходили? exe обновил? локально что-нибудь снес и поновой записал? неверно это помогло. Да нет, ничего не менял... То-то и беспокоит. А насчет врага dbf-a - это да, это круто! ж-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:08 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
StandD2 Sergey Ch Возможно ли разрушение индекса вирусом? Весьма возможно. Если вирус контролирует наиболее часто открываемые файлы и мешает правильному построению дерева индекса (причина аналогичная указанная мной выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2007, 13:11 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Dima T RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"... А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"? Не могу въехать - что за фигня?! Причем на одной из машин... Какие настройки??? Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы. Варианты возникновения: USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так. Прозевал ответ... :-( "Другие машины" - это не насчет сети и т.п. Это просто копия на другой комп - софт исключительно локальный! Индексирую и после пары операций - DELETE TAG ALL, а в ответ - INDEX TAG NOT FOUND! Если дать ему DELETE TAG QQQ (т.е. указать конкретное имя) - без проблем! И это только на одном компьютере и только на VFP7 - "рядом" есть VFP9 и на нем никаких ругательств... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2007, 13:28 |
|
||
|
Улет индекса
|
|||
|---|---|---|---|
|
#18+
Redrik Dima T RedrikСорри, что не совсем в тему... Вот тут мелькнула фраза "DELETE TAG ALL"... А не попадалось ли кому-нибудь в ответ на это "INDEX TAG NOT FOUND"? Не могу въехать - что за фигня?! Причем на одной из машин... Какие настройки??? Вероятно на других машинах в эту часть программы не попадают или индекс от локальной таблицы. Варианты возникновения: USE ... order MyOrder (set order to MyOrder, seek ... order MyOrder и т.п.) - при несуществующем тэге MyOrder, или если индексный файл не открыт. Включи в проекте debuginfo и сохраняй в лог где конкретно ошибка происходит, а потом код смотри что не так. Прозевал ответ... :-( "Другие машины" - это не насчет сети и т.п. Это просто копия на другой комп - софт исключительно локальный! Индексирую и после пары операций - DELETE TAG ALL, а в ответ - INDEX TAG NOT FOUND! Если дать ему DELETE TAG QQQ (т.е. указать конкретное имя) - без проблем! И это только на одном компьютере и только на VFP7 - "рядом" есть VFP9 и на нем никаких ругательств... Т.е. на другом компе работает - копируешь на этот и ошибка начинается? А если эту с ошибкой на другой комп? Может в контейнере БД что-то съезжает? смотри мой самплес выше - я ж не просто так 10 проходов с игнорированием ошибок делаю. Их там столько разных вылазит, что обрабатывать замучишься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2007, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34658908&tid=1588580]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
134ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 448ms |

| 0 / 0 |
