Форум » [x]Harbour » Вопрос к Паше или Александру по ADS » Ответить

Вопрос к Паше или Александру по ADS

Dima: Есть функция AdsCopyTable , работает довольно медленно. База в ~1.5 гига , копируется 3 минуты , при чем установка AdsLocking , False или True на скорость ни как не влияет. Можно ли на Сях написать AdsCopyFile , что бы он работал нормально при AdsLocking равной True и что бы это была именно файловая операция ? Hb_fcopy делает тоже самое за 55 сек , при AdsLocking равной False.

Ответов - 10

Pasha: Я с ads не имел дел не помню сколько, но точно больше десяти лет AdsLocking равная True это ADS_PROPRIETARY_LOCKING, т.е. Ads открывает файл монопольно, т.е никому больше открыть файл не даст. Это в принципе невозможно

Dima: Печально...

Pasha: вот фрагмент из доки: When Advantage Proprietary Locking is used, files are opened in an exclusive mode. Since the files cannot be opened by non-Advantage users, the Advantage Database Server can assume the environment is Advantage-only and internally maintains specific locking information. Non-Advantage applications can not open the files. Likewise, the Advantage Database Server cannot open files that were opened by some other application. Но по другому и быть не может. Копирование по записям всегда будет на порядок медленнее чтения/записи с использованием большого буфера Можно задать AdsCacheRecords побольше, хоть 1000 записей или еще больше


Dima: Так а средствами ADS нельзя скопировать как файл или там ни чего такого для этого нет ?

SergKis: Dima Если есть поле TimeStamp в таблицах (типа #), то можно один раз взять всю базу, потом брать только изменения от взятого ранее. Так делаю давно еще с clipper+mysql\firebird\dbf. Для базы firebird (записей от ~2 500 000-~10 000 000) каждые два часа планировщик запускает gbak.exe (копия данных всей базы), работает от 3-5 минут не останавливая работу с базой База в ~1.5 гига , копируется 3 минуты может не так страшно Но вариант брать только измененные, нравится больше

Dima: SergKis пишет: может не так страшно так это только 1 файлик а общий вес базы 10 гиг

Pasha: Может стоит закрыть базу, скопировать ее как набор файлов, и открыть вновь ?

Dima: Pasha пишет: AdsCacheRecords Поигрался цифрами от 50 до 10000 , на 20 сек быстрее всего лишь.

SergKis: Dima пишет так это только 1 файлик а общий вес базы 10 гиг В целом, это без разницы (если нет и сервера "зеркала"), копии нужны и сколько времени надо для этого НЕ ВАЖНО, если надо час или более, главное не останавливая работу с базой в момент копирования. Если есть возможность добавить поле TimeStamp, делать это + триггер сервера для заполнения его (поле # заполняет rdd) при изм. любого поля в записи. Возможно у самых "емких" таблиц и брать только измененные записи. Для мало изменяемых таблиц, можно брать копию и журналы log после нее. В целом вариантов не так много, а копии нужны всегда

alkresin: Dima пишет: Так а средствами ADS нельзя скопировать как файл или там ни чего такого для этого нет ? В тех версиях, с которыми я когда-то имел дело, таких средств не было.



полная версия страницы