Почему обновления внутри транзакции SQL все еще требуют дискового ввода-вывода? - PullRequest
2 голосов
/ 07 апреля 2010

В SQL Profiler вы можете видеть, что очень простые обновления таблицы по первичному ключу занимают около 10-30 мс каждый. При каждом 10-м обновлении в столбце записи отображается 1 , во всех остальных обновлениях - 0 . Это должно означать, что для каждого 10-го оператора обновления все еще требуется дисковый ввод-вывод. Интересно, почему это так. Не будет ли более эффективной очередь всех операций ввода-вывода, пока транзакция не будет зафиксирована?

Ответы [ 3 ]

4 голосов
/ 07 апреля 2010

А где бы вы хотели хранить такие обновления памяти после обновления таблицы размеров, скажем, 10 000 000 записей?

Где бы вы хотели хранить журнал транзакций.

КАК много, как кажется ОЗУ, мы не можем предполагать, что оно бесконечно ...

1 голос
/ 08 апреля 2010

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

В противном случае на самом деле желательно записывать на диск для длительных транзакций (но так, чтобы атомарность не нарушалась).

0 голосов
/ 08 апреля 2010

Это журнал транзакций

...