powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос к таблице в общем доступе
71 сообщений из 71, показаны все 3 страниц
Запрос к таблице в общем доступе
    #38106015
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Столкнулся с проблемой выполнения запроса (по времени) к таблице, открытой в общем доступе.
Размер таблицы - 25 Mb

Ниже приведены измерения по времени отработки запроса в разных режимах доступа.

1. Приложение открыто только у меня - 0:23
2. Приложение открыто у 3-х пользователей - 8:35
3. Приложение открыто только у меня (без перезапуска) - 8:50
4. Приложение открыто только у меня (с перезапуском) - 0:24

Время работы с тремя и более пользователями возрастает в 20-25 раз.
И почему-то в 3-м варианте, хоть все остальные пользователи вышли - время показано примерно такое же. Помог только перезапуск приложения.

Может кто-то сталкивался с аналогичной проблемой?
Есть какие-то варианты оптимизации?

Спасибо.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106034
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
Set exclusive off

стоит?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106051
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ffffffffffffffff,

в главной програме стоит "ON"
но таблици открываются: USE table1.dbf SHARED IN 1 ALIAS table1
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106057
Ffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поэкспериментируйте с off.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106250
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ffffffffffffffff,

Результаты практически такиеже, даже в некоторых случаях больше.

При открытии таблицы одним пользователем запрос выполняется в считанные секунды, а если откроет ещё дотя бы один пользователь - время увеличивается до 7 - 8 минут... Это как раз очень и напрягает.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106293
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDFfffffffffffffff,

Результаты практически такиеже, даже в некоторых случаях больше.

При открытии таблицы одним пользователем запрос выполняется в считанные секунды, а если откроет ещё дотя бы один пользователь - время увеличивается до 7 - 8 минут... Это как раз очень и напрягает.
Это особенность системы блокировок виндовса. Как только файл открыл второй пользователь, так скорость падает, причем заметно. Замедление в десять раз однажды наблюдал.

Для начала попробуй все тоже самое поселив базу на другом компе, может с сеткой какие проблемы у компа на том где база.
И запрос не помешает оптимизировать. 25 сек. для 25 Мб это сложно назвать "выполняется в считанные секунды". Если все локально на один комп поместить сколько времени выполняется?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106294
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeD,

Вы где храните базы данных - ОС какая?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106341
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

На другой комп перенести не могу. Это корпоративный сервак и туда прописаны права у пользователей.
Пробовал данную таблицу перед тем, как выполнить к ней запрос, скопировать к себе на комп.
Время с 8 минут сократилось до 2,5-3, но это потому что в запросе такжу участвуют и другоие общие таблицы.
Запос выполняется в двойном цикле: выборка по квартально (4 вкартала) и внутри каждой выборки данные по 7-ми подразделениям.
Естественно, если включать в выборку только 1 квартал - время будет в 4 раза меньше.
ОС у пользователей - Винда 2000 и ХР. На серваке сокрее всего тоже Винда.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106343
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alextashk,

ОС у пользователей - Винда 2000 и ХР. На серваке сокрее всего тоже Винда.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106410
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

А что это за особенность системы блокировок винды?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38106529
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDDima T,

А что это за особенность системы блокировок винды?
Ньюансов не знаю, суть в следующем: если по сетке файл открывают несколько компов в SHARED режиме, то скорость выборки из этого файла падает в разы (я в десять раз наблюдал, возможно больше бывает) по сравнению со временем когда один пользователь работает.

В том что ты описал нет ничего сверхъестественного кроме варианта 3. Хотя возможно надо файлы переоткрыть. не проверял.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107097
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDDima T,

На другой комп перенести не могу. Это корпоративный сервак и туда прописаны права у пользователей.
В чем проблема? Безопасности у ФС никакой нет. Скопируй всю базу к себе, расшарь и подцепись к ней с пары компов пользовательских. Позапускай свой запрос для тестов.

По-хорошему если база большая и тормозит - надо прогу в терминал переселять, тогда все запущенные копии будут летать т.к. запускаются на том же компе где база. Или переписывать в клиент-сервер.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107631
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDЗдравствуйте.

Столкнулся с проблемой выполнения запроса (по времени) к таблице, открытой в общем доступе.
Размер таблицы - 25 Mb

Ниже приведены измерения по времени отработки запроса в разных режимах доступа.

1. Приложение открыто только у меня - 0:23
2. Приложение открыто у 3-х пользователей - 8:35
3. Приложение открыто только у меня (без перезапуска) - 8:50
4. Приложение открыто только у меня (с перезапуском) - 0:24

Время работы с тремя и более пользователями возрастает в 20-25 раз.
И почему-то в 3-м варианте, хоть все остальные пользователи вышли - время показано примерно такое же. Помог только перезапуск приложения.

Может кто-то сталкивался с аналогичной проблемой?
Есть какие-то варианты оптимизации?

Спасибо.

