|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Есть большой приложение, в котором работают одновременно до 10 пользователей. Это что-то типа "псевдосетевой" версии. Быстро работает только на том компьютере на котором эти DBF расположены, на остальным компах раз в 10 наверное медленней работает. Таблиц в принципе много, но рабочая таблица всего одна и она динамически создаётся каждый день новая, то бишь на каждый день своя DBF, количество записей не более 1000, сама по себе запись не большая. Вот из процедуры создания можно увидеть структуру: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Сама программа представляет из себя форма, на ней Grid, в котором всё крутится в реальном времени со своими программными блокировками. Куда копать и что делать не знаю. P.S. Программе уже лет 5 наверное или около тога и пользователи в принципе уже привыкли к тормозам, но думаю может быть знатоки смогут помочь мне в ускорении работы приложения, если что отвечу на все вопросы, но весь код программы выкладывать это конечно очень много... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:38 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Тормозит что? Перемещение по гриду? Во время перемещения есть обращения к другим таблицам? Как именно прописано? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:48 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima TТормозит что? Перемещение по гриду? Во время перемещения есть обращения к другим таблицам? Как именно прописано? Тормозит всё и перемещение и изменение ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:57 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Событие AfterRowColChange Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 13:59 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
И ещё большая процедура на LostFocus 6 колонки Grida из поля Text: Код: sql 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. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 14:01 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Если сомневаешься что конкретно выполняется в твоем коде, то можешь профилирофщиком посмотреть: настраиваешь исходники на рабочую базу, запускаешь свою форму, затем меню Tools-Debugger там меню Tools-Coverage Logging задаешь файл куда лог писать. Затем возвращаешься на форму и делаешь действия на которых тормозит. Переключаешься в дебагер и отжимаешь кнопку писания лога на тулбаре (или просто все закрой) Дальше смотришь лог, первая цифра сколько времени выполнялась строка кода, дальше где эта строка, последняя цифра уровень вложенности. Есть какая-то софтина для более удобного просмотра лога, только не помню как запустить, не пользуюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 14:03 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESСобытие AfterRowColChange ... Ты уверен что весь этот код надо выполнять при каждом переходе на другую клетку? Это зачем: Код: sql 1. 2.
Используй алиасы, т.е. при открытии Код: sql 1. 2.
а в коде Код: sql 1.
и тебе точно надо всю таблицу апдейтить или достаточно текущую строку? Если текущую, то изучай REPLACE Если надо всю - проверь что есть индекс по полю BLOK Тут может быть тормоз Код: sql 1.
Размеры таблицы saldo какой? Если от 100 строк то тоже индексы надо делать. В целом как-то коряво все спроектировано. Не надо столько сложных действий в AfterRowColChange() пихать. Это выкинь Код: sql 1. 2.
сделай индекс и используй IndexSeek() ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 14:24 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
[quot Dima T]AngelOKESСобытие AfterRowColChange ... Ты уверен что весь этот код надо выполнять при каждом переходе на другую клетку? Это зачем: Код: sql 1. 2.
Используй алиасы, т.е. при открытии Код: sql 1. 2.
Не удобно переключать с одной таблицы на другую ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 15:12 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Что я не так делаю? Код: sql 1. 2. 3.
Программа не может найти этот алиас... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 15:15 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Надо Код: sql 1.
Если в процессе работы постоянно открываются разные таблицы ZakazXXXX то оставь как было. На производительность это не сильно влияет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 15:19 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima TС индексами разбирайся. Запросы посмотри как отрабатывают. SYS(3054) показывает какие индексы используются в запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 15:31 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima T, не хотелось бы использовать индексы, хотя таблица saldo содержит свыше 1000 записей и самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее пробовал делать центром любой другой компьютер, то тогда ускорялся именно он, может я что-то не использую в коде или наоброт использую то что именно по сети тормозит? А на счёт индексов я всё таки думаю, что тормозили бы все, если бы была проблема только в индексах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 06:36 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:42 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье И думаю было бы уместно /но вовсе не обязательно/ после помощи Dima T его поблагодарить и рассказать в назидание другим про "грабли" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:49 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESDima T, не хотелось бы использовать индексы, хотя таблица saldo содержит свыше 1000 записей Оптимизатор запросов работает только с помощью индексов. Вот один из твоих тормозов Код: sql 1.
Без индексов каждый раз происходит полный скан таблицы, т.е. даже если тебе нужна только одна строка - читается (качается по сети) вся таблица, затем выбирается нужная запись. При наличии индекса - из индекса выбираются координаты нужных записей и читаются только эти записи. попробуй создать индекс Код: sql 1. 2.
и посмотри как будет работать. В идеале надо такой индекс Код: sql 1.
дальше так Код: sql 1. 2. 3. 4. 5. 6. 7.
Боятся индексов не надо. Надо просто разобраться как ими пользоваться и как обслуживать (плановая переиндексация, контроль снятия задачи пользователем и т.д.). AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее пробовал делать центром любой другой компьютер, то тогда ускорялся именно он, может я что-то не использую в коде или наоброт использую то что именно по сети тормозит? А на счёт индексов я всё таки думаю, что тормозили бы все, если бы была проблема только в индексах. Это особенность работы виндовса: Если файл открывает один пользователь, то файл кэшируется на его стороне. Тормозить не будет даже по сети. Чтение идет даже не с диска, а из кэша своего виндовса. Когда файл открывает второй (третий и т.д.) пользователь - включается контроль блокировок и скорость чтения резко падает. По сети 100 МБит скорость чтения от силы 10-20. Можешь глянуть размер saldo.dbf и прикинуть сколько времени надо на его чтение. Скорость ~1 Мбайт в секунду. Если файл расположен на том же компе - работает чуть быстрее, но опять же не со скоростью чтения с винта, а 3-5 Мбайт в секунду. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:56 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Владимир2012AngelOKESи самое интересное что как бы не нагружать программу, на основном компьютере всё будет в 10-раз быстрее Предоставь возможность доступа Dima T к main компьютеру и хотя бы одному клиентскому и будет тебе счастье И думаю было бы уместно /но вовсе не обязательно/ после помощи Dima T его поблагодарить и рассказать в назидание другим про "грабли" Поблагодарить я всегда рад, я благодарю и Dima T и вас я тоже благодарю!!! Но вот даже если я дам доступ по сети, что можно будет увидеть, я не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:56 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKES или есть какие-то инструменты которые помогут удалённо разобраться в ситуации?К примеру https://www.teamviewer.com/ru/ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:04 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima T, Можно ли создавать индекс вот так: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:05 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Эта конструкцию можно немного соптимизировать даже без индексов Код: sql 1. 2. 3. 4.
так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
тормозить будет на locate но он будет отрабатывать если текущая запись не та что надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:07 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima T, Тогд процедуру перемещения по таблице я тоже сокращаю и делаю такой: Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:10 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima T, Да забыл написать как я переделал под Alias разные таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:13 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESя не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации? Типа поработайте за меня а я скажу спасибо? Не, братец, тут форум чтобы помочь разобраться и дальше самому свою работу делать. Если хочешь чтоб за тебя поработали - есть форум "работа", там за вознаграждение покопаются в твоих исходниках. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:16 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
Dima TAngelOKESя не против показать код и объяснить всю логику работы программы или есть какие-то инструменты которые помогут удалённо разобраться в ситуации? Типа поработайте за меня а я скажу спасибо? Не, братец, тут форум чтобы помочь разобраться и дальше самому свою работу делать. Если хочешь чтоб за тебя поработали - есть форум "работа", там за вознаграждение покопаются в твоих исходниках. Это я Владимиру написал, да и так конечно я сам понимаю, что я сам должен разобраться во всём... Сейчас во всем коде меняю UPDATE на Replace, надеюсь это ускорит работу программы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:20 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESDima T, Можно ли создавать индекс вот так: Лучше так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
т.к. Use ... Excl невозможно сделать если кто-то уже открыл таблицу как Shared, то этот код надо выполнять в то время когда никто не работает. Например ночью из планировщика. Ежедневное пересоздание нужно потому что в процессе изменения данных индексы вырождаются и эффективность их использования снижается. И предусмотреть возможность запустить принудительно руками в рабочее время, на случай если какой-то сбой железа произойдет и индексы попортятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:27 |
|
Как ускорить работы с работой с DBF по сети
|
|||
---|---|---|---|
#18+
AngelOKESСейчас во всем коде меняю UPDATE на Replace, надеюсь это ускорит работу программы :) ускорит, если Replace текущей записи. Если Replace for ..., то UPDATE предпочтительнее, т.к. есть ньюансы с блокировками. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 08:29 |
|
|
start [/forum/topic.php?fid=41&msg=39038035&tid=1582258]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
78ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 200ms |
0 / 0 |