|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Insert в таблицы (обернув все это в транзакцию) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Что происходит? При вставке в Т2 примерно на 280-й тысяче в той же директории, где находится БД появился ТМР-файл, размер которого постепенно растет.... (следует заметить, что сама база находится не на машине-клиенте, а на сервере) Cрубив процесс, через некоторое время после создания этого файла, появилась возможность его просмотреть (до этого он был занят) (Кстати "срубление" процесса на сами таблиы не повлияло. Они не запоролись но и данные в них внесены не были) В нем информация была не очень удобочитаема, но можно было увидеть, что там записаны данные всех инсертов, о которых я писал выше (конечно только тех, которые успели пройти до срубания процесса). Повторяю все с начала (предыдущий процесс я ведь уничтожил, дабы посмотреть, что же в этом хитром ТМР-файле) Дожидаюсь последнего 500-тысячного инсерта, после которого, как видите появляется = Messagebox('500 000 is inserted into T2') , я еще раз просмотрел используемые таблицы Опа - те 2 таблицы открыть уже нельзя - заняты.... Теперь я гашу Мессаджбокс считаю раз-два-три - вынимаю сетевой шнур.... Вижу как постепенно.. гиснет ICQ... сеть отключена.. Фокс, о чем-то думает.... потом вываливает мне Error Writting to file... все транзакция не завершена, ибо закрыть фокс я не могу - ругается на незаверщенную транзакцию.... Срубаю процесс ВФП7.0.ехе Снова подключаюсь к сети, открываю ту же базу данных - смотрю те две таблицы, они пустые... то есть "что-то" все же откатило изменения. если просмотреть те же таблицы не через ВФП, а тупо по Ф3 ( ТАК - прошу не ржать!!! ) то выглядят они несколько "не так", как бы есть некий мусор, по сравнению с таблицами а еще точней физический размер файлов разросся.. так, как будто данные туда все же вставились... но сам фокс не отображает их... то есть данныхе и есть и нету... На работоспособность таблиц весь сей опыт не повлиял, они живы-здоровы... PACK на эти тиблицы ничего не изменил - физический размер их уж очень большой... Иными словами я предполагаю, что до некоторого объема инфа хранилась в оперативной памяти, и, тоько потом стала писаться в темп файл. Получился аналог лога. хотя наверное это всего лишь аналог. Далее, все это произошло (опыт я провел 5 раз) на 280-тысячном инсерте. Ранее никаких темпов не было.... какие я могу сделать выводы? А ровно никаких... Транзакция в ВФП сделала то, что от нее требовалось, ну и далее... ИМХО одновременная вставка в таблицы такого количества данных - у меня язык не поворачивается назвать это просто модификацией данных - это скорей импорт, который вряд ли в реальной работе будет проделывать простой пользователь программы (данный процесс на машине Celeron 1.2, 128 Mb RAM шел примерно 20 минут), сами посудите - такая загрузка - это уж никак не модификация конечным пользователем данных... Вот и все. Если кто-то желает поделиться соображениями = Wellcome ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2006, 11:39 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Как же все-таки работает механизм транзакций VFP на низком уровне? В хелпе к фоксу об этом, естественно, не написано. Но может, кто-нибудь на эту тему писал? Есть в сети такие материалы (можно на английском)? Захотелось об этом узнать чуть побольше, по мотивам спора в "звездных войнах". Поисковики не помогли (наверное, не так искал). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2006, 14:51 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
UггiКак же все-таки работает механизм транзакций VFP на низком уровне? В хелпе к фоксу об этом, естественно, не написано. Но может, кто-нибудь на эту тему писал? Есть в сети такие материалы (можно на английском)? Захотелось об этом узнать чуть побольше, по мотивам спора в "звездных войнах". Поисковики не помогли (наверное, не так искал). как я писал выше ИМХО до некоторого объема инфа хранилась в оперативной памяти, и, тоько потом стала писаться в темп файл. Получился аналог лога. хотя наверное это всего лишь аналог. И потом из этого темп файла по команде - закончить транзакцию пойдет писать в таблицы.. может так? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2006, 15:10 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Если есть время, то можно почитать некоторые мысли Jim Nelson на UT (для доступа к оригиналу - нужна регистрация на UT): Happy reading! Jim NelsonHopefully, by the end of this thread, we can all gain a clearer and accurate understanding of how data is physically stored on a HD and how it is retrieved/written for use in programs. The idea is that people who KNOW will contribute corrections or clarifications as may be needed. I will then produce a final document incorporating "the true story of an I/O operation" and mark it as the solution for the thread. I'll get it started by describing my understanding of this stuff... PHYSICAL storage I am sure that SCSI uses "fixed block architecture" (FBA) for physical storage of bytes on disk and I believe that all other HDs protocols use it too. I understand that FBA means that all user writeable/readable data areas are fixed and predetermined and equal in length (byte capacity). I also understand that FBA involves some pre-defined "control" data stored in specific area(s) of the drive during manufacturing. These areas are used for things like head alignment and cylinder/track positioning and error detection/correction, etc. A HD is built using round "platters" on which ferrous material is carefully deposited, typically on both the top and the bottom of each platter. Each platter can therefore provide two surfaces on which data can be written/read. Each platter has a fixed number of "tracks" and it is in these tracks that data is actually stored. Each track is a minute width and runs in a circle around the entire platter, essentially joining itself to form an unbroken area around the platter. Platters being round, each track is actually a slightly different length and it can be viewed that the inner tracks are both shorter and move more quickly than the outer tracks. However, ALL tracks have the same number of fixed blocks. A "cylinder" refers to a vertical relationship of platters and their tracks. Allow a platter with 10,000 tracks on each of its two recording surfaces and allow the identification of those tracks as being numbered from 1 to 10,000 from the inner-most track to the outermost track. This hypothetical device will then have 10,000 "cylinders" and each cylinder will be composed of two tracks. So cylinder #768 will be composed of track #768 of the top of the platter and track #768 of the bottom of the platter. In a similar device with 3 platters there would still be 10,000 cylinders but now each cylinder would be composed of six tracks, each of those tracks being the ones in direct vertical line with the one above it. I don't know if "cylinders" are actually material in a FBA device but I assume that they are. My guess is that cylinders constitute the order in which data files are written. For example, a file would be written to cyl-1, trk-1, cyl-1, trk-2, cyl-2, trk-1, cyl-2, trk-2 in a two-platter device. Data storage is totally unaffected by block (as in FBA) 'boundaries' and each block is always filled to the fullest. Of course the last data block for an application may well leave some portion of a (FBA) block unfilled. The main point to be made here is that the (FBA) block size is totally independent of application record size or block size that an application may choose to use so an application "block" may span several FBA blocks or there may be several application "blocks" (including a part of a "block" at the start/end) within one FBA block. LOGICAL storage I believe that the file system's design and its limitations constitute the primary factor of logical storage and that these are completely independent of device physical storage except as regards the total byte capacity of a HD. For instance the "cluster size" of a specific HD will vary depending on if the file system is FAT or FAT-32 or NTFS or HPFS. In fact FAT can only handle a small HD byte capacity compared to the size of drives available today. it is relevant to note here that a drive can be "partitioned" to improve its storage 'efficiency' and in such a case this part of the discussion is applicable to a "partition" as opposed to the (whole) physical drive. This "cluster size" forms the minimum size that any file system will write and constitutes its chosen "block size" for a specific device. Accordingly, if a "cluster size" of 32,767 bytes is in effect for a given drive (or partition) then a file of 10 bytes will be "occupy" 32,767 bytes, a file of 32,000 bytes will occupy 32,767 bytes and a file of 32,768 bytes will occupy 65,534 bytes. The file system maintains a consistent logical representation of what it has stored on the HD (or partition of the HD). It is the file system controlling I/O on the system where the data is physically stored that actually performs the work involved. I can't relate the specific details, but have surmised the following: a) The file system need know nothing about the physical storage mechanism other than its capacity. I suspect that the device must also be a FBA device. b) It seems like the file system needs to know of the existence of partitions, and their precise sizes, so that it can accurately determine the exact (physical) offset for files in specific partitions. My guess is that this would be a number stored in the file system's 'control' data and that it is simply added to the calculated cluster value on each read/write. c) Folders (directories and sub-directories) are a special portion of the file system used to facilitate identification by users are are hardly relevant to this discussion. d) There is some protocol for record locking that is universally applied within a file system. --- Don't know if this is applicable to locking of the header of a Visual FoxPro table. e) Files have several descriptive factors stored about each of them and the relevant ones here are: --- Length of the file in bytes; --- Start of file cluster number; --- Number of clusters from the start cluster; --- . . . and when the number of clusters above does not satisfy the files' byte length, additional information to define the next cluster(s) start number(s) and count(s). Since the file system works on a fixed cluster size for the drive (or partition) it is a simple matter for it to "instruct" the physical drive to 'read X bytes for me starting at byte Y and place them in (RAM) location Z. For a non-fragmented file it can do this in one operation but a fragmented file would require as many reads as there are fragments assuming that the whole file is wanted. Note, too, that some devices (SCSI for sure) can accept multiple offsets in a single read operation, though the file system also has to be smart enough to "construct" the read request to make use of this. A write operation is similar, though in this case the file system first has to determine what cluster the write is to start at and, if there is not sufficient room from that cluster number to contiguously write the whole record (file) then it must construct multiple operations and execute each of those (or a special 'multiple-write' operation if it is capable) and confirm completion. In either case the HD electronics can convert the starting byte value to a cylinder/head/record (block) and be governed according to the operation requested. Applications like Visual FoxPro undoubtedly do not read all files in whole (MS Word, for instance, would want to read a whole document, and possibly several, at a time). Accordingly, the file system accommodates an application's reading or writing whatever portions of a file it wishes to. The following suggests that the actual I/O operations are handled within the file system. That may be incorrect but I don't think it matters for what is being discussed. Things get highly speculative here (even more than previous < s >) I assume that Visual FoxPro typically physically reads and writes for at least full clusters of data. I assume that Visual FoxPro defines this requirement in the form of offset(s) within a specific table or .CDX or .FPT and that the file system would use the file handle to obtain the file's actual positioning (logically) on the HD or partition. I assume that Visual FoxPro stores this data in its "cache" and that it either doles out a copy of the specific record in process or points to the specific record's starting position within its cache. It seems reasonable to assume that it definitely uses a copy when buffering is in effect. I assume that Visual FoxPro writes a full cluster when it updates/writes record(s), with the exception of the last one, when I suppose that it writes only for the real data length. It seems true that certain commands can force Visual FoxPro to (re)read/(re)write data. Commands like FLUSH, UNLOCK, GOTO and RECCOUNT() have been attributed with this capability. In addition SETs like LOCK and REFRESH can affect this. The full sequence of a write is along the lines of: 1) Visual FoxPro is "signalled", either by filling a cluster-worth or by some application command or SET value, to write some data for a specific table (and/or .CDX and/or .FPT). 2) Visual FoxPro prepares (a) write request(s), forwards it/them to the file system, then waits for notification of completion. 3) The file system "translates" the write instruction(s) so that it/they will occur at the correct position(s) on the HD or partition. 4) The file system then gives the (translated) request(s) to the physical HD to execute and waits for successful completion(s). 5) The HD electronics "translates" each request to the actual cylinder/head/record(s) and performs the write operation, which probably includes writing some ECC data to the "control" portion of the drive for the specific area. 6) When the electronics receives the signal that the write is completed the same data is then re-read to verify success. 7) Assuming success of the physical write, the file system is notified of successful completion. 8) When ALL writes that the file system issued to the HD in connection with the original Visual FoxPro request(s) are returned as successful by the HD, the file system returns a successful completion to Visual FoxPro. 9) Visual FoxPro can then proceed with executing the application. NOTE: there are many opportunities for cacheing in the above. Some could be: a) Within 1 and 2 above, Visual FoxPro might move the data in question to a specific buffer area and refer the operations to use that data for the write(s). b) In 3 above the file system might want to make its own copy of the data to be written. c) In 5 above the data is almost certainly cached in storage within the HD control electronics. The relevance of an "EOF MARKER" for Visual FoxPro is unknown to me. In some cases I read that there seems to be one and that it matters a lot yet in other instances a situation is described where one seems to be irrelevant. It appears that Visual FoxPro could get along nicely without such a marker. PLEASE... correct, amplify or clarify as may be necessary to create a whole and accurate picture of the process. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2006, 23:38 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
А вот немного про транзакции в сети - ответ оппонента... Удивительно, что представители компании Microsoft в дискуссии не участвовали... Peter StordiauNo, I can't agree with it being legitimate that a record will be re-written (should be re-written) when the record is still being locked. Remember, this has all to do with app-logic, and the developer has to be (able to) depend on the logic on "transactions". It is therefor offical(ly known) that records won't flush until the unlock (with the table concerned being active (Select)), and an UNLOCK ALL will imply the logical transaction. Also do not forget that Novell once (still ?) anticipated formally on XBase's working by TTS (Transaction Tracking System) incorporating with XBase (possibly this was FoxBase/FoxPro only). TTS could deal with implicit transactions by means of RLock - Unlock only, and it could deal with explicit transactions by means of commands as BEGIN TRANSACTION, ROLLBACK, COMMIT etc., and Novell came with a Fox Library especially for this; We talk about the implicit transactions here. Sidenote : the implicit transactions will still be supported by means of TTS still existing, but I am sure that it just doesn't work. Or because of Novell's improper working on TTS itself, or because of Visual FoxPro not dealing with it properly, like flushing the record(s) out of the developer's control ... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.02.2006, 23:43 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Добавлю.. Не знаю как они работают, но я отключил их почти везде, идя на риск в случае сбоя на рабочей станции.. Оставил только там, где совсем без них петля.. Исчезла ошибка 108! И скорость заметно возросла. Немного лирики, в прододжении темы... Вчера умер у клиента диск на сервере новелл.. Пентиум 350. На нем стояла моя прога на FPD2.6 с теми еще транзакциями Netware.plb. Таблички по 550 мегабайт.. Новел починили.. и все.. Там у меня там каждая пакетная операция обернута транзакцией - скорость как из пулемета. А вот счас.. хотя логика работы программы та же.... Жалко, что и фокс и виндовс вроде же от одной команды, что ж они не сделают систему транзакций на стороне сервера хотя бы для своих же продуктов.. Acces, VFp, Basic... Или мож есть что-нибудь переносящее работу по ТТС на сторону сервера..? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2006, 05:07 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
MaestroEvДобавлю.. Не знаю как они работают, но я отключил их почти везде, идя на риск в случае сбоя на рабочей станции.. Оставил только там, где совсем без них петля.. Исчезла ошибка 108! И скорость заметно возросла. Ну Вы говорите о ФП2, а я о ВФП... Кстати говоря я наобород обернул транзакциями абсолютно все модификации, даже в случае модификации одной таблицы. почему? вероятно из-за перестраховки и так как написан некий простенький невизуальный класс, который всем этим управляет. Как показал мой опыт (выше), если транзакция проводится на небольшоек количество записей (под небольшим тут может быть и 1 и5 и 1000 я так полагаю), то сброс данных происходит практически мгновенно. Ведь только на 280-й тысяче стал заметен темп-файл. То есть смею предположить, что при модификации небольшого количества, к примеру одновременно 4 таблицы по 100 записей в каждую все пройдет моментально. Хотя, честно говоря за все время программирования не попадались задачи, в которых надо было модифицировать одновременно более 5-ти таблиц и при этом более чем по 3 записи в каждой. А если говорить реально - то одновременно 3-5 таблиц по 1-й записи в каждой.. уж так стараюсь планировать работу... Может и неправ я.... А проверял транзакции на полмиллиона вставок.. полмиллиона - ИМХО нереально много для простой модификации ведь так? такое количество ИМХО выносится в некий модуль "Импорт данных...." ну или как-то иначе его назвать... а простой пользователь ну никак не может столько модифицировать. Оппоненты вероятно имели в виду одновременно миллион пользователей вносят каждый по 20 записей.... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2006, 09:19 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Логика работы FoxPro с любыми временными таблицами однаковая. Временная таблица всегда начинает записываться в оперативную память. Как только оперативной памяти не хватает, происходит сброс информации в файл на диске. При этом, под оперативной памятю понимается не вообще ВСЯ память, а свободная (доступная) память. Т.е. тот предел, за которым начнется создание файла на диске определяется не просто размером оперативки, но и ее загруженностью. Сколько и каких приложений в настоящий момент используют память. Если у Вас на компьютере запущено пара десятков экземпляров Word и Excel, то оставшейся памяти будет значительно меньше. Т.е. для экпериментов вовсе не обязательно было делать транзакцию. Достаточно было просто создать временную таблицу и начать ее заполнять. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2006, 12:38 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
MaestroEv Жалко, что и фокс и виндовс вроде же от одной команды, что ж они не сделают систему транзакций на стороне сервера хотя бы для своих же продуктов.. Acces, VFp, Basic...Это сделано скорее всего по "идеологическим соображениям", чтобы вынудить нас купить MS SQL Server... MaestroEvИли мож есть что-нибудь переносящее работу по ТТС на сторону сервера..? Здесь два возможных пути: 1. Использование данных на сервере с помощью COM+ (я уже давано использую для этих целей Web Services + стандартная буферизация + транзакции, которые есть в самом FoxPro). Идеология написания программ полностью подчиняется идеологии клиент-сервер и более медленная, чем привычный файл-серверный подход... C 9 версии можно производить транзакции и со свободными таблицами - но пока не пробовал, так как данная операция не совместима со старыми версиями FoxPro. 2. Использование terminal-services (например, Citrix). Беседовал с одним товарищем из Австралии - у них порядко 500 одновременно работающих пользователей с базами данных FoxPro через эту службу (плюс 70 в локальной сети). Проблем нет, но их специфика работы позволяет производить архивацию, упаковку и перестройку индексов в течении ночи... P.S. На e-mail постараюсь ответить в выходные... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2006, 12:39 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Hi MaestroEv! > Не знаю как они работают Нормально работают - как и должны. > но я отключил их почти везде, идя на риск в случае сбоя на рабочей > станции.. Они не для того предназначены вообще-то. Это средство обеспечить согласованное изменение группы записей (обычно в нескольких таблицах, но может быть и в одной). > Оставил только там, где совсем без них петля.. Ну обычно некоторое средство и применяют там где это надо, а не "лишь бы, было". > Исчезла ошибка 108! И скорость заметно возросла. Это говорит лишь о том, что ты использовал для обновления таблично-блокирующие команды - например REPLACE затрагивающий (пусть и потенциально, а не реально) более 1 записи, DELETE который не SQL и тоже с FOR/WHILE - т.е. "множественный" и ряд других. При этом фокс автоматом переходит с записных блокировок на файловые. Это кстати несколько повышает скорость (не нужно по одиночке блокировать/разблокировать каждую запись), НО серьёзно снижает масштабируемость многопользовательской системы - т.е. пока один товарищ не закончит всю операцию - другие ждут. При этом использование транзакций усугубляет ситуацию - т.к. момент снятия блокировки откладывается до момента завершения всей транзакции. Впрочем правильное значение SET REPROCESS обычно тут выручает - т.е. вместо ошибки 108/109 мы получаем тихое "подвисание" на то время, пока не пройдёт чужая транзакция - потому и надо следить чтобы транзакция была как можно более "быстрой", и ни в коем случае не "тормозить" её всяким там Messagebox-ами и прочим "интерактивом". > Жалко, что и фокс и виндовс вроде же от одной команды, что ж они не > сделают систему транзакций на стороне сервера хотя бы для своих же > продуктов.. Acces, VFp, Basic... Учиывая что Win, а точнее WinApi растёт от совершенно несерверных версий типа Win9x и от файловых систем где в принципе никаких транзакций не было и быть не могло - то вполне понятно почему нет средств управления транзакциями. Nowell же изначально был северной (и именно файл-серверной) ОС. Конечно MS могла ввести нужное расширение в АПИ, позволить явное управление транзакциями в NTFS и даже включить это в ядро фокса - но тогда видимо действительно получается слишком уж хорошо :) > Или мож есть что-нибудь переносящее работу по ТТС на сторону сервера..? Да - COM+/WebService, а для самого COM+ ещё и система его распределённых транзакций (но тут фокс не очень хорош - нет многоступенчатого протокола подтверждения транзакции и приходится рисовать "компенсаторы" - пример есть в папке сэмплов про COM+)... Хотя опять таки это не совсем те транзакции - они не обеспечивают надёжность в плане восстановления после сбоев - только надёжность в плане согласования множественных изменений. В общем действительно проще тогда уже переходить на MS SQL или иной "большой" сервер. Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 02:20 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Hi Владимир! > Логика работы FoxPro с любыми временными таблицами однаковая. Это то да, но вот транзакция это вовсе не есть работа со временной таблицей - хотя внутренняя реализация и может быть основана на использовании подобных механизмов - хотя по логике это должно быть ближе к тому как работает буферизация нежели к реальной временной таблице... Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 02:21 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Hi Sergey! Не очень хоошая статья. В частности автор считает что это фокс занимается "сборкой мелочи в кластеры" - тогда как это делает сама ОС - фокс же не манипулирует такими большими массивами (и вообще вряд-ли в курсе столь низкого уровня организации хранения как кластер/сектор) - т.е. если ему надо, он и запросит всего 1 байт - а не будет тянуть весь кластер... Опять же создаётся впечатление что только фокс и может эффективно кэшировать данные - а ОС тут почти не при чём - хотя очевидно, что ОС играет очень большую роль - в частности для более полного управления кэшем ОС и был добавлен ключ FORCE к FLUSH... Второй же автор очень резонно замечает про то что до UNLOCK (который в случае с транзакцией совпадает с её завершением) никакие данные не пишутся на диск - т.е. должны оставаться лишь в памяти фокса (и вполне резонно что при нехватке оной фокс создаёт tmp). А вот что он там про Nowell говорит я не понял - фокс САМ никогда не управлял транзакциями Nowell - нужно было всегда руками рулить через соответствующую plb... Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 02:22 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Igor Korolyov Hi Sergey! Не очень хоошая статья ... Как говорится, чем богаты... К сожалению, мне пока не удалось найти подробное описание данного процесса от Microsoft (автор в конце вопросом открыает дискуссию, которая в оргинали имела место и ссылку для интересующихся я привел)... В связи с изменениями полититики MS в сторону открытости может еще удастся это сделать в скором будущем... А так все это пока напоминает "гадание на кофейной гуще"... Хотя с точки зрения прикладного программирования транзакции делают то, что мы от них хотим... But anyway, good luck! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 09:28 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Igor Korolyov следить чтобы транзакция была как можно более "быстрой", и ни в коем случае не "тормозить" её всяким там Messagebox-ами и прочим "интерактивом". игорь торможение данной транзакции Messagebox-м, было предпринято только с целью попробовать устроить сбой и проверить, что же произойдет. Кстати тот же пример (обмусоливается на фоксклубе - 500 000 апдейтов) - к сожалению показал, что в таких дозах увы - транзакция не работет так как нужно Жаль, но я с Вами полностью согласен оборачивать в одну транзакцию такое количество модификаций == рыть самому себе могилу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 09:46 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
I_Am222 игорь торможение прошу прощения, что написал Ваше имя с маленькой буквы (опечатка ) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 09:51 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
I_Am222 Кстати тот же пример (обмусоливается на фоксклубе - 500 000 апдейтов) - к сожалению показал, что в таких дозах увы - транзакция не работет так как нужно Не совсем верно... Не работает обновление после завершения транзакции. Это как раз непредсказуемый момент о котором мы знаем достоверно только одно - он должен быть как можно короче. И не факт, что не произойдет разрушение целостности промышленной базы данных, просто Ваши оппоненты в "Сравнении СУБД" об этом умышленно умалчивают. Законы физикик еще никто не отменял и изменения для ускорения как правило осуществляются в памяти и ее содержание как и в FoxPro еще должно быть корректно сброшено на диск. Другое дело, что в этих больших СУБД, зная эту проблему компьютеров, ведутся еще параллельно файлы, которые называют логи и сделано все возможное, чтобы сбрасывать содержание памяти на диск (в Oracle есть даже параметры которые регулируют этот процесс)... Но все эти большие СУБД ничего не знают, например о физической организации RAID array, соответсвенно СУБД будет думать, что буфер будет записан, а на самом деле он будет в кэше то есть в памяти... Тема эта долгая и вылилась во много страниц в соответсвующем тематическом форуме. Нам же просто надо соблюдать требования к аппаратному обеспечению, применять обработку данных на сервере (если данные очень критичны) и используя голову писать простые и прозрачные программы (а так-же регулярно делать копии, на которых "зациклины" все нормальные админы больших СУБД)... При соблюдении этих простых правил - FoxPro работает годами без единого сбоя и очень быстро... Good luck! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 10:23 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Игорь писал: "Это говорит лишь о том, что ты использовал для обновления таблично-блокирующие команды - например REPLACE затрагивающий (пусть и потенциально, а не реально) более 1 записи, DELETE который не SQL и тоже с FOR/WHILE - т.е. "множественный" и ряд других. При этом фокс автоматом переходит с записных блокировок на файловые." НЕТ!!! НИКОГДА!!! Хотя... REPLACE затрагивающий (пусть и потенциально) .. Пример - это как? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 13:07 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
MaestroEv Хотя... REPLACE затрагивающий (пусть и потенциально) .. Пример - это как? Код: plaintext 1. 2. 3.
Физически, будет изменена одна запись (текущая), но заблокирована будет ВСЯ таблица. Факт наличия опции FOR автоматически означает блокировку всей таблицы вне зависимости от того, сколько реально записей будет изменено. Даже если ни одной. Т.е. даже команда REPLACE FOR .F. MyField WITH ... Автоматически блокирует всю таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 14:06 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Sergey Ch И не факт, что не произойдет разрушение целостности промышленной базы данных, просто Ваши оппоненты в "Сравнении СУБД" об этом умышленно умалчивают. Я сам ПОСТОЯННО об этом думаю, но в свете боев в той ветке форума, у меня уже нет ни сил ни желания испытывать Оракл к примеру на устойчивость, потому как выстоит он или нет - мне абсолютно все равно У меня и ВФП не рушится, если глупостей вроде " ножницами по сетевому " не делать И вся эта война, повторяет ту.. 3-х летней давности.. на примерно такую же тему.... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2006, 15:23 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Hi I_Am222! Я понимаю для чего у тебя использован Messagebox() ;) Просто некоторые недальновидные товарищи в реальные программы такие констукции пишут. Для изучения "внутренних процессов" работы СУБД очень хорошо помогает FileMon - неплохо видно что, как и когда пишет/читает фокс. И кстати проблема разрушения данных скорее всего возникнет вовсе не в момент спокойного "висения" транзакции, а как раз на END TRANSACTION - т.е. когда пойдёт вся эта масса операций записи, сброса буферов/кэшей разного уровня... > Я сам ПОСТОЯННО об этом думаю, но в свете боев в той ветке форума, у меня > уже нет ни сил ни желания испытывать Оракл к примеру на устойчивость, > потому как выстоит он или нет - мне абсолютно все равно Испытывать можно по разному :) И конечно вполне можно завалить и Oracle - было бы желание. Просто там есть достаточно мощные средства для восстановления, и в большинстве случаев процесс восстановления происходит достаточно быстро и просто, хотя вот например когда у меня выбило на HDD пару секторов, мне оказалось проще и быстрее полностью пересоздать базу, нежели "выковыривать" что-то из упавшей (тем более что никакими стандартными средствами - ни виндовыми, ни тем более Oracle-вскими такой сбой диска не лечился) - а вот "выковырять" данные из побитой таким же способом dbf очень даже просто - конечно кроме тех которые погибли безвозвратно. Конечно ARCHIVELOG наверное хорошо помог бы, но хранить на диске в 5 раз больше информации в базе чем реально необходимо в "рабочем" режиме - это было (и остаётся до сих пор) излишне для разработчика. Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2006, 20:05 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
I_Am222И вся эта война, повторяет ту... К сожалению, мы должны участвовать в этих "не совсем умных" "войнах", потому как постоянно появляются люди, оторванные от реальной жизни, не написавшие в жизни ни одного законченного реального приложения для реального клиента и желающие поразмять пальцы... Нам надо участвовать, чтоб все знали, что "Fox еще жив, развивается и молодое поколение знало, что есть еще что-то помимо того, что им пичкают на занятиях в их учебных заведениях"... Good luck! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2006, 20:22 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Ну естественно нет у меня в программе никаких пакетных ...For ...команд. А ошибка 108 исчезла когда убрал транзакции... уменьшил. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2006, 03:58 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Hi MaestroEv! Значит Reprocess был крив. Ну не может "на пустом месте" такое возникать! Да, транзакции увеличивают время блокировок, но как правило очень несущественно - поскольку сами транзакции обычно очень коротки по времени. Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2006, 00:17 |
|
Как же работают транзакции
|
|||
---|---|---|---|
#18+
Прошло 2 года.. Опять появилась Error Read File... Или Index corrupted... Что поменялось? Просто установили WIn 2008 русский.. пустая операционка.. программа.. и все.. Права администратора. Просто вставка записей, удаление.. не всегда так себя ведет.. но за 2 минуты - в ошибку впадает в разных таблицах и местах проги.. бессистемно.. И раз 10 упал сервак в дамп.. Поменяли здание (другая сеть), сервак .. все повторилось .. даже падение в ДАМП... Что можно написать на фоксе чтобы сервак в дамп уронить? На Win 2003 все работает... VFP9.0 Я в шоке.. в Microsoft писали.. сказали что я че-то не так в проге написал (проге работает пару лет 12 магазинов, сеть, и под WIN2003 нормально :)) Куда рыть? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2009, 14:05 |
|
|
start [/forum/topic.php?fid=41&msg=33563286&tid=1586868]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 354ms |
total: | 501ms |
0 / 0 |