Сильное подозрение - глючная клиентская часть. Т.е. где-то не закрываются какие-то файлы (или типа того) и фоксу или системе приходится самим заниматься этой ерундой. А ОС сервера, она тут вроде не при чём. Дали ей запрос на 1 чтение (файла), тупо читает. Дали запрос на 100 чтений - читает, но дольше. Единственно, если это ХР, то одновременных соединений не может более 10. Одинадцатое будет игнорировано.
Вы там тщательнЕй исходник просмотрите. И ещё рекммендация - можно это безобразие вообще на одной машине делать, запуская несколько копий программы. Если глюк повторяется - это точно клиентская прога.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107672
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага...

Set Peprocess имеется где нибудь в коде?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107690
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rewareЕдинственно, если это ХР, то одновременных соединений не может более 10. Одинадцатое будет игнорировано.
Эта проблема из другой оперы. XP не может одновременно устанавливать более 10 TCP-соединений. Если соединение установлено, то это ограничение ни при чем, будет обслуживаться сколько угодно соединений. Эта проблема касается P2P-прог которые при старте пытаются одновременно установить соединение с кучей других точек, которых гораздо больше десяти.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107705
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наблюдала в своей проге подобного рода ёрзание около полу года! Грешила на сетку, клиентские машины и т.д. Короче заняла позицию "плохого танцора". Затем (всётаки) воспользовалась советом - приобрести книжечку "Рефакторинг SQL приложений" ISBN 978-5-93286-145-5. Достаточно было беглого прочтения, чтобы понять о необходимости переделать 99% запросов в проге. Ну и результат превзошел все ожидания. Очень рекомендую.
Извините если что не так.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107714
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмilaприобрести книжечку "Рефакторинг SQL приложений"
Речь о файл-сервере, а книжка про SQL-сервер, которого в данном случае нет.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107723
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, а к DBF-таблицам вы не SQL-запросами стучитесь?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107733
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaПростите, а к DBF-таблицам вы не SQL-запросами стучитесь?
SQL-запрос к SQL-серверу и к DBFам это разные вещи.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107905
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше таки на сервере поставить нечто Win>=2000.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107942
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TrewareЕдинственно, если это ХР, то одновременных соединений не может более 10. Одинадцатое будет игнорировано.
Эта проблема из другой оперы. XP не может одновременно устанавливать более 10 TCP-соединений. Если соединение установлено, то это ограничение ни при чем, будет обслуживаться сколько угодно соединений. Эта проблема касается P2P-прог которые при старте пытаются одновременно установить соединение с кучей других точек, которых гораздо больше десяти.
Мда, действительно малость из другой оперы, тем более, что автор не указал ОС сервера.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107952
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ffffffffffffffff
Код: vbnet
1.
Set exclusive off

стоит?
Так если в задаче есть SQLи, то они глубоко чихают на ваши ON/OFF. И как вы там открыли таблицы (или вообще не открыли их) им глубоко фиолетово.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107967
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и я про то же!
грамотный Select и моргнуть не успеете.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38107985
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмilaи я про то же!
грамотный Select и моргнуть не успеете.
Ну, в целом верно, Людмila (а чё не Lucy ?), только с SQL-выборками аккуратнее надо, надо не забывать закрывать таблички (SQL таблицы открывает, наплевав на всё, измывается над ними и бросает их, как есть, дальше дело программёра) и/или переводить их в предшествующий SQLю режим.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108006
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это уже 2-я серия.
и USE IN Alias всё еще работает - на практике проверено!
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108087
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается, что если кто-то захочет выполнить SELECT, то все остальные пользователи должны отработать перед ним "USE ...".
И не только, согласно старттопику они должны выйти из приложения, если их трое и более.
Так как из-за них увеличивается время выборки в 20-25 раз, что могло бы означать и сброс буферов на диск, если бы не необходимость перезапуска приложения после них.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108089
Fox_Old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Людмilaи я про то же!
грамотный Select и моргнуть не успеете.

Абсолютно согласен!
А если еще в таблице(ах) и правильные индексы созданы...
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108104
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то эксперименты проводил, смотрел как читаются файлы по сетке. Наблюдения оказались следующими:
1. Если один пользователь работает в файлами, то виндовс кэширует файл на клиенте, т.е. прога работает с локальным кэшем.
2. Если пользователей два и более, то при каждом обращении идет считывание по сетке всего что надо фоксу. Отсюда и тормоза, сетка гораздо медленнее чем кэш в памяти. Если пользователей много или сервер еще какие базы файл-серверные содержит, то тут запросто тормоза в 20-30 раз получить.
Поэтому для больших ФС баз (не важно на чем написанных) надо либо в терминал их селить чтоб к базе обращение локально происходило, либо переписывать в клиент-сервер. Хотя как вариант можно гигабитную сетку проложить, но в большинстве случаев это будет дороже и сложнее сделать. Как вариант хотя бы сервер по гигабитному каналу подцепить.

PS Запросы надо оптимизировать всегда. Но данную проблему это не решит, только сгладит немного.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108106
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TSQL-запрос к SQL-серверу и к DBFам это разные вещи.
Кто бы спорил.
Так и формируйте к MySQL-свой, к SQL Server - свой, к Oracle... , ну и к Фоксу естественно - свой SQL-запрос.
Боюсь спросить инициатора темы выложить свой метод запроса, а то судя по (... на сервере вроде Винда какая-то), как минимум -Чудненько.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108132
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaБоюсь спросить инициатора темы выложить свой метод запроса, а то судя по (... на сервере вроде Винда какая-то), как минимум -Чудненько.

А я бы все-таки попробывал бы увеличить кеширование, если это возможно.
И перенес бы эти таблицы и эту часть кода в небольшую тестовую программку, чтобы провести эксперименты, которые описал ДимаТ - сервер, каналы, ОС, приложение ...
Чтобы не гадать каждый раз туманное SOS, а найти причину принципиально.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108312
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12А я бы все-таки попробывал бы увеличить кеширование, если это возможно.
Это вопрос к админам виндовса. Но думаю это невозможно. Если только кэшировать средствами самой проги с учетом логики работы приложения.

sg12И перенес бы эти таблицы и эту часть кода в небольшую тестовую программку, чтобы провести эксперименты, которые описал ДимаТ - сервер, каналы, ОС, приложение ...
Чтобы не гадать каждый раз туманное SOS, а найти причину принципиально.
Выкладывать таблицы очень нездоровый совет. Не надо выкладывать рабочие базы в открытый доступ. Всегда есть желающие ознакомится с чужой инфой, останавливает только стоимость. А тут пусть не все, но абсолютно бесплатно.
В данном случае конкретные данные роли не играют. Проблема есть и ее масштаб зависит только от размера данных. Поэтому достаточно сгенерить таблицу с 1-2 справочниками на одном компе и со второго пробовать делать какой-нибудь боле-мене стандартный запрос. Затем то же самое но открыв базу с третьего компа (или на первом если третьего нет).
Оценивать трафик проще всего открыв состояние сетевого соединения, там видно входящий/исходящий трафик. Правда у проводной сетевухи он в пакетах измеряется. Если по вайфаю - будет в байтах.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108432
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЯ как-то эксперименты проводил, смотрел как читаются файлы по сетке. Наблюдения оказались следующими:
Ваши эксперименты тянут где-то на докторскую, но скорее всего вами заинтересуется отдел внутренней безопасности Microsoft. А именно - винда кэширует файл(ы) в оперативку, НО как она это делает - фиг его знает. Разбивает ли она невлазящие файлы на куски и чего она делает с этими кусками, где они хранятся - вопросы к Гейтсу. Да, собственно, неизвестно и то, как винда поступает с файлом даже в 100 байт, где, как и куда.
Dima T1. Если один пользователь работает в файлами, то виндовс кэширует файл на клиенте, т.е. прога работает с локальным кэшем.
Недоказуемо. Вы снимали траффик между клиентом-сервером и анализировали каждый переданный по сети байт ? :)
Dima T2. Если пользователей два и более, то при каждом обращении идет считывание по сетке всего что надо фоксу.
Это прописано и в хелпе VFP, но на уровне "для домохозяек". Причём, не обязательно "два и более", может быть в сети и один юзер.
Dima TОтсюда и тормоза, сетка гораздо медленнее чем кэш в памяти. Если пользователей много или сервер еще какие базы файл-серверные содержит, то тут запросто тормоза в 20-30 раз получить.
Сеть естессно гораздо медленнее кэша и это будет всё заметнее с подключением новых рабочих мест. Однако, после их обратного отключения от задачи, ситуация должна возвращаться у последнего (единственного) юзера к тем-же цифрам (время). Это я всё к тому, что автору надо капитально ревизовать клиентскую прогу. То-ли некорректные SQL-запросы (а чё упёрлись в SQL-запросы ?), то-ли баги в открытии/закрытии таблиц/баз.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108441
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне до ваших и чьих-либо баз и табличек фиолетово, но запрос то можно выложить, если не хотите читать книги и хотите чтобы вам помогли. Хотябы:
SELE * from Table1 WHERE условия отбора INTO CURS MyCurs
-по каким полям индексирована Table1
-условие отбора с порядковой точностью

Мудрёный запрос к 2-3 таблицам в среднем по 100Мб со всякими join и прочими происходит за 0,000* сек на средненьком компе (есть даже Pen3) и безразлично сколько человек юзают данные Таблицы (у меня до 40, в том числе КурсорАдаптеры с обновлением из этих же таблиц с интервалом в 20 сек)
Рулит грамотный SQL-запрос!!!
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108475
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмila,

SELECT - это одно. А вот INSERT и DELETE будут все равно тормозить.
Рулит не селект - рулит правильное проектирование приложения...
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108539
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM ... правильное проектирование приложения...

Всегда интересовал вопрос - что означает это выражение применительно конкретно к VFP.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108667
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12, с труллялами - не общаемся
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108726
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rewareDima TЯ как-то эксперименты проводил, смотрел как читаются файлы по сетке. Наблюдения оказались следующими:
Ваши эксперименты тянут где-то на докторскую, но скорее всего вами заинтересуется отдел внутренней безопасности Microsoft. А именно - винда кэширует файл(ы) в оперативку, НО как она это делает - фиг его знает.
Как это реализовано не важно. Сгенери табличку весом в гигабайт и проделай то что я написал. По времени выполнения запроса будет видно разницу.
rewareDima T1. Если один пользователь работает в файлами, то виндовс кэширует файл на клиенте, т.е. прога работает с локальным кэшем.
Недоказуемо. Вы снимали траффик между клиентом-сервером и анализировали каждый переданный по сети байт ? :)
Это легко реализуемо. Если ОС клиента закэшировала файл и просто периодически опрашивает сервер что файл больше никем другим не открыт. Такой опрос гораздо быстрее и меньше трафика потребляет чем каждый раз файл тянуть. Речь о кэше на чтение.
rewareОднако, после их обратного отключения от задачи, ситуация должна возвращаться у последнего (единственного) юзера к тем-же цифрам (время).
С этим согласен. Но конкретного ничего не скажу, не проверял такую ситуацию.
reware то-ли баги в открытии/закрытии таблиц/баз.
Вот это точно бред. Как можно неправильно открывать/закрывать таблицы в фоксе? Это происходит фоксе у всех одинаково, если б такая проблема была, то о ней было бы давно известно.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108752
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел тест.
Исходные данные:
Таблица со строками накладных размер 186 Мб, индексы 96 Мб. Положил ее на комп ничем не нагруженный.
На своем компе открыл фокс и запускал замер по три раза для каждой ситуации. Условие выборки (nKol = 80) специально взял не попадающее в индексы (каждый раз фокс делал полный скан) чтоб тормозило заметнее.
Код замера
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if !used('test')
	use \\Server\Share\test.dbf shared
endif

if used('result')
	use in result
endif
lnSec = seconds()
select * from test where nKol = 80 into cursor result
? seconds() - lnSec


Компы все с Win7x64 сетка 100 Мбит

Результаты:
1. Таблица открыта только у меня: 22 сек, 1.1 сек, 1.1 сек
2. Открыл на втором (только use \\Server\Share\test.dbf shared): 55 сек, 55 сек, 55 сек
3. Закрыл на втором (use in test и закрыл фокс): 55 сек, 55 сек, 55 сек
4. Закрыл таблицу на своем (use in test): 22 сек, 1.1 сек, 1.2 сек
Ну и трафик: 207 Мб скачано там где 22 и 55 сек, и 0 (ноль) там где 1 сек.

Мои выводы:
1. С пунктом 3 никакой мистики нет. Так работает виндовс. Надо переоткрывать файл если кто-то его открыл/закрыл на другом компе.
2. Кэш на чтение есть.
3. Одновременное открытие на двух компах замедляет чтение (55 вместо 22 сек), т.е. кроме самого чтения еще идет какая-то работа на стороне сервера. 22 сек это предельная скорость, т.к. просто копирование ~10 Мб/сек, т.е. 207 Мб = 20.7 сек и сам запрос 1.1 сек. Остальные 33 сек. (55 - 22) это потери по вине виндовса на сервере, его расходы на расшаривание файла.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108779
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Людмila,

Да запрос вроде простой.

Пример открыьтя таблиц:
USE pcBdSchedulesPath+"_put_list.dbf" SHARED IN 4001 ALIAS bd_schedules_apl_loc


Пример запроса (выполняется в цикле по периодам и внутри каждого периода по отделам)
SELECT;
bd_schedules_apl_loc.apl_id,;
bd_schedules_apl_loc.apl_stats,;
bd_schedules_apl_loc.apl_numb,;
bd_schedules_apl_loc.apl_name,;
bd_schedules_apl_loc.apl_datetm,;
bd_schedules_apl_loc.apl_datego,;
bd_schedules_apl_loc.rep_ocens,;
bd_schedules_apl_loc.kol_banks,;
(IIF(bd_schedules_apl_loc.kol_banks>0,bd_schedules_apl_loc.kol_banks,cur_sum_clnt.sum_clnt))sum_clnt,;
bd_schedules_otdels.otdel_code,;
bd_schedules_otdels.work_srok,;
bd_schedules_otdels.work_id,;
nsi_type_work.group_name,;
cur_lost_requery.max_daterq,;
({..})date_norm,;
(0)isp_stats,;
cur_lost_query.no_requer;
FROM ;
bd_schedules_apl_loc;
INNER JOIN bd_schedules_otdels;
ON bd_schedules_apl_loc.apl_id = bd_schedules_otdels.apl_id ;
INNER JOIN nsi_type_work ;
ON bd_schedules_otdels.work_id = nsi_type_work.id_work;
left OUTER JOIN cur_sum_clnt;
ON bd_schedules_apl_loc.apl_id = cur_sum_clnt.apl_id ;
left OUTER JOIN cur_lost_requery;
ON bd_schedules_apl_loc.apl_id = cur_lost_requery.apl_id ;
left OUTER JOIN cur_lost_query;
ON bd_schedules_apl_loc.apl_id = cur_lost_query.apl_id ;
WHERE bd_schedules_apl_loc.apl_stats = "закрыто";
AND bd_schedules_apl_loc.apl_datego BETWEEN pdDateRepStart AND pdDateRepFinish;
AND bd_schedules_otdels.otdel_stat = 1;
AND bd_schedules_otdels.otdel_base = "1";
AND bd_schedules_otdels.otdel_code = ALLTRIM(lcOtdelCode);
AND bd_schedules_apl_loc.wiev_code # "1";
INTO CURSOR cur_stat1 READWRITE


Комментарий:
bd_schedules_apl_loc - основная таблица со списком дел
bd_schedules_otdels - таблица со списком отдлов-исполнителей
nsi_type_work - таблица НСИ с видами работ
cur_lost_query, cur_lost_requery - курсоры с датами запросов и ответов по делам
cur_sum_clnt - курсос с кол-вом клиентских записей для каждого дела
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108793
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeD, смотрел чего оптимизатор фоксовый пишет?
Код: sql
1.
2.
3.
4.
SYS(3054,12,'lcVar')
select ...
? lcVar
_cliptext = lcVar && Скопировать в буфер обмена


Покажи чего получилось.

Еще вопрос: Количество записей bd_schedules_apl_loc и количество записей в результате запроса.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38108864
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Оптимизатор выдаёт следующее:
--------------------------------------------------------------------------------------
Rushmore optimization for table bd_schedules_apl_loc: none
Rushmore optimization for table bd_schedules_otdels: none
Rushmore optimization for table nsi_type_work: none
Rushmore optimization for intermediate result: none
Rushmore optimization for intermediate result: none
Rushmore optimization for intermediate result: none
Joining table nsi_type_work and table bd_schedules_otdels using temp index
Joining intermediate result and table bd_schedules_apl_loc using temp index
Joining intermediate result and intermediate result using temp index
Joining intermediate result and intermediate result using temp index
Joining intermediate result and intermediate result using temp index
--------------------------------------------------------------------------------------

Число записей в основной таблице - около 15 тыс.
В результирующем запросе - 5 - 9 (в зависимости от одела)

Запрос выполняется в 4х7 цикла, каждый примерно по 6-7 секунд (при запуске приложения несколькими пользователями)
В итоге и набегает около 3 минут.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109014
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeD, у тебя оптимизатор ни одного индекса не использует, т.е. все таблицы тянутся на клиента и делается скан таблицы.
Надо бы сделать индексы bd_schedules_apl_loc.apl_datego, bd_schedules_otdels.apl_id и nsi_type_work.id_work
Код: sql
1.
2.
3.
4.
5.
6.
sele bd_schedules_apl_loc
index on apl_datego tag apl_datego
sele bd_schedules_otdels
index on apl_id tag apl_id
sele nsi_type_work
index on id_work tag id_work


bd_schedules_otdels.apl_id и nsi_type_work.id_work - это ключевые поля таблиц как понимаю. Странно что на них индексов нет.
Ну индексы таблицам надо не перед запросом делать, а где-то заранее в специально предусмотренное для этого время.

ну и курсоры индексировать по apl_id после наполнения чтоб оптимизатору этим не заниматься
Код: sql
1.
2.
3.
4.
5.
6.
sele cur_lost_query
index on apl_id tag apl_id
sele cur_lost_requery
index on apl_id tag apl_id
sele cur_sum_clnt
index on apl_id tag apl_id


DmDeDЗапрос выполняется в 4х7 цикла
Что меняется во WHERE запроса при каждом проходе? Есть смысл один раз сделать предварительную выборку всех нужных данных из таблиц в курсор, проиндексировать его если надо, а затем использовать курсор внутри циклов. т.е. примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT ...;
FROM bd_schedules_apl_loc;
  INNER JOIN bd_schedules_otdels ON bd_schedules_apl_loc.apl_id = bd_schedules_otdels.apl_id ;
  INNER JOIN nsi_type_work ON bd_schedules_otdels.work_id = nsi_type_work.id_work;
  WHERE ????;
INTO CURSOR cur_preselect


Тогда тормоз будет один, а не 28. Пусть он будет чуть дольше выбираться, но не в 28 раз.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109053
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Индексы я не ставил по двум причинам: 1. в индексированных таблицах замедляются операции ввода и редактирования данных, 2 - при добавлении новых записей необходима повторная переиндексация, что подразумевает отключение от базы всех пользователей.
В данном варианте исполнения приложения это не совсем удобно. В дальнейшем возможно база будет разделена на текущую (куда добавляются и редактируются новые записи) и архивную (закрытые дела, по которым редактирование осуществляется крайне редко). Быть может тогда стоит применить индексирование к архивной части базы, т.к. данный запрос формируется именно по закрытым делам.

Согласен, что процес запроса "цикл в цикле" не совсем удачное решение. К сожаленю, так построена структура формирования отчёта. С другой стороны, при одиночном использовании приложения этот запрос выполняется за 20-25 секунд (от момента запуска до открытия готового отчёта в excel). Это нормально по сравнению с 3-8 минутами (при коллективном использовании приложения).
Т.е. сам запрос отрабатывает относительно быстро (понятно, что при индексации будет ещё быстрее). Не понятна причина, по которой разница по времени возрастает раз в 20, когда подключается хотябы ещё 1 пользователь.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109066
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

по WHERE меняется сначала период (1 квартал, 2, 4 или 4), а внутри код отдела, для которого формируется отчёт.

например,
выбрали 1-й квартал.
для периода с 01/01 по 31/03 в цикле для каждого отдела выгружаются данные и записываются на разные листы в excel в столбец А

Выбрали 2-й квартаол
для периода с 01/01 по 31/03 в цикле для каждого отдела выгружаются данные и записываются на разные листы в excel в столбец А
для периода с 01/04 по 30/06 в цикле для каждого отдела выгружаются данные и записываются на разные листы в excel в столбец B

и т.д.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109077
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDИндексы я не ставил по двум причинам: 1. в индексированных таблицах замедляются операции ввода и редактирования данных, 2 - при добавлении новых записей необходима повторная переиндексация, что подразумевает отключение от базы всех пользователей.Откуда такая информация??
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109082
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDИндексы я не ставил по двум причинам ...
причины ставить не рассматривались в принципе?
Тогда только предварительный селект из этой чудо-базы. Как я выше предложил.

DmDeDНе понятна причина, по которой разница по времени возрастает раз в 20, когда подключается хотя бы ещё 1 пользователь.
13764359 это прочитал? как раз про причину.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109101
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDпо WHERE меняется сначала период (1 квартал, 2, 4 или 4), а внутри код отдела, для которого формируется отчёт.
Выбери сначала за год по всем отделам в курсор, проиндексируй курсор по дате и дальше 28 раз из курсора. Без индексов в базе так будет в 27-28 раз быстрее.

PS Пересмотри свое отношение к индексам. При изменении/добавлении замедление незначительное и после они автоматом перестраиваются. Индексация нужна только если прога вылетела в процессе изменения базы, т.е. данные успели сохраниться в таблицу, а индекс не успел перестроится.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109104
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Да, читал. Просто на столько явное расхождение по времени и неужеди всё уходит на сеть...

Изначально индексирование не рассматривалось. Были несколько другие задачи и объёмы. + слышал не очень-то лестные отзывы о работе с индексированными таблицами: периодически индексы падали... А так, да. Но скорее для варианта с разделёнными базами.

В любом случае, Dima T, спасибо.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109107
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

В книгах по Фоксу читал, но сейчас уже не помню в каких именно.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109122
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDВ книгах по Фоксу читал, но сейчас уже не помню в каких именно.Видимо, вы читали не те книги
Первое: если ввод/редактирование производится интерактивно, то замедление от использования индексов несравнимо с общим временем простоя системы.
Второе вообще неверно - про что и рассказал Dima T .
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109138
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMDmDeDВ книгах по Фоксу читал, но сейчас уже не помню в каких именно.Видимо, вы читали не те книги
В книгах есть упомянутые фразы, но в данном случае они очень бездумно вырваны из контекста сказанного в книгах.
DmDeD, советую перечитать и осмыслить все что написано про использование индексов.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109147
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM,

Спасибо за совет.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109155
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Но основная проблема, как я понял, связанна с сеткой?
Да пусть сейчас таблица непроиндексирована, но и в 20 раз быстрее выполняется запрос в одиночном режиме.
Допускаю, что с индексами будет работать гораздо быстрее... Вот интересно проверить сколько покажет тестирование по времени в многопользовательском режиме... (меньше 8 минут?)

Ещё раз спасбо за советы.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109178
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

с проиндексорованной таблицей получилось 1:28 вместо 2:35
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109231
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПровел тест.
Исходные данные:
Таблица со строками накладных размер 186 Мб, индексы 96 Мб. Положил ее на комп ничем не нагруженный.
На своем компе открыл фокс и запускал замер по три раза для каждой ситуации. Условие выборки (nKol = 80) специально взял не попадающее в индексы (каждый раз фокс делал полный скан) чтоб тормозило заметнее.
+
Код замера
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if !used('test')
	use \\Server\Share\test.dbf shared
endif

if used('result')
	use in result
endif
lnSec = seconds()
select * from test where nKol = 80 into cursor result
? seconds() - lnSec


Компы все с Win7x64 сетка 100 Мбит

Результаты:
1. Таблица открыта только у меня: 22 сек, 1.1 сек, 1.1 сек
2. Открыл на втором (только use \\Server\Share\test.dbf shared): 55 сек, 55 сек, 55 сек
3. Закрыл на втором (use in test и закрыл фокс): 55 сек, 55 сек, 55 сек
4. Закрыл таблицу на своем (use in test): 22 сек, 1.1 сек, 1.2 сек
Ну и трафик: 207 Мб скачано там где 22 и 55 сек, и 0 (ноль) там где 1 сек.

Мои выводы:
1. С пунктом 3 никакой мистики нет. Так работает виндовс. Надо переоткрывать файл если кто-то его открыл/закрыл на другом компе.
2. Кэш на чтение есть.
3. Одновременное открытие на двух компах замедляет чтение (55 вместо 22 сек), т.е. кроме самого чтения еще идет какая-то работа на стороне сервера. 22 сек это предельная скорость, т.к. просто копирование ~10 Мб/сек, т.е. 207 Мб = 20.7 сек и сам запрос 1.1 сек. Остальные 33 сек. (55 - 22) это потери по вине виндовса на сервере, его расходы на расшаривание файла.

Интересный тест.
Интересно, а в приватной сессии то же самое или как.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109235
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDНо основная проблема, как я понял, связанна с сеткой?
Да
DmDeDДопускаю, что с индексами будет работать гораздо быстрее... Вот интересно проверить сколько покажет тестирование по времени в многопользовательском режиме... (меньше 8 минут?)
Создай индекс и проверь :) Индекс уменьшает нагрузку на сетку.
Главное ускорение от индексов в том что фокс качает сначала индекс (не весь, а только нужную часть), получает из него какие записи надо скачать и затем качает только нужные, а не все.
Например в твоем селекте:
Код: sql
1.
2.
3.
SELECT ...;
FROM bd_schedules_apl_loc;
WHERE bd_schedules_apl_loc.apl_datego BETWEEN pdDateRepStart AND pdDateRepFinish


без индекса: клиент полностью скачает к себе таблицу bd_schedules_apl_loc и после будет делать выборку перебором записей.
Если бы был индекс по bd_schedules_apl_loc.apl_datego: клиент скачает индекс, получит какие записи нужны и скачает только эти записи.
Т.е. чем меньше записей попадает под условие выборки тем быстрее будет выборка.

Что касается ключевых индексов по справочникам (bd_schedules_otdels.apl_id и nsi_type_work.id_work) то у тебя фокс сначала скачивает всю таблицу, затем создает для нее временный индекс, о чем оптимизатор и написал: "Joining table nsi_type_work and table bd_schedules_otdels using temp index"
Если бы индекс был, то был бы скачан индекс, а по нему только требуемые записи.

Размеры индексов в разы меньше таблиц, да и поиск там идет не тупым перебором, поэтому при правильном использовании ускорение получается значительное.

Например если продолжить мой тестовый пример и создать индекс по nKol, то в случае нескольких пользователей вместо 55 сек получается 6,1 сек и трафик 6.5 Мб вместо 207 Мб. (результат выборки 22 тыс. записей из 7.8 млн)
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109240
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMВидимо, вы читали не те книги


Вам надо тему открыть "Правильное проектирование приложения в VFP" и там начать выкладывать свои познания.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109260
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

походу сначала придётся перепроектироваться всю структуру БД и понять, что индексировать

возможно даже какие-то постоянные данные (например, НСИ "ОКАТО" или "Формы собственности") единажды переносить с сервера на станцию пользователя и открывать их с неё...
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109261
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg12, ещё разок повторить, с кем не общаемся?
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109299
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDDima T,

с проиндексорованной таблицей получилось 1:28 вместо 2:35
на 40% уже результат. Правда 1:28 тоже многовато.
Думаю в твоем случае самый быстрый способ это один раз сделать предварительную выборку в курсор, курсор проиндексировать по дате, а затем из него строить отчет в циклах. Главный тормоз все-таки сетка. Если один твой запрос без индексов делается 6-7 сек. при этом затягивая всё на клиента, то предварительная выборка будет не намного дольше. Зато последующие из курсоров будут выполнятся намного быстрее и их скорость никак не будет зависеть от того сколько пользователей работает. Т.е. максимум должно получится нормальные для тебя 25 сек плюс 10-15 сек на предварительную выборку. Хотя возможно все вместе будет быстрее 25 сек.

Если созреешь создать индексы для таблиц, то их обязательно надо обслуживать, т.е. периодически пересоздавать потому что:
1. Прога может вылететь не сохранив все данные и в результате имеем индекс не соответствующий данным (комп сглючил, сбой в сети, сервер перегрузили, пользователь снял задачу и т.д.)
2. Индексы "вырождаются" при интенсивном изменении данных, т.е. структура дерева индекса становится неэффективной и не дает максимально-возможной скорости выборки.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109346
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

да придётся
это хоть как-то позволит решить сетевые проблемы
но наверное я паралельно буду всё же часть таблиц локализовать, что бы в сети они вообще не участвовали

я как-то больше отдавал приоритет интерфейсной часть программы, а программная всегда была на втором месте, т.к. пользователю первое важнее...

ещё раз спасибо!
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109349
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDвозможно даже какие-то постоянные данные (например, НСИ "ОКАТО" или "Формы собственности") единажды переносить с сервера на станцию пользователя и открывать их с неё...

Появятся еще и другие проблемы.
Например - как сохранять их целостность, как обновлять эти справочники при необходимости и др.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109355
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDпоходу сначала придётся перепроектироваться всю структуру БД и понять, что индексировать
Структуру не надо менять.
Минимально индекс должен быть на ключевом поле. А для остальных полей смотреть какие фильтры в запросах используются (WHERE) и для часто используемых полей добавлять индексы.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109383
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sg12,

ну на клиенте фокс не стоит и dbf штатными программаи не открывается, а пользователь вряд ли озадачится на тему изменения НСИ, хотя всё возможно....
а обновление происходит автоматически при запуске приложения (если файл на компе пользователя отличается от того, что выложен в сеть - идёт удаление и копирование но комп пользователя)
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109390
DmDeD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Я предполагал проводить повторное индексирование на этапе администрирования в начале операционного дня
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109427
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без обид, я немного не понял написаное тобой.
Dima TПровел тест.
Исходные данные:
Таблица со строками накладных размер 186 Мб, индексы 96 Мб. Положил ее на комп ничем не нагруженный.
На своем компе открыл фокс и запускал замер по три раза для каждой ситуации. Условие выборки (nKol = 80) специально взял не попадающее в индексы (каждый раз фокс делал полный скан) чтоб тормозило заметнее.
+
Код замера
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if !used('test')
	use \\Server\Share\test.dbf shared
endif

if used('result')
	use in result
endif
lnSec = seconds()
select * from test where nKol = 80 into cursor result
? seconds() - lnSec


Компы все с Win7x64 сетка 100 Мбит

Результаты:
1. Таблица открыта только у меня: 22 сек, 1.1 сек, 1.1 сек
Явно кэш отработал во втором и третьем случае.
Dima T2. Открыл на втором (только use \\Server\Share\test.dbf shared): 55 сек, 55 сек, 55 сек
Ну а чё не пишешь, первый-то комп всё ещё пашет ? Пашет ТОЛЬКО второй комп ? Ну, чё, как дитё малое, нормально не можешь описать свой эксперимент и результаты ? Да пиши по-русски, в конце концов "Включил 1 комп, результаты такие-то, выключил его, включил второй комп - результаты твкие-то, включил задачу на двух компах - результаты такие-то...". Ну, фигня, согласись, то, что ты приложил (цифры) здесь, ну можно по-разному трактовать.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109533
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rewareНу а чё не пишешь, первый-то комп всё ещё пашет ? Пашет ТОЛЬКО второй комп ? Ну, чё, как дитё малое, нормально не можешь описать свой эксперимент и результаты ? Да пиши по-русски, в конце концов "Включил 1 комп, результаты такие-то, выключил его, включил второй комп - результаты твкие-то, включил задачу на двух компах - результаты такие-то...". Ну, фигня, согласись, то, что ты приложил (цифры) здесь, ну можно по-разному трактовать.
Я могу понять нежелание повторить, но нежелание просто внимательно прочитать написанное - это уже хамство.
Вроде однозначно написал:
Dima T На своем компе открыл фокс и запускал замер по три раза для каждой ситуации.
т.е. тестовый код ВСЕ разы запускался на моем компе. На втором просто открывал/закрывал таблицу. Чего делал на втором тоже писал:
Dima T1. Таблица открыта только у меня: 22 сек, 1.1 сек, 1.1 сек
2. Открыл на втором (только use \\Server\Share\test.dbf shared): 55 сек, 55 сек, 55 сек
3. Закрыл на втором (use in test и закрыл фокс): 55 сек, 55 сек, 55 сек
4. Закрыл таблицу на своем (use in test): 22 сек, 1.1 сек, 1.2 сек

rewareНу, фигня, согласись, то, что ты приложил (цифры) здесь, ну можно по-разному трактовать.
Давай свою трактовку. Только сначала перевари все что я написал.

ЗЫ По времени в Хабаровске 12-й час ночи, ты сначала выспись, потом ответишь.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38109580
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmDeDDima T,

Я предполагал проводить повторное индексирование на этапе администрирования в начале операционного дня
Обычно как-то так и делается. Раз в сутки достаточно.
Я обычно делаю запуск заданием на сервере при включении сервера (если на ночь отключается) или ночью (если круглосуточно работает). Во втором случае возможно что кто-то из пользователей прогу не закроет, тогда проиндексировать не получится.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38116753
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновляю индексы раз в неделю - (задание по выходным - Erase *.CDX), если все из проги вышли (бывает и такое)
Но по этому поводу есть мнение, что у индексных файлов всего два состояния - рабочий и Нет.
Смысл реиндекса ??? когда всё работает.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38116768
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюдмilaСмысл реиндекса ??? когда всё работает. ВладимирМ об этом говорил - при активной работе с записями (изменение полей, входящих в индексные выражения) структура индексного файла становится несбалансированной, что увеличивает время поиска в индексе. Поэтому периодическая реиндексация все же требуется. Другое дело, что можно индексировать таблицы с разной частотой - "сильнонагруженные" - чаще, а различные справочники, особенно всякие классификаторы и т.п. - значительно реже.
...
Рейтинг: 0 / 0
Запрос к таблице в общем доступе
    #38116948
Людмila
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм! "Несбалансированная структура индексного файла" !?!
Ну тогда Реиндекс - раз в неделю или почаще (в зависимости от интенсивности).
Спасибочки!

Вот перечитала всю имеющуюся в наличии увлекательную литературу по индексам (даже кажется поняла как это работает!) в связи с этим подправила их и where в запросах (и так было хорошо), но стало пошустрее раза в два-три (локально).

у меня к базе подключаются до 40 пользователей, тормозов никаких не наблюдается. Правда сетка гиговая на 2-ух свичах DGS-24.
в ходе работы в диспетчере задач (вкладка сеть) наблюдались мгновенные пики, порой до 40%. Конкретно работала по ним, по сетке пока не тестировала - Выходные!
(Кстати 1С грузит сетку до 30% и это не пики, а волна протяженностью по 3-7сек. Ужасно! Ладно хоть их мах. до 5-ти машин.)

Приблизительно такие же несколько crazy-запросов (как опубликованный выше, который собрали - "лишь бы работал") тоже попили кровушки, но вплотную занявшись ими добивались поразительных результатов. Удачи!
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос к таблице в общем доступе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]